Browse Source

Offset animation with scene.frame_start

Jason0214 6 years ago
parent
commit
d7bdcee74e
24 changed files with 103 additions and 41 deletions
  1. 79 16
      io_scene_godot/converters/animation/serializer.py
  2. 0 0
      tests/reference_exports/action_animation/animation_bone_transform.escn
  3. 0 0
      tests/reference_exports/action_animation/animation_object_transform.escn
  4. 0 0
      tests/reference_exports/action_animation/animation_rotation_euler.escn
  5. 0 0
      tests/reference_exports/action_animation/animation_shared_action.escn
  6. 0 0
      tests/reference_exports/action_animation/physics_animation.escn
  7. 10 0
      tests/reference_exports/action_with_constraint/bone_attachment_ik.escn
  8. 0 0
      tests/reference_exports/action_with_constraint/constraint_external_IK.escn
  9. 0 0
      tests/reference_exports/action_with_constraint/constraint_internal_IK.escn
  10. 0 0
      tests/reference_exports/action_with_constraint/stashed_constraint.escn
  11. 0 10
      tests/reference_exports/armature/armature_bone_attachment_ik.escn
  12. 0 0
      tests/reference_exports/armature/armature_illegal_bone_name.escn
  13. 0 1
      tests/reference_exports/armature/armature_with_non_deform_bone.escn
  14. 7 7
      tests/reference_exports/camera/animation_camera.escn
  15. 3 3
      tests/reference_exports/light/animation_various_lights.escn
  16. 0 0
      tests/reference_exports/nla_animation/animation_multi_strip.escn
  17. 0 0
      tests/reference_exports/nla_animation/animation_with_empty_strip.escn
  18. 0 0
      tests/reference_exports/nla_animation/nla_with_active_action.escn
  19. 2 2
      tests/reference_exports/nla_animation/nla_with_no_active_action.escn
  20. 0 0
      tests/reference_exports/nla_animation/nla_with_stashed_action.escn
  21. 0 0
      tests/reference_exports/scene_animation/animation_parented_objects.escn
  22. 1 1
      tests/reference_exports/shape_key/animation_shapekey.escn
  23. 1 1
      tests/reference_exports/shape_key/animation_shapekey_with_transform.escn
  24. 0 0
      tests/test_scenes/action_with_constraint/bone_attachment_ik.blend

+ 79 - 16
io_scene_godot/converters/animation/serializer.py

