Example #1
0
 public static void CaptureMesh(
     usdi.Mesh usd, ref usdi.MeshData data, MeshBuffer buf,
     Mesh mesh, MeshCaptureFlags flags)
 {
     buf.vertices = flags.points ? mesh.vertices : null;
     buf.normals  = flags.normals ? mesh.normals : null;
     buf.tangents = flags.tangents ? mesh.tangents : null;
     buf.indices  = flags.indices ? mesh.triangles : null;
     buf.uvs      = flags.uvs ? mesh.uv : null;
     CaptureMesh(usd, ref data, buf);
 }
Example #2
0
            public override void Capture(double t) // called from main thread
            {
                base.Capture(t);
                if (m_target == null)
                {
                    return;
                }

                if (m_captureEveryFrame || m_count == 0)
                {
                    bool captureBones = m_captureBones && m_count == 0;

                    if (captureBones)
                    {
                        var root = m_exporter.FindNode(m_target.rootBone);
                        if (root != null)
                        {
                            m_buffer.rootBone = root.capturer.primPath;
                        }

                        var bones = m_target.bones;
                        if (bones != null && bones.Length > 0)
                        {
                            m_buffer.bones = new string[bones.Length];
                            for (int i = 0; i < bones.Length; ++i)
                            {
                                var bone = m_exporter.FindNode(bones[i]);
                                m_buffer.bones[i] = bone.capturer.primPath;
                            }

                            if (m_exporter.m_swapHandedness)
                            {
                                Debug.LogWarning("Swap Handedness export option is enabled. This may cause broken skinning animation.");
                            }
                        }
                    }

                    var flags = new MeshCaptureFlags
                    {
                        points   = true,
                        normals  = m_captureNormals,
                        tangents = m_captureTangents,
                        uvs      = m_captureUVs && (m_count == 0 || m_captureEveryFrameUV),
                        indices  = m_count == 0 || m_captureEveryFrameIndices,
                    };

                    CaptureMesh(usdi.usdiAsMesh(m_usd), ref m_data, m_buffer, m_target, flags, captureBones);
                }
            }
Example #3
0
        public static void CaptureMesh(
            usdi.Mesh usd, ref usdi.MeshData data, MeshBuffer buf,
            SkinnedMeshRenderer smr, MeshCaptureFlags flags, bool captureBones)
        {
            Cloth cloth = smr.GetComponent <Cloth>();

            if (cloth != null)
            {
                var mesh = buf.bakedMesh;
                smr.BakeMesh(mesh);

                buf.vertices = flags.points ? cloth.vertices : null;
                buf.normals  = flags.normals ? cloth.normals : null;
                buf.tangents = flags.tangents ? mesh.tangents : null;
                buf.indices  = flags.indices ? mesh.triangles : null;
                buf.uvs      = flags.uvs ? mesh.uv : null;
            }
            else if (captureBones && buf.bones != null)
            {
                var mesh = smr.sharedMesh;

                buf.vertices = flags.points ? mesh.vertices : null;
                buf.normals  = flags.normals ? mesh.normals : null;
                buf.tangents = flags.tangents ? mesh.tangents : null;
                buf.indices  = flags.indices ? mesh.triangles : null;
                buf.uvs      = flags.uvs ? mesh.uv : null;

                buf.weights   = mesh.boneWeights;
                buf.bindposes = mesh.bindposes;
            }
            else
            {
                var mesh = buf.bakedMesh;
                smr.BakeMesh(mesh);

                buf.vertices = flags.points ? mesh.vertices : null;
                buf.normals  = flags.normals ? mesh.normals : null;
                buf.tangents = flags.tangents ? mesh.tangents : null;
                buf.indices  = flags.indices ? mesh.triangles : null;
                buf.uvs      = flags.uvs ? mesh.uv : null;
            }

            CaptureMesh(usd, ref data, buf);
        }
Example #4
0
            public override void Capture(double t) // called from main thread
            {
                base.Capture(t);
                if (m_target == null)
                {
                    return;
                }

                if (m_captureEveryFrame || m_count == 0)
                {
                    var mesh  = m_target.GetComponent <MeshFilter>().sharedMesh;
                    var flags = new MeshCaptureFlags
                    {
                        points   = true,
                        normals  = m_captureNormals,
                        tangents = m_captureTangents,
                        uvs      = m_captureUVs && (m_count == 0 || m_captureEveryFrameUV),
                        indices  = m_count == 0 || m_captureEveryFrameIndices,
                    };
                    CaptureMesh(usdi.usdiAsMesh(m_usd), ref m_data, m_buffer, mesh, flags);
                }
            }