private void BuildMeshes(GameObject obj, List <int> LoD0Indices, Transform[] bones) { // Group Object GameObject meshesGroup = new GameObject("Meshes"); meshesGroup.transform.SetParent(obj.transform); // Submeshes for (int sm = 0; sm < LoD0Indices.Count; sm++) { int index = LoD0Indices[sm]; // Object GameObject submesh = new GameObject(); submesh.name = data.model.submeshes[index].name; submesh.transform.SetParent(meshesGroup.transform); // Mesh Mesh m = new Mesh(); m.SetVertices(data.model.submeshes[index].vertices); m.SetTriangles(data.model.submeshes[index].triangles, 0); m.SetNormals(data.model.submeshes[index].normals); m.SetTangents(data.model.submeshes[index].tangents); m.SetUVs(0, data.model.submeshes[index].uvs); SkinnedMeshRenderer meshRenderer = submesh.AddComponent <SkinnedMeshRenderer>(); MeshFilter meshFilter = submesh.AddComponent <MeshFilter>(); meshFilter.mesh = m; // weights m.boneWeights = data.model.submeshes[index].boneWeights; // bind poses Matrix4x4[] bindPoses = new Matrix4x4[bones.Length]; for (int b = 0; b < bindPoses.Length; b++) { bindPoses[b] = bones[b].worldToLocalMatrix * submesh.transform.localToWorldMatrix; } m.bindposes = bindPoses; meshRenderer.bones = bones; meshRenderer.sharedMesh = m; // Texture string folderPath = Path.GetDirectoryName(filePath); string textureName_ = data.model.textures[data.model.materials[data.model.submeshes[index].id].texture]; // *sweat in RP* textureName_ = PathHelper.GetFileName(textureName_); textureName_ = textureName_.Remove(textureName_.Length - 12); string diffuseTexturePath = folderPath + @"\" + textureName_ + "diffuse" + ".dds"; string emissiveTexturePath = folderPath + @"\" + textureName_ + "emissive" + ".dds"; string normalTexturePath = folderPath + @"\" + textureName_ + "normal" + ".dds"; string ormTexturePath = folderPath + @"\" + textureName_ + "orm" + ".dds"; // Material UnityEngine.Material mat = new UnityEngine.Material(defaultMaterial); if (File.Exists(diffuseTexturePath)) { Texture2D texture = DDS.ImportToTexture2D(diffuseTexturePath); mat.SetTexture("_MainTex", texture); } if (File.Exists(emissiveTexturePath)) { mat.EnableKeyword("_EMISSION"); Texture2D texture = DDS.ImportToTexture2D(emissiveTexturePath); mat.SetTexture("_EmissionMap", texture); } if (File.Exists(normalTexturePath)) { mat.EnableKeyword("_NORMALMAP"); Texture2D texture = DDS.ImportToTexture2D(normalTexturePath); mat.SetTexture("_BumpMap", texture); } if (File.Exists(ormTexturePath)) { mat.EnableKeyword("_METALLICGLOSSMAP"); Texture2D texture = DDS.ImportToTexture2D(ormTexturePath); //mat.SetTexture("_MetallicGlossMap", texture); mat.SetTexture("_ORM", texture); } mat.SetFloat("_Glossiness", 0.44f); mat.SetFloat("_GlossMapScale", 0.44f); meshRenderer.material = mat; } }