diff options
author | Julien Duroure <julien.duroure@gmail.com> | 2020-03-27 20:34:43 +0300 |
---|---|---|
committer | Julien Duroure <julien.duroure@gmail.com> | 2020-03-27 20:34:43 +0300 |
commit | 2425a37ae57dcdbaa1af46bff90a1ed454e5426b (patch) | |
tree | d0c82129f1012e0d66df2f57a91e5ee45895ff9d /io_scene_gltf2/blender/exp/gltf2_blender_gather_animations.py | |
parent | 87422ec348f1fef34958854fa47f797ceae4a807 (diff) |
glTF exporter: better check between shapekeys or object animation
Diffstat (limited to 'io_scene_gltf2/blender/exp/gltf2_blender_gather_animations.py')
-rwxr-xr-x | io_scene_gltf2/blender/exp/gltf2_blender_gather_animations.py | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_animations.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_animations.py index 118a112e..e2cdb83a 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_animations.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_animations.py @@ -53,10 +53,10 @@ def gather_animations(blender_object: bpy.types.Object, break # Export all collected actions. - for blender_action, track_name in blender_actions: + for blender_action, track_name, on_type in blender_actions: # Set action as active, to be able to bake if needed - if blender_action.id_root == "OBJECT" and blender_object.animation_data: # Not for shapekeys! + if on_type == "OBJECT": # Not for shapekeys! if blender_object.animation_data.action is None \ or (blender_object.animation_data.action.name != blender_action.name): if blender_object.animation_data.is_property_readonly('action'): @@ -210,15 +210,17 @@ def __link_samplers(animation: gltf2_io.Animation, export_settings): def __get_blender_actions(blender_object: bpy.types.Object, export_settings - ) -> typing.List[typing.Tuple[bpy.types.Action, str]]: + ) -> typing.List[typing.Tuple[bpy.types.Action, str, str]]: blender_actions = [] blender_tracks = {} + action_on_type = {} if blender_object.animation_data is not None: # Collect active action. if blender_object.animation_data.action is not None: blender_actions.append(blender_object.animation_data.action) blender_tracks[blender_object.animation_data.action.name] = None + action_on_type[blender_object.animation_data.action.name] = "OBJECT" # Collect associated strips from NLA tracks. if export_settings['gltf_nla_strips'] is True: @@ -231,6 +233,7 @@ def __get_blender_actions(blender_object: bpy.types.Object, for strip in non_muted_strips: blender_actions.append(strip.action) blender_tracks[strip.action.name] = track.name # Always set after possible active action -> None will be overwrite + action_on_type[strip.action.name] = "OBJECT" if blender_object.type == "MESH" \ and blender_object.data is not None \ @@ -240,6 +243,7 @@ def __get_blender_actions(blender_object: bpy.types.Object, if blender_object.data.shape_keys.animation_data.action is not None: blender_actions.append(blender_object.data.shape_keys.animation_data.action) blender_tracks[blender_object.data.shape_keys.animation_data.action.name] = None + action_on_type[blender_object.data.shape_keys.animation_data.action.name] = "SHAPEKEY" if export_settings['gltf_nla_strips'] is True: for track in blender_object.data.shape_keys.animation_data.nla_tracks: @@ -251,10 +255,11 @@ def __get_blender_actions(blender_object: bpy.types.Object, for strip in non_muted_strips: blender_actions.append(strip.action) blender_tracks[strip.action.name] = track.name # Always set after possible active action -> None will be overwrite + action_on_type[strip.action.name] = "SHAPEKEY" # Remove duplicate actions. blender_actions = list(set(blender_actions)) # sort animations alphabetically (case insensitive) so they have a defined order and match Blender's Action list blender_actions.sort(key = lambda a: a.name.lower()) - return [(blender_action, blender_tracks[blender_action.name]) for blender_action in blender_actions] + return [(blender_action, blender_tracks[blender_action.name], action_on_type[blender_action.name]) for blender_action in blender_actions] |