Fix #104737: FBX: Materials missing from linked duplicates
commitdab724afe2bf174a8d2cef87027e866ba2f964f1
authorThomas Barlow <github@mysterymayhem.co.uk>
Wed, 5 Jul 2023 13:45:24 +0000 (5 14:45 +0100)
committerPhilipp Oeser <philipp@blender.org>
Wed, 12 Jul 2023 12:59:46 +0000 (12 14:59 +0200)
tree1080e479b8c92af6e3893fa2548017c909a6cbfd
parentd5f5678003354d66da4aa7c126171e82d3931e6c
Fix #104737: FBX: Materials missing from linked duplicates

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.

As noted in [1], reverting [0] was also an option, so this patch does as
noted and reverts the functional changes of [0], but keeps the comment
because it's still relevant.

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
earlier.

[0]: 5c9ecad1d29edd8ba9ebaaad8f71839bd5d88324
[1]: 0a4e4f27043ce86c8eb885d8534cab5df30e8b54
[2]: 80db34b208f7a575aa86b06cfc8ee98cb11a1280

Pull Request: https://projects.blender.org/blender/blender-addons/pulls/104738
io_scene_fbx/export_fbx_bin.py