@@ -316,7 +316,7 @@ public FbxSurfaceMaterial ExportMaterial (Material unityMaterial, FbxScene fbxSc
316
316
/// <param name="fbxMesh">Fbx mesh.</param>
317
317
/// <param name="mesh">Mesh.</param>
318
318
/// <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 )
320
320
{
321
321
// Add FbxLayerElementMaterial to layer 0 of the node
322
322
FbxLayer fbxLayer = fbxMesh . GetLayer ( 0 /* default layer */ ) ;
@@ -326,20 +326,29 @@ private void AssignLayerElementMaterial(FbxMesh fbxMesh, Mesh mesh, Material[] m
326
326
}
327
327
328
328
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 ) ;
331
339
332
- FbxLayerElementArray fbxElementArray = fbxLayerElement . GetIndexArray ( ) ;
340
+ FbxLayerElementArray fbxElementArray = fbxLayerElement . GetIndexArray ( ) ;
333
341
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 ) ;
337
345
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
+ }
343
352
}
344
353
}
345
354
fbxLayer . SetMaterials ( fbxLayerElement ) ;
@@ -436,7 +445,7 @@ meshInfo.Vertices [v].z*UnitScaleFactor
436
445
fbxMesh . EndPolygon ( ) ;
437
446
}
438
447
439
- AssignLayerElementMaterial ( fbxMesh , meshInfo . mesh , meshInfo . Materials ) ;
448
+ AssignLayerElementMaterial ( fbxMesh , meshInfo . mesh , meshInfo . Materials . Length ) ;
440
449
441
450
ExportComponentAttributes ( meshInfo , fbxMesh , unmergedTriangles ) ;
442
451
0 commit comments