@@ -10,6 +10,40 @@ from ...structures import (NodeTemplate, NodePath, Array, Map,
 NEAREST_INTERPOLATION = 0
 LINEAR_INTERPOLATION = 1
 
+UPDATE_CONTINUOUS = 0
+UPDATE_DISCRETE = 1
+UPDATE_TRIGGER = 2
+UPDATE_CAPTURE = 3
+
+
+def strip_adjacent_dup_keyframes(frames, values):
+    """Strip removable keyframes to reduce export size"""
+    stripped_frames = list()
+    stripped_values = list()
+
+    assert len(frames) == len(values)
+    length = len(frames)
+
+    stripped_frames.append(frames[0])
+    stripped_values.append(values[0])
+
+    duplicated = False
+    for index in range(1, length - 1):
+        if not duplicated:
+            stripped_frames.append(frames[index])
+            stripped_values.append(values[index])
+            if values[index] == values[index - 1]:
+                duplicated = True
+        elif values[index] != values[index + 1]:
+            duplicated = False
+            stripped_frames.append(frames[index])
+            stripped_values.append(values[index])
+
+    stripped_frames.append(frames[length - 1])
+    stripped_values.append(values[length - 1])
+
+    return stripped_frames, stripped_values
+
 
 class TransformFrame:
     """A data structure hold transform values of an animation key,
@@ -26,6 +60,16 @@ class TransformFrame:
         self.rotation_euler = mathutils.Euler((0, 0, 0))
         self.rotation_quaternion = mathutils.Quaternion()
 
+    def __eq__(self, other):
+        """Overrides the default implementation"""
+        if isinstance(other, TransformFrame):
+            return (self.location == other.location and
+                    self.scale == other.scale and
+                    self.rotation_mode == other.rotation_mode and
+                    self.rotation_quaternion == other.rotation_quaternion and
+                    self.rotation_euler == other.rotation_euler)
+        return False
+
     @classmethod
     def factory(cls, trans_mat, rotation_mode):
         """Factory function, create cls from a transform matrix"""
@@ -231,25 +275,32 @@ class TransformTrack(Track):
     def convert_to_keys_object(self):
         """Convert a transform track to godot structure"""
         array = Array(prefix='[', suffix=']')
-        last_mat = None
-        for index, frame in enumerate(self.frames):
-            mat = self.parent_trans_inverse * self.values[index].to_matrix()
+
+        time_per_frame = 1 / bpy.context.scene.render.fps
+        scene_frame_start = bpy.context.scene.frame_start
+
+        if self.interp == LINEAR_INTERPOLATION:
+            frames, values = strip_adjacent_dup_keyframes(
+                self.frames, self.values)
+        else:
+            frames = self.frames
+            values = self.values
+
+        for frame, trans_frame in zip(frames, values):
+            if frame < scene_frame_start:
+                continue
+
+            mat = self.parent_trans_inverse * trans_frame.to_matrix()
             if self.is_directional:
                 mat = fix_directional_transform(mat)
             # convert from z-up to y-up
             mat = fix_matrix(mat)
 
-            if last_mat and last_mat == mat:
-                # avoid export duplicate keyframe
-                continue
-
             location = mat.to_translation()
             quaternion = mat.to_quaternion()
             scale = mat.to_scale()
 
-            last_mat = mat
-
-            array.append(frame / bpy.context.scene.render.fps)
+            array.append((frame - scene_frame_start) * time_per_frame)
             # transition default 1.0
             array.append(1.0)
             array.append(location.x)
@@ -282,20 +333,32 @@ class ValueTrack(Track):
         time_array = Array(prefix='PoolRealArray(', suffix=')')
         transition_array = Array(prefix='PoolRealArray(', suffix=')')
         value_array = Array(prefix='[', suffix=']')
-        for index, frame in enumerate(self.frames):
-            if (self.interp == LINEAR_INTERPOLATION and index > 0 and
-                    self.values[index] == self.values[index - 1]):
+
+        time_per_frame = 1 / bpy.context.scene.render.fps
+        scene_frame_start = bpy.context.scene.frame_start
+
+        if self.interp == LINEAR_INTERPOLATION:
+            frames, values = strip_adjacent_dup_keyframes(
+                self.frames, self.values)
+        else:
+            frames = self.frames
+            values = self.values
+
+        for frame, frame_val in zip(frames, values):
+            # move animation first frame to scene.frame_start
+            # and cut off frames exceed scene.frame_end
+            if frame < scene_frame_start:
                 continue
 
-            time = frame / bpy.context.scene.render.fps
+            time = (frame - scene_frame_start) * time_per_frame
             time_array.append(time)
             transition_array.append(1)
-            value_array.append(self.values[index])
+            value_array.append(frame_val)
 
         keys_map = Map()
         keys_map["times"] = time_array.to_string()
         keys_map["transitions"] = transition_array.to_string()
-        keys_map["update"] = 0
+        keys_map["update"] = UPDATE_CONTINUOUS
         keys_map["values"] = value_array.to_string()
 
         return keys_map

File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/action_animation/animation_bone_transform.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/action_animation/animation_object_transform.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/action_animation/animation_rotation_euler.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/action_animation/animation_shared_action.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/action_animation/physics_animation.escn


File diff suppressed because it is too large
+ 10 - 0
tests/reference_exports/action_with_constraint/bone_attachment_ik.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/action_with_constraint/constraint_external_IK.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/action_with_constraint/constraint_internal_IK.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/action_with_constraint/stashed_constraint.escn


File diff suppressed because it is too large
+ 0 - 10
tests/reference_exports/armature/armature_bone_attachment_ik.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/armature/armature_illegal_bone_name.escn


File diff suppressed because it is too large
+ 0 - 1
tests/reference_exports/armature/armature_with_non_deform_bone.escn


+ 7 - 7
tests/reference_exports/camera/animation_camera.escn

@@ -39,7 +39,7 @@ tracks/0/type = "value"
 tracks/0/path = NodePath(".:far")
 tracks/0/interp = 1
 tracks/0/keys = {
-	"times":PoolRealArray(0.541667, 0.583333, 0.625, 0.666667, 0.708333, 0.75, 0.791667, 0.833333),
+	"times":PoolRealArray(0.5, 0.541667, 0.583333, 0.625, 0.666667, 0.708333, 0.75, 0.791667),
 	"transitions":PoolRealArray(1, 1, 1, 1, 1, 1, 1, 1),
 	"update":0,
 	"values":[100.0, 95.9174, 83.8392, 65.4366, 44.5634, 26.1609, 14.0826, 10.0]
@@ -48,7 +48,7 @@ tracks/1/type = "value"
 tracks/1/path = NodePath(".:near")
 tracks/1/interp = 1
 tracks/1/keys = {
-	"times":PoolRealArray(0.0416667, 0.0833333, 0.125, 0.166667, 0.208333, 0.25, 0.291667, 0.333333, 0.375, 0.416667),
+	"times":PoolRealArray(0.0, 0.0416667, 0.0833333, 0.125, 0.166667, 0.208333, 0.25, 0.291667, 0.333333, 0.375),
 	"transitions":PoolRealArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
 	"update":0,
 	"values":[0.1, 1.46695, 5.56822, 12.1535, 20.5309, 29.5691, 37.9465, 44.5318, 48.633, 50.0]
@@ -57,7 +57,7 @@ tracks/2/type = "value"
 tracks/2/path = NodePath(".:size")
 tracks/2/interp = 1
 tracks/2/keys = {
-	"times":PoolRealArray(2.5, 2.54167, 2.58333, 2.625, 2.66667, 2.70833, 2.75, 2.79167, 2.83333, 2.875, 2.91667),
+	"times":PoolRealArray(2.45833, 2.5, 2.54167, 2.58333, 2.625, 2.66667, 2.70833, 2.75, 2.79167, 2.83333, 2.875),
 	"transitions":PoolRealArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
 	"update":0,
 	"values":[7.31429, 7.1743, 6.75302, 6.06803, 5.17209, 4.15714, 3.14219, 2.24626, 1.56127, 1.13998, 1.0]
@@ -66,7 +66,7 @@ tracks/3/type = "value"
 tracks/3/path = NodePath(".:projection")
 tracks/3/interp = 0
 tracks/3/keys = {
-	"times":PoolRealArray(0.0416667, 2.5),
+	"times":PoolRealArray(0.0, 2.45833),
 	"transitions":PoolRealArray(1, 1),
 	"update":0,
 	"values":[0, 1]
@@ -75,10 +75,10 @@ tracks/4/type = "value"
 tracks/4/path = NodePath(".:fov")
 tracks/4/interp = 1
 tracks/4/keys = {
-	"times":PoolRealArray(0.0416667, 1.29167, 1.33333, 1.375, 1.41667, 1.45833, 1.5, 1.54167, 1.58333, 1.625, 1.66667, 1.70833, 1.75, 1.79167, 1.83333, 1.875, 1.91667, 1.95833, 2.0, 2.04167, 2.08333, 2.125, 2.16667, 2.20833, 2.25, 2.29167, 2.33333, 2.375, 2.41667, 2.45833, 2.5, 2.54167, 2.58333, 2.625, 2.66667, 2.70833, 2.75, 2.79167, 2.83333, 2.875, 2.91667),
-	"transitions":PoolRealArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
+	"times":PoolRealArray(0.0, 0.0416667, 1.20833, 1.25, 1.29167, 1.33333, 1.375, 1.41667, 1.45833, 1.5, 1.54167, 1.58333, 1.625, 1.66667, 1.70833, 1.75, 1.79167, 1.83333, 1.875, 1.91667, 1.95833, 2.0, 2.04167, 2.08333, 2.125, 2.16667, 2.20833, 2.25, 2.29167, 2.33333, 2.375, 2.41667, 2.45833, 2.5, 2.54167, 2.58333, 2.625, 2.66667, 2.70833, 2.75, 2.79167, 2.83333, 2.875),
+	"transitions":PoolRealArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
 	"update":0,
-	"values":[49.1343, 48.7259, 47.5342, 45.7099, 43.5151, 41.2598, 39.2179, 37.5705, 36.3983, 35.7119, 35.4893, 35.5137, 35.5876, 35.7119, 35.8878, 36.1163, 36.3983, 36.7346, 37.1254, 37.5705, 38.0689, 38.619, 39.2179, 39.8614, 40.5443, 41.2598, 41.9998, 42.7551, 43.5151, 44.2688, 45.0043, 45.7099, 46.3738, 46.9853, 47.5342, 48.0119, 48.411, 48.7259, 48.9526, 49.089, 49.1343]
+	"values":[49.1343, 49.1343, 49.1343, 48.7259, 47.5342, 45.7099, 43.5151, 41.2598, 39.2179, 37.5705, 36.3983, 35.7119, 35.4893, 35.5137, 35.5876, 35.7119, 35.8878, 36.1163, 36.3983, 36.7346, 37.1254, 37.5705, 38.0689, 38.619, 39.2179, 39.8614, 40.5443, 41.2598, 41.9998, 42.7551, 43.5151, 44.2688, 45.0043, 45.7099, 46.3738, 46.9853, 47.5342, 48.0119, 48.411, 48.7259, 48.9526, 49.089, 49.1343]
 }
 [node type="Spatial" name="Scene"]
 

+ 3 - 3
tests/reference_exports/light/animation_various_lights.escn

@@ -62,10 +62,10 @@ tracks/1/type = "value"
 tracks/1/path = NodePath(".:shadow_color")
 tracks/1/interp = 1
 tracks/1/keys = {
-	"times":PoolRealArray(0.0, 0.0416667, 0.0833333, 0.125, 0.166667, 0.208333, 0.25, 0.291667, 0.333333, 0.375, 0.416667, 0.458333, 0.5, 0.541667, 0.583333, 0.625, 0.666667, 0.708333, 0.75, 0.791667, 0.833333, 0.875, 0.916667, 0.958333, 1.0, 1.04167, 1.08333, 1.125, 1.16667, 1.20833, 1.25, 1.29167, 1.33333, 1.375, 1.41667, 1.45833, 1.5, 1.54167, 1.58333, 1.625),
-	"transitions":PoolRealArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
+	"times":PoolRealArray(0.0, 0.0416667, 0.0833333, 0.125, 0.166667, 0.208333, 0.25, 0.291667, 0.333333, 0.375, 0.416667, 0.458333, 0.5, 0.541667, 0.583333, 0.625, 0.666667, 0.708333, 0.75, 0.791667, 0.833333, 0.875, 0.916667, 0.958333, 1.0, 1.04167, 1.08333, 1.125, 1.16667, 1.20833, 1.25, 1.29167, 1.33333, 1.375, 1.41667, 1.45833, 1.5, 1.54167, 1.58333, 1.625, 1.66667, 1.91667),
+	"transitions":PoolRealArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
 	"update":0,
-	"values":[Color(0.0, 0.0, 0.0, 1.0), Color(0.00197254, 0.00197254, 0.00197254, 1.0), Color(0.00790906, 0.00790906, 0.00790906, 1.0), Color(0.0175615, 0.0175615, 0.0175615, 1.0), Color(0.0301865, 0.0301865, 0.0301865, 1.0), Color(0.0444885, 0.0444885, 0.0444885, 1.0), Color(0.0587905, 0.0587905, 0.0587905, 1.0), Color(0.0714154, 0.0714154, 0.0714154, 1.0), Color(0.0810679, 0.0810679, 0.0810679, 1.0), Color(0.0870044, 0.0870044, 0.0870044, 1.0), Color(0.0889769, 0.0889769, 0.0889769, 1.0), Color(0.0889769, 0.0873904, 0.0875582, 1.0), Color(0.0889769, 0.0826156, 0.0832886, 1.0), Color(0.0889768, 0.074852, 0.0763463, 1.0), Color(0.0889768, 0.0646977, 0.0672662, 1.0), Color(0.0889767, 0.0531944, 0.0569799, 1.0), Color(0.0889766, 0.0416912, 0.0466936, 1.0), Color(0.0889765, 0.0315368, 0.0376135, 1.0), Color(0.0889764, 0.0237733, 0.0306712, 1.0), Color(0.0889764, 0.0189985, 0.0264015, 1.0), Color(0.0889764, 0.0174119, 0.0249828, 1.0), Color(0.092455, 0.0179768, 0.0344664, 1.0), Color(0.102924, 0.019677, 0.0630078, 1.0), Color(0.119947, 0.0224414, 0.109415, 1.0), Color(0.142211, 0.026057, 0.170113, 1.0), Color(0.167433, 0.030153, 0.238874, 1.0), Color(0.192655, 0.034249, 0.307634, 1.0), Color(0.21492, 0.0378646, 0.368332, 1.0), Color(0.231942, 0.040629, 0.414739, 1.0), Color(0.242412, 0.0423292, 0.443281, 1.0), Color(0.24589, 0.0428941, 0.452764, 1.0), Color(0.19434, 0.03505, 0.36489, 1.0), Color(0.0839803, 0.0182646, 0.17685, 1.0), Color(0.0322791, 0.0104205, 0.0889757, 1.0), Color(0.032099, 0.0124122, 0.101517, 1.0), Color(0.0319616, 0.0182088, 0.138016, 1.0), Color(0.0318738, 0.0265418, 0.190485, 1.0), Color(0.0318311, 0.0348748, 0.242955, 1.0), Color(0.0318175, 0.0406714, 0.279454, 1.0), Color(0.0318159, 0.0426631, 0.291995, 1.0)]
+	"values":[Color(0.0, 0.0, 0.0, 1.0), Color(0.00197254, 0.00197254, 0.00197254, 1.0), Color(0.00790906, 0.00790906, 0.00790906, 1.0), Color(0.0175615, 0.0175615, 0.0175615, 1.0), Color(0.0301865, 0.0301865, 0.0301865, 1.0), Color(0.0444885, 0.0444885, 0.0444885, 1.0), Color(0.0587905, 0.0587905, 0.0587905, 1.0), Color(0.0714154, 0.0714154, 0.0714154, 1.0), Color(0.0810679, 0.0810679, 0.0810679, 1.0), Color(0.0870044, 0.0870044, 0.0870044, 1.0), Color(0.0889769, 0.0889769, 0.0889769, 1.0), Color(0.0889769, 0.0873904, 0.0875582, 1.0), Color(0.0889769, 0.0826156, 0.0832886, 1.0), Color(0.0889768, 0.074852, 0.0763463, 1.0), Color(0.0889768, 0.0646977, 0.0672662, 1.0), Color(0.0889767, 0.0531944, 0.0569799, 1.0), Color(0.0889766, 0.0416912, 0.0466936, 1.0), Color(0.0889765, 0.0315368, 0.0376135, 1.0), Color(0.0889764, 0.0237733, 0.0306712, 1.0), Color(0.0889764, 0.0189985, 0.0264015, 1.0), Color(0.0889764, 0.0174119, 0.0249828, 1.0), Color(0.092455, 0.0179768, 0.0344664, 1.0), Color(0.102924, 0.019677, 0.0630078, 1.0), Color(0.119947, 0.0224414, 0.109415, 1.0), Color(0.142211, 0.026057, 0.170113, 1.0), Color(0.167433, 0.030153, 0.238874, 1.0), Color(0.192655, 0.034249, 0.307634, 1.0), Color(0.21492, 0.0378646, 0.368332, 1.0), Color(0.231942, 0.040629, 0.414739, 1.0), Color(0.242412, 0.0423292, 0.443281, 1.0), Color(0.24589, 0.0428941, 0.452764, 1.0), Color(0.19434, 0.03505, 0.36489, 1.0), Color(0.0839803, 0.0182646, 0.17685, 1.0), Color(0.0322791, 0.0104205, 0.0889757, 1.0), Color(0.032099, 0.0124122, 0.101517, 1.0), Color(0.0319616, 0.0182088, 0.138016, 1.0), Color(0.0318738, 0.0265418, 0.190485, 1.0), Color(0.0318311, 0.0348748, 0.242955, 1.0), Color(0.0318175, 0.0406714, 0.279454, 1.0), Color(0.0318159, 0.0426631, 0.291995, 1.0), Color(0.0318159, 0.0426631, 0.291995, 1.0), Color(0.0318159, 0.0426631, 0.291995, 1.0)]
 }
 
 [sub_resource id=5 type="ArrayMesh"]

File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/nla_animation/animation_multi_strip.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/nla_animation/animation_with_empty_strip.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/nla_animation/nla_with_active_action.escn


+ 2 - 2
tests/reference_exports/nla_animation/nla_with_no_active_action.escn

@@ -51,7 +51,7 @@ tracks/0/type = "value"
 tracks/0/path = NodePath(".:blend_shapes/Key 1")
 tracks/0/interp = 1
 tracks/0/keys = {
-	"times":PoolRealArray(0.0833333, 0.125, 0.166667, 0.208333, 0.25, 0.291667, 0.333333, 0.375, 0.416667, 0.458333, 0.5, 0.541667, 0.583333, 0.625, 0.666667, 0.708333, 0.75, 0.791667, 0.833333, 0.875, 0.916667, 0.958333, 1.0, 1.04167, 1.08333, 1.125, 1.16667, 1.20833, 1.25, 1.29167, 1.33333, 1.375, 1.41667, 1.45833, 1.5, 1.54167, 1.58333, 1.625, 1.66667, 1.70833, 1.75, 1.79167, 1.83333, 1.875, 1.91667, 1.95833, 2.0, 2.04167, 2.08333),
+	"times":PoolRealArray(0.0416667, 0.0833333, 0.125, 0.166667, 0.208333, 0.25, 0.291667, 0.333333, 0.375, 0.416667, 0.458333, 0.5, 0.541667, 0.583333, 0.625, 0.666667, 0.708333, 0.75, 0.791667, 0.833333, 0.875, 0.916667, 0.958333, 1.0, 1.04167, 1.08333, 1.125, 1.16667, 1.20833, 1.25, 1.29167, 1.33333, 1.375, 1.41667, 1.45833, 1.5, 1.54167, 1.58333, 1.625, 1.66667, 1.70833, 1.75, 1.79167, 1.83333, 1.875, 1.91667, 1.95833, 2.0, 2.04167),
 	"transitions":PoolRealArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
 	"update":0,
 	"values":[0.0, 0.000934008, 0.00489632, 0.0140215, 0.030586, 0.0561825, 0.0910333, 0.134082, 0.183673, 0.246857, 0.331224, 0.434035, 0.549436, 0.6684, 0.780103, 0.874452, 0.944319, 0.986287, 1.0, 0.989896, 0.959486, 0.910042, 0.845371, 0.772109, 0.698847, 0.634176, 0.584732, 0.554322, 0.544218, 0.546027, 0.551474, 0.56033, 0.571913, 0.585034, 0.598155, 0.609738, 0.618594, 0.624041, 0.62585, 0.611976, 0.570219, 0.502325, 0.413523, 0.312925, 0.212327, 0.123525, 0.0556312, 0.0138745, 0.0]
@@ -60,7 +60,7 @@ tracks/1/type = "value"
 tracks/1/path = NodePath(".:blend_shapes/Key 2")
 tracks/1/interp = 1
 tracks/1/keys = {
-	"times":PoolRealArray(0.416667, 0.458333, 0.5, 0.541667, 0.583333, 0.625, 0.666667, 0.708333, 0.75, 0.791667, 0.833333, 0.875),
+	"times":PoolRealArray(0.375, 0.416667, 0.458333, 0.5, 0.541667, 0.583333, 0.625, 0.666667, 0.708333, 0.75, 0.791667, 0.833333),
 	"transitions":PoolRealArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
 	"update":0,
 	"values":[0.0, 0.119438, 0.353741, 0.611825, 0.891865, 1.0, 0.935595, 0.756443, 0.564626, 0.341587, 0.095626, 0.0]

File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/nla_animation/nla_with_stashed_action.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference_exports/scene_animation/animation_parented_objects.escn


+ 1 - 1
tests/reference_exports/shape_key/animation_shapekey.escn

@@ -40,7 +40,7 @@ tracks/0/type = "value"
 tracks/0/path = NodePath(".:blend_shapes/Key 1")
 tracks/0/interp = 1
 tracks/0/keys = {
-	"times":PoolRealArray(0.0416667, 0.0833333, 0.125, 0.166667, 0.208333, 0.25, 0.291667, 0.333333, 0.375, 0.416667, 0.458333, 0.5, 0.541667, 0.583333, 0.625, 0.666667, 0.708333, 0.75, 0.791667, 0.833333, 0.875, 0.916667, 0.958333, 1.0, 1.04167, 1.08333, 1.125, 1.16667, 1.20833, 1.25, 1.29167, 1.33333, 1.375, 1.41667, 1.45833, 1.5, 1.54167, 1.58333, 1.625, 1.66667, 1.70833, 1.75, 1.79167, 1.83333, 1.875, 1.91667, 1.95833, 2.0, 2.04167, 2.08333, 2.125, 2.16667, 2.20833, 2.25, 2.29167, 2.33333, 2.375, 2.41667, 2.45833, 2.5),
+	"times":PoolRealArray(0.0, 0.0416667, 0.0833333, 0.125, 0.166667, 0.208333, 0.25, 0.291667, 0.333333, 0.375, 0.416667, 0.458333, 0.5, 0.541667, 0.583333, 0.625, 0.666667, 0.708333, 0.75, 0.791667, 0.833333, 0.875, 0.916667, 0.958333, 1.0, 1.04167, 1.08333, 1.125, 1.16667, 1.20833, 1.25, 1.29167, 1.33333, 1.375, 1.41667, 1.45833, 1.5, 1.54167, 1.58333, 1.625, 1.66667, 1.70833, 1.75, 1.79167, 1.83333, 1.875, 1.91667, 1.95833, 2.0, 2.04167, 2.08333, 2.125, 2.16667, 2.20833, 2.25, 2.29167, 2.33333, 2.375, 2.41667, 2.45833),
 	"transitions":PoolRealArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
 	"update":0,
 	"values":[0.0, 0.00261531, 0.0105104, 0.0237313, 0.0422801, 0.0661052, 0.095091, 0.129048, 0.167705, 0.2107, 0.257579, 0.307793, 0.360707, 0.415611, 0.471734, 0.528267, 0.584389, 0.639293, 0.692207, 0.742421, 0.7893, 0.832295, 0.870952, 0.904909, 0.933895, 0.95772, 0.976269, 0.98949, 0.997385, 1.0, 0.997557, 0.990181, 0.977831, 0.9605, 0.938228, 0.911111, 0.879307, 0.843044, 0.802629, 0.758447, 0.710968, 0.660738, 0.608376, 0.554558, 0.5, 0.445442, 0.391624, 0.339262, 0.289032, 0.241553, 0.197372, 0.156956, 0.120693, 0.088889, 0.0617719, 0.0395004, 0.0221692, 0.00981867, 0.00244331, 0.0]

File diff suppressed because it is too large
+ 1 - 1
tests/reference_exports/shape_key/animation_shapekey_with_transform.escn


+ 0 - 0
tests/test_scenes/armature/armature_bone_attachment_ik.blend → tests/test_scenes/action_with_constraint/bone_attachment_ik.blend


Some files were not shown because too many files changed in this diff