Fbx Import: Fix redundancy in action names

This commit aims at fixing the (very) redundant action names when importing animation data from Fbx files.

By default importing actions from an animated Fbx skeleton file leads to this:
**skeleton_name|skeleton_name|action_name|skeleton_name|action_name**

It works this way: **id_data.name|stack_name|layer_name**
These containers are generally made of the exact same strings multiple time.

This is a proposal to avoid such redundancy by stripping the "layer_name" in case it's identical to the "stack_name"
I'm not sure yet if one of them could be always skipped, I haven't experienced cases when they are different.

With this patch actions are named:
**skeleton_name|skeleton_name|action_name**

It could still be improved, since the "id_data.name" is generally the armature name, already contained in the "stack_name". But sometimes it's not (for Shape Keys for example: Key|skeleton_name|action_name)
Maybe more checks could be added to avoid redundancy even more. Just to open the discussion about it...

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D14130
This commit is contained in:
lucas veber 2022-02-23 12:07:38 +01:00 committed by Bastien Montagne
parent b2adbc6ba5
commit b135606927
2 changed files with 5 additions and 2 deletions

View File

@ -21,7 +21,7 @@
bl_info = {
"name": "FBX format",
"author": "Campbell Barton, Bastien Montagne, Jens Restemeier",
"version": (4, 29, 0),
"version": (4, 29, 1),
"blender": (2, 90, 0),
"location": "File > Import-Export",
"description": "FBX IO meshes, UV's, vertex colors, materials, textures, cameras, lamps and actions",

View File

@ -764,7 +764,10 @@ def blen_read_animations(fbx_tmpl_astack, fbx_tmpl_alayer, stacks, scene, anim_o
key = (as_uuid, al_uuid, id_data)
action = actions.get(key)
if action is None:
action_name = "|".join((id_data.name, stack_name, layer_name))
if stack_name == layer_name:
action_name = "|".join((id_data.name, stack_name))
else:
action_name = "|".join((id_data.name, stack_name, layer_name))
actions[key] = action = bpy.data.actions.new(action_name)
action.use_fake_user = True
# If none yet assigned, assign this action to id_data.