diff --git a/io_scene_fbx/import_fbx.py b/io_scene_fbx/import_fbx.py index 6196e19c8..0ac67a289 100644 --- a/io_scene_fbx/import_fbx.py +++ b/io_scene_fbx/import_fbx.py @@ -1931,7 +1931,10 @@ def blen_read_shapes(fbx_tmpl, fbx_data, objects, me, scene): # will be clamped, and we'll print a warning message to the console. shape_key_values_in_range = True bc_uuid_to_keyblocks = {} - for bc_uuid, fbx_sdata, fbx_bcdata in fbx_data: + for k, v in fbx_data.items(): + bc_uuid = k[0] + fbx_sdata, fbx_bcdata = v + elem_name_utf8 = elem_name_ensure_class(fbx_sdata, b'Geometry') indices = elem_prop_first(elem_find_first(fbx_sdata, b'Indexes')) dvcos = elem_prop_first(elem_find_first(fbx_sdata, b'Vertices')) @@ -3506,11 +3509,12 @@ def load(operator, context, filepath="", node = fbx_helper_nodes[o_uuid] if node: objects.append(node) - shapes_list = [] - mesh_to_shapes[bl_mdata] = (objects, shapes_list) + shapes = {} + mesh_to_shapes[bl_mdata] = (objects, shapes) else: - shapes_list = mesh_to_shapes[bl_mdata][1] - shapes_list.append((bc_uuid, fbx_sdata, fbx_bcdata)) + shapes = mesh_to_shapes[bl_mdata][1] + # Dict to avoid duplicates + shapes[(bc_uuid, id(fbx_sdata), id(fbx_bcdata))] = (fbx_sdata, fbx_bcdata) # BlendShape deformers are only here to connect BlendShapeChannels to meshes, nothing else to do. # Iterate through each mesh and create its shape keys