From c945ea9b74e365bb75a5078f8cd6eba75c867086 Mon Sep 17 00:00:00 2001 From: Denis Meyzer Date: Mon, 14 Jul 2025 10:36:46 +0200 Subject: [PATCH] Fix: Only last tangents layer is exported to fbx when mesh has multiple uv layers Only last tangents layer was written to all tangent layers before this fix. Code before fix evaluate tangents for all layers into mesh loops data (which keeps data only for one layer) and then writes information about 'each' layer which is actually only the last one. Code after fix evaluates tangents in the beginning of the loop that exports tangent data so that data for correct layer is being written into fbx. Co-authored-by: Andrey Zhitkov Pull Request: https://projects.blender.org/blender/blender/pulls/141839 --- scripts/addons_core/io_scene_fbx/export_fbx_bin.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/addons_core/io_scene_fbx/export_fbx_bin.py b/scripts/addons_core/io_scene_fbx/export_fbx_bin.py index e1dc3c2f17d..5b6c343b750 100644 --- a/scripts/addons_core/io_scene_fbx/export_fbx_bin.py +++ b/scripts/addons_core/io_scene_fbx/export_fbx_bin.py @@ -1226,13 +1226,12 @@ def fbx_data_mesh_elements(root, me_obj, scene_data, done_meshes): num_loops = len(me.loops) t_ln = np.empty(num_loops * 3, dtype=normal_bl_dtype) # t_lnw = np.zeros(len(me.loops), dtype=np.float64) - uv_names = [uvlayer.name for uvlayer in me.uv_layers] - # Annoying, `me.calc_tangent` errors in case there is no geometry... - if num_loops > 0: - for name in uv_names: - me.calc_tangents(uvmap=name) for idx, uvlayer in enumerate(me.uv_layers): name = uvlayer.name + # Annoying, `me.calc_tangent` errors in case there is no geometry... + if num_loops > 0: + me.calc_tangents(uvmap=name) + # Loop bitangents (aka binormals). # NOTE: this is not supported by importer currently. me.loops.foreach_get("bitangent", t_ln)