public static void Export() { var p = EditorPrefs.GetString("projectPath"); if (Directory.Exists(p)) { Terrn.ExportTerrn(); Terrn.ExportTextures(); Tobj.Export(); Otc.ExportMain(); Otc.ExportPage(); var root = GameObject.Find("root"); if (root != null) { var objectExported = new List <string>(); var meshesExported = new List <string>(); foreach (Transform child in root.transform) { if (!objectExported.Contains(child.name) && child.tag != "DefaultContent") { objectExported.Add(child.name); Odef.Export(child.gameObject); /* * var m = child.GetComponentsInChildren<MeshFilter>(); * var mr = child.GetComponentsInChildren<MeshRenderer>(); * * * if (m.Length > 1 && !meshesExported.Contains(m[0].sharedMesh.name)) * { * var combinedMesh = new Mesh(); * var combineIns = new List<CombineInstance>(); * var materials = new List<Material>(); * for (var i = 0; i < m.Length; i++) * { * print("combing " + m[i].sharedMesh.name); * combineIns.Add(new CombineInstance * { * mesh = m[i].sharedMesh, * transform = m[i].transform.worldToLocalMatrix * * }); * materials.AddRange(mr[i].sharedMaterials); * } * combinedMesh.name = m[0].sharedMesh.name; * materials = materials.Distinct().ToList(); * combinedMesh.CombineMeshes(combineIns.ToArray(), false); * Meshes.Export(combinedMesh, materials.ToArray()); * Materials.Export(materials.ToArray()); * meshesExported.Add(combinedMesh.name); * } * else if (m.Length == 1 && !meshesExported.Contains(m[0].sharedMesh.name)) * { * Meshes.Export(m[0].sharedMesh, mr[0].sharedMaterials); * Materials.Export(mr[0].sharedMaterials); * meshesExported.Add(m[0].sharedMesh.name); * } */ } } var m = root.GetComponentsInChildren <MeshFilter>(); var mr = root.GetComponentsInChildren <MeshRenderer>(); if (m.Length > 0) { for (var i = 0; i < m.Length; i++) { if (!meshesExported.Contains(m[i].sharedMesh.name) && m[i].gameObject.tag != "DefaultContent") { Meshes.Export(m[i].sharedMesh, mr[i].sharedMaterials); Materials.Export(mr[i].sharedMaterials); meshesExported.Add(m[i].sharedMesh.name); } } } } } }
public void testmatexp() { Materials.Export(GetComponent <MeshRenderer>().sharedMaterials); }
public IndexedResource <Mesh> ForceExport(Renderer r, Mesh mesh) { var materialIndices = new List <int>(); foreach (var m in r.sharedMaterials) { var materialResource = Materials.Export(m); materialIndices.Add(materialResource.Index); } var primitiveExporter = new PrimitiveExporter(this); // Convert to right-handed coordinate system var positionAccIndex = ExportPositions(mesh.vertices); int?normalAccIndex = null; if (mesh.normals.Length > 0) { normalAccIndex = ExportNormals(mesh.normals); } int?tangentAccIndex = null; //if (mesh.tangents.Length > 0) //{ // tangentAccIndex = ExportTangents(mesh.tangents); //} int?texcoord0AccIndex = null; if (mesh.uv.Length > 0) { texcoord0AccIndex = ExportUV(mesh.uv); } int?texcoord1AccIndex = null; if (mesh.uv2.Length > 0) { texcoord1AccIndex = ExportUV(mesh.uv2); } int?color0AccIndex = null; if (mesh.colors.Length > 0) { color0AccIndex = ExportColors(mesh.colors); } int?joints0AccIndex = null; int?weights0AccIndex = null; if (mesh.boneWeights.Length > 0) { var joints = mesh.boneWeights .Select(w => new Vec4 <int>( w.boneIndex0, w.boneIndex1, w.boneIndex2, w.boneIndex3) ).ToArray(); var weights = mesh.boneWeights .Select(w => new Vector4( w.weight0, w.weight1, w.weight2, w.weight3) ).ToArray(); joints0AccIndex = ExportJoints(joints); weights0AccIndex = ExportWeights(weights); } #region blendSpace List <Target> targets = null; if (mesh.blendShapeCount > 0) { targets = new List <Target>(); for (int i = 0; i < mesh.blendShapeCount; ++i) { var name = mesh.GetBlendShapeName(i); var deltaVertices = new Vector3[mesh.vertexCount]; var deltaNormals = new Vector3[mesh.vertexCount]; var deltaTangents = new Vector3[mesh.vertexCount]; var frameCount = mesh.GetBlendShapeFrameCount(i); mesh.GetBlendShapeFrameVertices( i, frameCount - 1 /* get last frame */, deltaVertices, deltaNormals, deltaTangents); // TODO: Export as sparse accessors var mPositionAccIndex = ExportPositions(deltaVertices); var mNormalsAccIndex = ExportNormals(deltaNormals); //var mTangentsAccIndex = ExportPositions(deltaTangents); var mTangentsAccIndex = (int?)null; var weight = mesh.GetBlendShapeFrameWeight( i, frameCount - 1 /* get last frame */); targets.Add(new Target { Name = name, Position = mPositionAccIndex, Normal = mNormalsAccIndex, Tangent = mTangentsAccIndex, Weight = weight, }); } } List <Dictionary <string, int> > primTargets = null; if (targets != null) { primTargets = new List <Dictionary <string, int> >(); foreach (var t in targets) { var primTarget = new Dictionary <string, int>(); primTarget[TMPA.POSITION] = t.Position; if (t.Normal != null) { primTarget[TMPA.NORMAL] = t.Normal.Value; } if (t.Tangent != null) { primTarget[TMPA.TANGENT] = t.Tangent.Value; } primTargets.Add(primTarget); } } #endregion var primitives = new List <Types.Mesh.PrimitiveType>(); for (var i = 0; i < mesh.subMeshCount; ++i) { var indices = mesh.GetIndices(i); var positionindicesAccIndex = ExportIndices(indices); var attrs = new Dictionary <string, int>(); attrs[TMPA.POSITION] = positionAccIndex; if (normalAccIndex != null) { attrs[TMPA.NORMAL] = normalAccIndex.Value; } if (tangentAccIndex != null) { attrs[TMPA.TANGENT] = tangentAccIndex.Value; } if (texcoord0AccIndex != null) { attrs[TMPA.TEXCOORD_0] = texcoord0AccIndex.Value; } if (texcoord1AccIndex != null) { attrs[TMPA.TEXCOORD_1] = texcoord1AccIndex.Value; } if (color0AccIndex != null) { attrs[TMPA.COLOR_0] = color0AccIndex.Value; } if (joints0AccIndex != null) { attrs[TMPA.JOINTS_0] = joints0AccIndex.Value; } if (weights0AccIndex != null) { attrs[TMPA.WEIGHTS_0] = weights0AccIndex.Value; } var primitive = new Types.Mesh.PrimitiveType { Attributes = attrs, Indices = positionindicesAccIndex, Material = materialIndices[i < materialIndices.Count ? i : materialIndices.Count - 1], Targets = primTargets, }; primitives.Add(primitive); } var gltfMesh = new Types.Mesh { Name = mesh.name, Primitives = primitives, // Weights = Should support default morph target weights? }; if (targets != null) { var targetNames = targets.Select(t => t.Name).ToArray(); // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets gltfMesh.Extras = new Dictionary <string, object> { { "targetNames", targetNames }, }; } return(new IndexedResource <Mesh> { Index = Types.GltfExtensions.AddMesh(Gltf, gltfMesh), Value = mesh, }); }