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
This commit is contained in:
Denis Meyzer
2025-07-14 10:36:46 +02:00
committed by Bastien Montagne
parent 1cd8d5a7a5
commit e0a9e98cbd

View File

@@ -1247,13 +1247,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)