Fix #104737: FBX: Materials missing from linked duplicates #104738
Exporting meshes with duplicate materials combines them into a single
material slot (Material->Model connection) when exporting as FBX because
the material indices dict is keyed by materials. This resulted in unused
duplicate material slots being included in the export.
1 removed these unused duplicate material slots, however, because the
materials for each object are keyed by the object's mesh, this meant
that linked duplicates sharing the same mesh (aside from the first
linked duplicate processed) would not get any material slots because
their materials would already be present in their mesh's dict that
mapped from materials to material indices.
Without larger changes to how materials and material slots are exported,
it is not currently possible to simultaneously remove the unused
duplicate material slots and support linked duplicates. The code for
exporting materials and material slots needs some redesigning anyway so
that linked duplicates with differing materials are actually exported as
linked duplicates instead of duplicating their meshes on export, but
this would be more of a target for 4.0.
This patch changes the export of meshes containing duplicate materials
to export unused duplicate material slots as they did before 1.
Note that because of 2, these unused duplicate material slots are
visible to users when importing the .fbx back into Blender, just like
any meshes with duplicate materials exported as .fbx by Blender 3.5 and
I think it would be a good idea for this to also get into 3.6 LTS.
Thanks for the fix, also it's unfortunate the change has to be reverted in the end. But this is definitely the only option at this point for 3.6 (will add the commit to the list of backports in the relevant task, blender/blender#109399).
We wrote a python tool for collapsing duplicating materials for different purposes, including that one.
No due date set.
No dependencies set.
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?