Skip to content

Commit 139350e

Browse files
committed
if there is only one material then use all same
1 parent b2098b5 commit 139350e

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

Assets/FbxExporters/Editor/FbxExporter.cs

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ public FbxSurfaceMaterial ExportMaterial (Material unityMaterial, FbxScene fbxSc
316316
/// <param name="fbxMesh">Fbx mesh.</param>
317317
/// <param name="mesh">Mesh.</param>
318318
/// <param name="materials">Materials.</param>
319-
private void AssignLayerElementMaterial(FbxMesh fbxMesh, Mesh mesh, Material[] materials)
319+
private void AssignLayerElementMaterial(FbxMesh fbxMesh, Mesh mesh, int materialCount)
320320
{
321321
// Add FbxLayerElementMaterial to layer 0 of the node
322322
FbxLayer fbxLayer = fbxMesh.GetLayer (0 /* default layer */);
@@ -326,20 +326,29 @@ private void AssignLayerElementMaterial(FbxMesh fbxMesh, Mesh mesh, Material[] m
326326
}
327327

328328
using (var fbxLayerElement = FbxLayerElementMaterial.Create (fbxMesh, "Material")) {
329-
fbxLayerElement.SetMappingMode (FbxLayerElement.EMappingMode.eByPolygon);
330-
fbxLayerElement.SetReferenceMode (FbxLayerElement.EReferenceMode.eIndexToDirect);
329+
// if there is only one material then set everything to that material
330+
if (materialCount == 1) {
331+
fbxLayerElement.SetMappingMode (FbxLayerElement.EMappingMode.eAllSame);
332+
fbxLayerElement.SetReferenceMode (FbxLayerElement.EReferenceMode.eIndexToDirect);
333+
334+
FbxLayerElementArray fbxElementArray = fbxLayerElement.GetIndexArray ();
335+
fbxElementArray.Add (0);
336+
} else {
337+
fbxLayerElement.SetMappingMode (FbxLayerElement.EMappingMode.eByPolygon);
338+
fbxLayerElement.SetReferenceMode (FbxLayerElement.EReferenceMode.eIndexToDirect);
331339

332-
FbxLayerElementArray fbxElementArray = fbxLayerElement.GetIndexArray ();
340+
FbxLayerElementArray fbxElementArray = fbxLayerElement.GetIndexArray ();
333341

334-
// assuming that each polygon is a triangle
335-
// TODO: Add support for other mesh topologies (e.g. quads)
336-
fbxElementArray.SetCount (mesh.triangles.Length / 3);
342+
// assuming that each polygon is a triangle
343+
// TODO: Add support for other mesh topologies (e.g. quads)
344+
fbxElementArray.SetCount (mesh.triangles.Length / 3);
337345

338-
for (int i = 0; i < mesh.subMeshCount; i++) {
339-
int start = ((int)mesh.GetIndexStart (i))/3;
340-
int count = ((int)mesh.GetIndexCount (i))/3;
341-
for (int j = start; j < start + count; j++) {
342-
fbxElementArray.SetAt (j, i);
346+
for (int i = 0; i < mesh.subMeshCount; i++) {
347+
int start = ((int)mesh.GetIndexStart (i)) / 3;
348+
int count = ((int)mesh.GetIndexCount (i)) / 3;
349+
for (int j = start; j < start + count; j++) {
350+
fbxElementArray.SetAt (j, i);
351+
}
343352
}
344353
}
345354
fbxLayer.SetMaterials (fbxLayerElement);
@@ -436,7 +445,7 @@ meshInfo.Vertices [v].z*UnitScaleFactor
436445
fbxMesh.EndPolygon ();
437446
}
438447

439-
AssignLayerElementMaterial (fbxMesh, meshInfo.mesh, meshInfo.Materials);
448+
AssignLayerElementMaterial (fbxMesh, meshInfo.mesh, meshInfo.Materials.Length);
440449

441450
ExportComponentAttributes (meshInfo, fbxMesh, unmergedTriangles);
442451

0 commit comments

Comments
 (0)