public void Update(rthsMeshData md, SkinnedMeshRenderer smr, bool useShadowSettings, bool useDeformData)
            {
                rthsInstanceFlag flags = ToFlags(smr.receiveShadows, smr.shadowCastingMode, useShadowSettings);

                if (useDeformData)
                {
                    var bones = smr.bones;
                    if (bones.Length > 0)
                    {
                        // skinned
                        var rootBone   = smr.rootBone;
                        var rootMatrix = rootBone != null ? rootBone.localToWorldMatrix : Matrix4x4.identity;
                        Update(md, flags, rootMatrix, smr.gameObject);
                        instData.SetBones(bones);
                    }
                    else
                    {
                        // non-skinned
                        Update(md, flags, smr.localToWorldMatrix, smr.gameObject);
                    }
                    instData.SetBlendshapeWeights(smr);
                }
                else
                {
                    Update(md, flags, smr.localToWorldMatrix, smr.gameObject);
                }
            }
 public void Update(rthsMeshData md, rthsInstanceFlag flags, Matrix4x4 trans, GameObject go)
 {
     if (instData && meshData != md)
     {
         instData.Release();
     }
     meshData = md;
     if (!instData)
     {
         instData      = rthsMeshInstanceData.Create(md);
         instData.name = go.name;
     }
     instData.transform = trans;
     instData.flags     = flags;
     instData.layer     = go.layer;
 }
            static rthsInstanceFlag ToFlags(bool receiveShadows, ShadowCastingMode mode, bool useShadowSettings)
            {
                rthsInstanceFlag ret = 0;

                if (!useShadowSettings)
                {
                    ret |= rthsInstanceFlag.ReceiveShadows;
                    ret |= rthsInstanceFlag.CastShadows;
                }
                else
                {
                    if (receiveShadows)
                    {
                        ret |= rthsInstanceFlag.ReceiveShadows;
                    }
                    switch (mode)
                    {
                    case ShadowCastingMode.Off:
                        break;

                    case ShadowCastingMode.On:
                        ret |= rthsInstanceFlag.CastShadows;
                        ret |= rthsInstanceFlag.CullBackShadow;
                        break;

                    case ShadowCastingMode.TwoSided:
                        ret |= rthsInstanceFlag.CastShadows;
                        break;

                    case ShadowCastingMode.ShadowsOnly:
                        ret |= rthsInstanceFlag.ShadowsOnly;
                        ret |= rthsInstanceFlag.CastShadows;
                        break;
                    }
                }
                return(ret);
            }
Пример #4
0
 [DllImport(Lib.name)] static extern void rthsMeshInstanceSetFlags(IntPtr self, rthsInstanceFlag flags);
            public void Update(rthsMeshData md, MeshRenderer mr, bool useShadowSettings)
            {
                rthsInstanceFlag flags = ToFlags(mr.receiveShadows, mr.shadowCastingMode, useShadowSettings);

                Update(md, flags, mr.localToWorldMatrix, mr.gameObject);
            }