private Submesh3D ImportSubmesh(FbxSubmesh meshAttribute, FbxNode node) { var sm = new Submesh3D { Mesh = new Mesh <Mesh3D.Vertex> { Vertices = meshAttribute.Vertices, Indices = meshAttribute.Indices.Select(index => checked ((ushort)index)).ToArray(), AttributeLocations = new[] { ShaderPrograms.Attributes.Pos1, ShaderPrograms.Attributes.Color1, ShaderPrograms.Attributes.UV1, ShaderPrograms.Attributes.BlendIndices, ShaderPrograms.Attributes.BlendWeights, ShaderPrograms.Attributes.Normal, ShaderPrograms.Attributes.Tangent } }, Material = meshAttribute.MaterialIndex != -1 && node.Materials != null ? GetOrCreateLimeMaterial(node.Materials[meshAttribute.MaterialIndex]) : FbxMaterial.Default }; MeshUtils.RemoveDuplicates(sm.Mesh); if (meshAttribute.Bones.Length > 0) { foreach (var bone in meshAttribute.Bones) { sm.BoneNames.Add(bone.Name); sm.BoneBindPoses.Add(bone.Offset); } } return(sm); }
private Submesh3D ImportSubmesh(FbxSubmesh meshAttribute, FbxImporter.FbxNode node) { var sm = new Submesh3D(); sm.Mesh = new Mesh <Mesh3D.Vertex> { Vertices = meshAttribute.Vertices, Indices = meshAttribute.Indices.Select(index => checked ((ushort)index)).ToArray(), AttributeLocations = new[] { ShaderPrograms.Attributes.Pos1, ShaderPrograms.Attributes.Color1, ShaderPrograms.Attributes.UV1, ShaderPrograms.Attributes.BlendIndices, ShaderPrograms.Attributes.BlendWeights, ShaderPrograms.Attributes.Normal } }; sm.Material = meshAttribute.MaterialIndex != -1 ? CreateLimeMaterial(node.Materials[meshAttribute.MaterialIndex], path, target) : FbxMaterial.Default; if (meshAttribute.Bones.Length > 0) { foreach (var bone in meshAttribute.Bones) { sm.BoneNames.Add(bone.Name); sm.BoneBindPoses.Add(bone.Offset); } } return(sm); }
private static void ReplaceRenderTexturesInSubmesh(Submesh3D submesh) { // RenderTexture can't be serialized var cm = submesh.Material as CommonMaterial; if (cm?.DiffuseTexture is RenderTexture) { cm.DiffuseTexture = new SerializableTexture(); } }
private Submesh3D ImportSubmesh(Submesh meshAttribute, FbxImporter.Node node) { var sm = new Submesh3D(); sm.Mesh = new Mesh { VertexBuffers = new[] { new VertexBuffer <Mesh3D.Vertex> { Data = meshAttribute.Vertices, }, }, IndexBuffer = new IndexBuffer { Data = meshAttribute.Indices.Select(index => checked ((ushort)index)).ToArray() }, Attributes = new[] { new[] { ShaderPrograms.Attributes.Pos1, ShaderPrograms.Attributes.Color1, ShaderPrograms.Attributes.UV1, ShaderPrograms.Attributes.BlendIndices, ShaderPrograms.Attributes.BlendWeights, ShaderPrograms.Attributes.Normal } } }; sm.Material = meshAttribute.MaterialIndex != -1 ? node.Materials[meshAttribute.MaterialIndex].ToLime(path) : Material.Default; if (meshAttribute.Bones.Length > 0) { foreach (var bone in meshAttribute.Bones) { sm.BoneNames.Add(bone.Name); sm.BoneBindPoses.Add(bone.Offset); } } return(sm); }