Esempio n. 1
0
            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);
                }
            }
Esempio n. 2
0
            public void Update(Mesh mesh)
            {
                bool markDynamic = bakedMesh != null;

                if (meshData)
                {
                    if (meshData.isRelocated)
                    {
                        Release();
                        if (s_dbgVerboseLog)
                        {
                            Debug.Log(String.Format("Relocated Mesh \"{0}\"\n", mesh.name));
                        }
                        markDynamic = true;
                    }
                }
                if (!meshData)
                {
                    meshData      = rthsMeshData.Create();
                    meshData.name = mesh.name;
                    if (markDynamic)
                    {
                        meshData.MarkDynamic();
                    }
                    meshData.SetGPUBuffers(mesh);
                    meshData.SetBindpose(mesh.bindposes);
#if UNITY_2019_1_OR_NEWER
                    meshData.SetSkinWeights(mesh.GetBonesPerVertex(), mesh.GetAllBoneWeights());
#else
                    meshData.SetSkinWeights(mesh.boneWeights);
#endif

                    int numBS = mesh.blendShapeCount;
                    meshData.SetBlendshapeCount(numBS);
                    if (numBS > 0)
                    {
                        var deltaPoints   = new Vector3[mesh.vertexCount];
                        var deltaNormals  = new Vector3[mesh.vertexCount];
                        var deltaTangents = new Vector3[mesh.vertexCount];
                        for (int bsi = 0; bsi < numBS; ++bsi)
                        {
                            int numFrames = mesh.GetBlendShapeFrameCount(bsi);
                            for (int fi = 0; fi < numFrames; ++fi)
                            {
                                float weight = mesh.GetBlendShapeFrameWeight(bsi, fi);
                                mesh.GetBlendShapeFrameVertices(bsi, fi, deltaPoints, deltaNormals, deltaTangents);
                                meshData.AddBlendshapeFrame(bsi, deltaPoints, weight);
                            }
                        }
                    }
                }
            }
Esempio n. 3
0
 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;
 }
Esempio n. 4
0
 public static rthsMeshInstanceData Create(rthsMeshData mesh)
 {
     return(new rthsMeshInstanceData {
         self = rthsMeshInstanceCreate(mesh)
     });
 }
Esempio n. 5
0
 [DllImport(Lib.name)] static extern IntPtr rthsMeshInstanceCreate(rthsMeshData mesh);
Esempio n. 6
0
 public void Release()
 {
     instData.Release();
     meshData = default(rthsMeshData); // Release() should not be called here
     useCount = 0;
 }
Esempio n. 7
0
            public void Update(rthsMeshData md, MeshRenderer mr, bool useShadowSettings)
            {
                rthsInstanceFlag flags = ToFlags(mr.receiveShadows, mr.shadowCastingMode, useShadowSettings);

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