Skip to content

Commit 4a061b7

Browse files
committed
add an FbxLayerElementMaterial to each mesh exported
Will need to change the way this is setup when using mulitple materials per mesh (e.g. won't be able to use all same with only one index)
1 parent 1752cb2 commit 4a061b7

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

Assets/FbxExporters/Editor/FbxExporter.cs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ public FbxDouble3 GetMaterialColor (Material unityMaterial, string unityPropName
254254
/// <summary>
255255
/// Export (and map) a Unity PBS material to FBX classic material
256256
/// </summary>
257-
public FbxSurfaceMaterial ExportMaterial (Material unityMaterial, FbxScene fbxScene)
257+
public FbxSurfaceMaterial ExportMaterial (Material unityMaterial, FbxScene fbxScene, FbxMesh fbxMesh)
258258
{
259259
if (Verbose)
260260
Debug.Log (string.Format ("exporting material {0}", unityMaterial.name));
@@ -292,6 +292,26 @@ public FbxSurfaceMaterial ExportMaterial (Material unityMaterial, FbxScene fbxSc
292292
ExportTexture (unityMaterial, "_SpecGlosMap", fbxMaterial, FbxSurfaceMaterial.sSpecular);
293293
}
294294

295+
// Add FbxLayerElementMaterial to layer 0 of the node
296+
FbxLayer fbxLayer = fbxMesh.GetLayer (0 /* default layer */);
297+
if (fbxLayer == null) {
298+
fbxMesh.CreateLayer ();
299+
fbxLayer = fbxMesh.GetLayer (0 /* default layer */);
300+
}
301+
302+
using (var fbxLayerElement = FbxLayerElementMaterial.Create (fbxMesh, "Material")) {
303+
304+
// Using all same means that the entire mesh uses the same material
305+
fbxLayerElement.SetMappingMode (FbxLayerElement.EMappingMode.eAllSame);
306+
fbxLayerElement.SetReferenceMode (FbxLayerElement.EReferenceMode.eIndexToDirect);
307+
308+
FbxLayerElementArray fbxElementArray = fbxLayerElement.GetIndexArray ();
309+
310+
// Map the entire geometry to the FbxNode material at index 0
311+
fbxElementArray.Add (0);
312+
fbxLayer.SetMaterials (fbxLayerElement);
313+
}
314+
295315
MaterialMap.Add (materialName, fbxMaterial);
296316
return fbxMaterial;
297317
}
@@ -350,7 +370,7 @@ meshInfo.Vertices [v].z
350370
}
351371
}
352372

353-
var fbxMaterial = ExportMaterial (meshInfo.Material, fbxScene);
373+
var fbxMaterial = ExportMaterial (meshInfo.Material, fbxScene, fbxMesh);
354374
fbxNode.AddMaterial (fbxMaterial);
355375

356376
/*
@@ -487,7 +507,7 @@ public int ExportAll (IEnumerable<UnityEngine.Object> unityExportSet)
487507
fbxManager.SetIOSettings (FbxIOSettings.Create (fbxManager, Globals.IOSROOT));
488508

489509
// Export texture as embedded
490-
fbxManager.GetIOSettings ().SetBoolProp (Globals.EXP_FBX_EMBEDDED, true);
510+
//fbxManager.GetIOSettings ().SetBoolProp (Globals.EXP_FBX_EMBEDDED, true);
491511

492512
// Create the exporter
493513
var fbxExporter = FbxExporter.Create (fbxManager, "Exporter");

0 commit comments

Comments
 (0)