Browse Source

support shape key

Jason0214 7 years ago
parent
commit
f6e4e18a01

+ 5 - 0
io_scene_godot/__init__.py

@@ -75,6 +75,11 @@ class ExportGodot(bpy.types.Operator, ExportHelper):
         },
     )
 
+    export_shape_key = BoolProperty(
+        name="Export Shape Key",
+        description="Export all the shape keys in mesh objects",
+        default=True,
+    )
     use_export_selected = BoolProperty(
         name="Selected Objects",
         description="Export only selected objects (and visible in active "

+ 182 - 56
io_scene_godot/converters/mesh.py

@@ -82,6 +82,13 @@ def export_mesh(escn_file, export_settings, node, armature_data):
         node,
         armature_data)
 
+    if export_settings['export_shape_key'] and node.data.shape_keys:
+        mesh_resource["blend_shape/names"] = Array(prefix="PoolStringArray(")
+        mesh_resource["blend_shape/mode"] = 0
+        for _, shape_key in extract_shape_keys(node.data.shape_keys):
+            mesh_resource["blend_shape/names"].append(
+                '"{}"'.format(shape_key.name))
+
     for surface in surfaces:
         mesh_resource[surface.name_str] = surface
 
@@ -91,6 +98,17 @@ def export_mesh(escn_file, export_settings, node, armature_data):
     return mesh_id
 
 
+def triangulate_mesh(mesh):
+    """Triangulate a mesh"""
+    tri_mesh = bmesh.new()
+    tri_mesh.from_mesh(mesh)
+    bmesh.ops.triangulate(tri_mesh, faces=tri_mesh.faces, quad_method=2)
+    tri_mesh.to_mesh(mesh)
+    tri_mesh.free()
+
+    mesh.update(calc_tessface=True)
+
+
 def find_bone_vertex_groups(vertex_groups, armature_data):
     """Find the id of vertex groups connected to bone weights,
     return a dict() mapping from vertex_group id to bone id"""
@@ -115,18 +133,8 @@ def make_arrays(escn_file, export_settings, node, armature_data):
                         export_settings['use_mesh_modifiers'],
                         "RENDER")
 
-    if armature_data is not None:
-        armature_data.pose_position = original_pose_position
-        bpy.context.scene.update()
-
     # Prepare the mesh for export
-    tri_mesh = bmesh.new()
-    tri_mesh.from_mesh(mesh)
-    bmesh.ops.triangulate(tri_mesh, faces=tri_mesh.faces)
-    tri_mesh.to_mesh(mesh)
-    tri_mesh.free()
-
-    mesh.update(calc_tessface=True)
+    triangulate_mesh(mesh)
 
     uv_layer_count = len(mesh.uv_textures)
     if uv_layer_count > 2:
@@ -151,17 +159,100 @@ def make_arrays(escn_file, export_settings, node, armature_data):
         gid_to_bid_map
     )
 
+    if (export_settings['export_shape_key'] and
+            node.data.shape_keys is not None):
+        export_morphs(
+            export_settings, node, surfaces, has_tangents, gid_to_bid_map)
+
     has_bone = True if armature_data is not None else False
 
     for surface_id, surface in enumerate(surfaces):
         surface.id = surface_id
-        surface.has_bone = has_bone
+        surface.vertex_data.has_bone = has_bone
+        for vert_data in surface.morph_arrays:
+            vert_data.has_bone = has_bone
 
     bpy.data.meshes.remove(mesh)
 
+    if armature_data is not None:
+        armature_data.pose_position = original_pose_position
+        bpy.context.scene.update()
+
     return surfaces
 
 
+def extract_shape_keys(blender_shape_keys):
+    """Return a list of (shape_key_index, shape_key_object) each of them
+    is a shape key needs exported"""
+    # base shape key needn't be exported
+    ret = list()
+    base_key = blender_shape_keys.reference_key
+    for index, shape_key in enumerate(blender_shape_keys.key_blocks):
+        if shape_key != base_key:
+            ret.append((index, shape_key))
+    return ret
+
+
+def intialize_surfaces_morph_data(surfaces):
+    """Initialize a list of empty morph for surfaces"""
+    surfaces_morph_list = [VerticesArrays() for _ in range(len(surfaces))]
+
+    for index, morph in enumerate(surfaces_morph_list):
+        morph.vertices = [None] * len(surfaces[index].vertex_data.vertices)
+
+    return surfaces_morph_list
+
+
+def export_morphs(export_settings, node, surfaces, has_tangents,
+                  gid_to_bid_map):
+    """Export shape keys in mesh node and append them to surfaces"""
+    for index, shape_key in extract_shape_keys(node.data.shape_keys):
+
+        node.show_only_shape_key = True
+        node.active_shape_key_index = index
+        shape_key.value = 1.0
+
+        mesh = node.to_mesh(bpy.context.scene,
+                            export_settings['use_mesh_modifiers'],
+                            "RENDER")
+        triangulate_mesh(mesh)
+
+        if has_tangents:
+            mesh.calc_tangents()
+        else:
+            mesh.calc_normals_split()
+
+        surfaces_morph_data = intialize_surfaces_morph_data(surfaces)
+
+        for face in mesh.polygons:
+            surface_index = -1
+            for surf_index, surf in enumerate(surfaces):
+                # todo:
+                # use the `material_to_surface` map from `generate_surfaces`
+                if surf.face_material_index == face.material_index:
+                    surface_index = surf_index
+                    break
+
+            if surface_index != -1:
+                surface = surfaces[surface_index]
+                morph = surfaces_morph_data[surface_index]
+
+                for loop_id in range(face.loop_total):
+                    loop_index = face.loop_start + loop_id
+                    new_vert = VerticesArrays.create_vertex_from_loop(
+                        mesh, loop_index, has_tangents, gid_to_bid_map
+                    )
+
+                    vertex_index = surface.vertex_index_map[loop_index]
+
+                    morph.vertices[vertex_index] = new_vert
+
+        for surf_index, surf in enumerate(surfaces):
+            surf.morph_arrays.append(surfaces_morph_data[surf_index])
+
+        bpy.data.meshes.remove(mesh)
+
+
 def generate_surfaces(escn_file, export_settings, mesh, has_tangents,
                       gid_to_bid_map):
     """Splits up the mesh into surfaces with a single material each.
@@ -179,6 +270,7 @@ def generate_surfaces(escn_file, export_settings, mesh, has_tangents,
         if face.material_index not in material_to_surface:
             material_to_surface[face.material_index] = len(surfaces)
             surface = Surface()
+            surface.face_material_index = face.material_index
             surfaces.append(surface)
             if mesh.materials:
                 mat = mesh.materials[face.material_index]
@@ -194,56 +286,67 @@ def generate_surfaces(escn_file, export_settings, mesh, has_tangents,
 
         for loop_id in range(face.loop_total):
             loop_index = face.loop_start + loop_id
-            loop = mesh.loops[loop_index]
-
-            new_vert = Vertex()
-            new_vert.vertex = fix_vertex(mesh.vertices[loop.vertex_index].co)
-
-            for uv_layer in mesh.uv_layers:
-                new_vert.uv.append(mathutils.Vector(
-                    uv_layer.data[loop_index].uv
-                ))
 
-            if mesh.vertex_colors:
-                new_vert.color = mathutils.Vector(
-                    mesh.vertex_colors[0].data[loop_index].color)
-
-            new_vert.normal = fix_vertex(loop.normal)
-
-            if has_tangents:
-                new_vert.tangent = fix_vertex(loop.tangent)
-                new_vert.bitangent = fix_vertex(loop.bitangent)
-
-            for vertex_group in mesh.vertices[loop.vertex_index].groups:
-                if vertex_group.group in gid_to_bid_map:
-                    new_vert.bones.append(gid_to_bid_map[vertex_group.group])
-                    new_vert.weights.append(vertex_group.weight)
+            new_vert = VerticesArrays.create_vertex_from_loop(
+                mesh, loop_index, has_tangents, gid_to_bid_map)
 
             # Merge similar vertices
             tup = new_vert.get_tup()
             if tup not in surface.vertex_map:
-                surface.vertex_map[tup] = len(surface.vertices)
-                surface.vertices.append(new_vert)
+                surface.vertex_map[tup] = len(surface.vertex_data.vertices)
+                surface.vertex_data.vertices.append(new_vert)
 
-            vertex_indices.append(surface.vertex_map[tup])
+            vertex_index = surface.vertex_map[tup]
+            surface.vertex_index_map[loop_index] = vertex_index
+
+            vertex_indices.append(vertex_index)
 
         if len(vertex_indices) > 2:  # Only triangles and above
-            surface.indices.append(vertex_indices)
+            surface.vertex_data.indices.append(vertex_indices)
 
     return surfaces
 
 
-class Surface:
-    """A surface is a single part of a mesh (eg in blender, one mesh can have
-    multiple materials. Godot calls these separate parts separate surfaces"""
+class VerticesArrays:
+    """Godot use several arrays to store the data of a surface(e.g. vertices,
+    indices, bone weights). A surface object has a single VerticesArrays as its
+    default and also may have a morph array with a list of VerticesArrays"""
     def __init__(self):
         self.vertices = []
-        self.vertex_map = {}
         self.indices = []
-        self.id = None
-        self.material = None
         self.has_bone = False
 
+    @staticmethod
+    def create_vertex_from_loop(mesh, loop_index, has_tangents,
+                                gid_to_bid_map):
+        """Create a vertex from a blender mesh loop"""
+        new_vert = Vertex()
+
+        loop = mesh.loops[loop_index]
+        new_vert.vertex = fix_vertex(mesh.vertices[loop.vertex_index].co)
+
+        for uv_layer in mesh.uv_layers:
+            new_vert.uv.append(mathutils.Vector(
+                uv_layer.data[loop_index].uv
+            ))
+
+        if mesh.vertex_colors:
+            new_vert.color = mathutils.Vector(
+                mesh.vertex_colors[0].data[loop_index].color)
+
+        new_vert.normal = fix_vertex(loop.normal)
+
+        if has_tangents:
+            new_vert.tangent = fix_vertex(loop.tangent)
+            new_vert.bitangent = fix_vertex(loop.bitangent)
+
+        for vertex_group in mesh.vertices[loop.vertex_index].groups:
+            if vertex_group.group in gid_to_bid_map:
+                new_vert.bones.append(gid_to_bid_map[vertex_group.group])
+                new_vert.weights.append(vertex_group.weight)
+
+        return new_vert
+
     def calc_tangent_dp(self, vert):
         """Calculates the dot product of the tangent. I think this has
         something to do with normal mapping"""
@@ -325,10 +428,17 @@ class Surface:
         # Indices- each face is made of 3 verts, and these are the indices
         # in the vertex arrays. The backface is computed from the winding
         # order, hence v[2] before v[1]
-        face_indices = Array(
-            "IntArray(",
-            values=[[v[0], v[2], v[1]] for v in self.indices]
-        )
+        if self.indices:
+            face_indices = Array(
+                "IntArray(",
+                values=[[v[0], v[2], v[1]] for v in self.indices]
+            )
+        else:
+            # in morph, it has no indices
+            face_indices = Array(
+                "null, ; Morph Object", "", ""
+            )
+
         surface_lines.append(face_indices.to_string())
 
         return surface_lines
@@ -366,6 +476,25 @@ class Surface:
 
         return bone_idx_array, bone_ws_array
 
+    def to_string(self):
+        """Serialize"""
+        return "[\n\t\t{}\n\t]".format(",\n\t\t".join(self.generate_lines()))
+
+
+class Surface:
+    """A surface is a single part of a mesh (eg in blender, one mesh can have
+    multiple materials. Godot calls these separate parts separate surfaces"""
+    def __init__(self):
+        # map from a Vertex.tup() to surface.vertex_data.indices
+        self.vertex_map = dict()
+        self.vertex_data = VerticesArrays()
+        self.morph_arrays = Array(prefix="[", seperator=",\n", suffix="]")
+        # map from mesh.loop_index to surface.vertex_data.indices
+        self.vertex_index_map = dict()
+        self.id = None
+        self.material = None
+        self.face_material_index = -1
+
     @property
     def name_str(self):
         """Used to separate surfaces that are part of the same mesh by their
@@ -379,13 +508,10 @@ class Surface:
 
             out_str += "\t\"material\":" + self.material + ",\n"
         out_str += "\t\"primitive\":4,\n"
-        out_str += "\t\"arrays\":[\n"
-
-        arrays = ",\n\t\t".join(self.generate_lines())
-        out_str += "\t\t" + arrays + "\n"
-
-        out_str += "\t" + "],\n"
-        out_str += "\t" + "\"morph_arrays\":[]\n"
+        out_str += "\t\"arrays\":" + self.vertex_data.to_string() + ",\n"
+        out_str += "\t" + "\"morph_arrays\":"
+        out_str += self.morph_arrays.to_string()
+        out_str += "\n"
         out_str += "}\n"
 
         return out_str

+ 2 - 2
tests/reference-exports/animation_object_transform.escn

@@ -15,8 +15,8 @@ surfaces/0 = {
 	"material":SubResource(1),
 	"primitive":4,
 	"arrays":[
-		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, 1.0, -1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
-		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
+		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, 1.0, -1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
+		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
 		null, ; No Tangents,
 		null, ; no Vertex Colors,
 		null, ; No UV1,

+ 2 - 2
tests/reference-exports/animation_parented_objects.escn

@@ -15,8 +15,8 @@ surfaces/0 = {
 	"material":SubResource(1),
 	"primitive":4,
 	"arrays":[
-		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, 1.0, -1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
-		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
+		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, 1.0, -1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
+		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
 		null, ; No Tangents,
 		null, ; no Vertex Colors,
 		null, ; No UV1,

+ 2 - 2
tests/reference-exports/animation_rotation_euler.escn

@@ -15,8 +15,8 @@ surfaces/0 = {
 	"material":SubResource(1),
 	"primitive":4,
 	"arrays":[
-		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, 1.0, -1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
-		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
+		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, 1.0, -1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
+		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
 		null, ; No Tangents,
 		null, ; no Vertex Colors,
 		null, ; No UV1,

File diff suppressed because it is too large
+ 0 - 0
tests/reference-exports/armature_with_mesh.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference-exports/armature_with_pose.escn


+ 2 - 2
tests/reference-exports/duplicate_name.escn

@@ -53,8 +53,8 @@ surfaces/0 = {
 	"material":SubResource(3),
 	"primitive":4,
 	"arrays":[
-		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, 1.0, -1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
-		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
+		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, 1.0, -1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
+		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
 		null, ; No Tangents,
 		null, ; no Vertex Colors,
 		null, ; No UV1,

File diff suppressed because it is too large
+ 9 - 0
tests/reference-exports/just_shapekey.escn


+ 4 - 4
tests/reference-exports/material_search.escn

@@ -7,11 +7,11 @@ surfaces/0 = {
 	"material":ExtResource(1),
 	"primitive":4,
 	"arrays":[
-		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, 1.0, -1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
-		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
-		FloatArray(0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, -1.0, 0.0, -2.68221e-07, 1.0, -1.0, 0.0, -2.68221e-07, 1.0, -1.0, 0.0, -2.68221e-07, 1.0, 2.38419e-07, 1.0, 2.38419e-07, 1.0, 2.38419e-07, 1.0, 2.38419e-07, 1.0, 2.38419e-07, 1.0, 2.38419e-07, 1.0, -3.27826e-07, 1.0, 4.76837e-07, 1.0, -3.27826e-07, 1.0, 4.76837e-07, 1.0, -3.27826e-07, 1.0, 4.76837e-07, 1.0, -1.49012e-07, 1.0, 2.38419e-07, 1.0, -1.49012e-07, 1.0, 2.38419e-07, 1.0, -1.49012e-07, 1.0, 2.38419e-07, 1.0, -2.38419e-07, -1.0, -2.38419e-07, 1.0, -2.38419e-07, -1.0, -2.38419e-07, 1.0, -2.38419e-07, -1.0, -2.38419e-07, 1.0, -1.78814e-07, 0.0, 1.0, 1.0, -1.78814e-07, 0.0, 1.0, 1.0, -1.78814e-07, 0.0, 1.0, 1.0, -1.0, 5.96047e-08, -4.17233e-07, 1.0, -1.0, 5.96047e-08, -4.17233e-07, 1.0, -1.0, 5.96047e-08, -4.17233e-07, 1.0, -3.27826e-07, 1.0, 2.38419e-07, 1.0, -3.27826e-07, 1.0, 2.38419e-07, 1.0, -3.27826e-07, 1.0, 2.38419e-07, 1.0, -1.19209e-07, 1.0, -1.19209e-07, 1.0, -1.19209e-07, 1.0, -1.19209e-07, 1.0, -1.19209e-07, 1.0, -1.19209e-07, 1.0, -1.19209e-07, 1.0, -8.9407e-08, 1.0, -1.19209e-07, 1.0, -8.9407e-08, 1.0, -1.19209e-07, 1.0, -8.9407e-08, 1.0, 1.78814e-07, -1.0, -8.9407e-08, 1.0, 1.78814e-07, -1.0, -8.9407e-08, 1.0, 1.78814e-07, -1.0, -8.9407e-08, 1.0),
+		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, 1.0, -1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
+		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, 1.0, -2.38419e-07, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, 1.0, 3.27825e-07, 5.96046e-07, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
+		FloatArray(0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, -1.0, 0.0, -2.68221e-07, 1.0, -1.0, 0.0, -2.68221e-07, 1.0, -1.0, 0.0, -2.68221e-07, 1.0, 2.38419e-07, 1.0, 2.38419e-07, 1.0, 2.38419e-07, 1.0, 2.38419e-07, 1.0, 2.38419e-07, 1.0, 2.38419e-07, 1.0, -3.27826e-07, 1.0, 4.76837e-07, 1.0, -3.27826e-07, 1.0, 4.76837e-07, 1.0, -3.27826e-07, 1.0, 4.76837e-07, 1.0, -1.19209e-07, 1.0, -8.9407e-08, 1.0, -1.19209e-07, 1.0, -8.9407e-08, 1.0, -1.19209e-07, 1.0, -8.9407e-08, 1.0, -2.38419e-07, -1.0, -2.38419e-07, 1.0, -2.38419e-07, -1.0, -2.38419e-07, 1.0, -2.38419e-07, -1.0, -2.38419e-07, 1.0, -1.78814e-07, 0.0, 1.0, 1.0, -1.78814e-07, 0.0, 1.0, 1.0, -1.78814e-07, 0.0, 1.0, 1.0, -1.0, 5.96047e-08, -4.17233e-07, 1.0, -1.0, 5.96047e-08, -4.17233e-07, 1.0, -1.0, 5.96047e-08, -4.17233e-07, 1.0, -3.27826e-07, 1.0, 2.38419e-07, 1.0, -3.27826e-07, 1.0, 2.38419e-07, 1.0, -3.27826e-07, 1.0, 2.38419e-07, 1.0, -1.19209e-07, 1.0, -1.19209e-07, 1.0, -1.19209e-07, 1.0, -1.19209e-07, 1.0, -1.19209e-07, 1.0, -1.19209e-07, 1.0, -1.49012e-07, 1.0, 1.78814e-07, 1.0, -1.49012e-07, 1.0, 1.78814e-07, 1.0, -1.49012e-07, 1.0, 1.78814e-07, 1.0, 1.78814e-07, -1.0, -8.9407e-08, 1.0, 1.78814e-07, -1.0, -8.9407e-08, 1.0, 1.78814e-07, -1.0, -8.9407e-08, 1.0),
 		null, ; no Vertex Colors,
-		Vector2Array(1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0),
+		Vector2Array(1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0),
 		null, ; No UV2,
 		null, ; No Bones,
 		null, ; No Weights,

File diff suppressed because it is too large
+ 0 - 0
tests/reference-exports/parented_meshes.escn


File diff suppressed because it is too large
+ 0 - 0
tests/reference-exports/physics.escn


File diff suppressed because it is too large
+ 28 - 0
tests/reference-exports/shapekey_with_multi_surface.escn


+ 2 - 2
tests/reference-exports/simple_materials.escn

@@ -24,8 +24,8 @@ surfaces/0 = {
 	"material":SubResource(1),
 	"primitive":4,
 	"arrays":[
-		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
-		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
+		Vector3Array(1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 0.999999, 1.0, 1.0, 1.0, 1.0, -0.999999, 0.999999, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -0.999999, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 0.999999, 1.0, 1.0, 0.999999, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0),
+		Vector3Array(2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 2.98023e-08, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -8.9407e-08, -4.76837e-07, 1.0, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, -1.0, -1.19209e-07, -2.38419e-07, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 2.68221e-07, 2.38419e-07, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, 5.96047e-08, 1.0, 0.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -4.76837e-07, 1.19209e-07, 1.0, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, -1.0, -1.49012e-07, -2.38419e-07, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0, 2.08616e-07, 8.9407e-08, -1.0),
 		null, ; No Tangents,
 		null, ; no Vertex Colors,
 		null, ; No UV1,

+ 4 - 4
tests/reference-exports/vertex_color.escn

@@ -5,15 +5,15 @@
 surfaces/0 = {
 	"primitive":4,
 	"arrays":[
-		Vector3Array(2.0, 0.0, -1.33333, 1.33333, 0.0, -2.0, 1.33333, 0.0, -1.33333, -1.33333, 0.0, -1.33333, -2.0, 0.0, -2.0, -2.0, 0.0, -1.33333, -0.666667, 0.0, -1.33333, -1.33333, 0.0, -2.0, -3.97364e-08, 0.0, -1.33333, -0.666667, 0.0, -2.0, 0.666667, 0.0, -1.33333, -5.96046e-08, 0.0, -2.0, 0.666667, 0.0, -2.0, -1.33333, 0.0, 2.0, -2.0, 0.0, 1.33333, -2.0, 0.0, 2.0, -1.33333, 0.0, 1.33333, -2.0, 0.0, 0.666667, -1.33333, 0.0, 0.666667, -2.0, 0.0, 5.96046e-08, -2.0, 0.0, 0.666667, -1.33333, 0.0, -5.96046e-08, -2.0, 0.0, -0.666667, -1.33333, 0.0, -0.666667, -2.0, 0.0, -0.666667, -0.666667, 0.0, 2.0, -0.666667, 0.0, 1.33333, -1.33333, 0.0, 0.666667, -0.666667, 0.0, 0.666667, -1.33333, 0.0, -5.96046e-08, -0.666667, 0.0, -5.96046e-08, -0.666667, 0.0, -0.666667, 5.96046e-08, 0.0, 2.0, 1.98682e-08, 0.0, 0.666667, -0.666667, 0.0, -5.96046e-08, -1.98682e-08, 0.0, -0.666667, -0.666667, 0.0, -0.666667, 0.666667, 0.0, 2.0, 3.97364e-08, 0.0, 1.33333, 5.96046e-08, 0.0, 2.0, 3.97364e-08, 0.0, 1.33333, 0.666667, 0.0, 0.666667, -1.77636e-15, 0.0, -5.96046e-08, 0.666667, 0.0, -5.96046e-08, -1.98682e-08, 0.0, -0.666667, 0.666667, 0.0, -0.666667, 1.33333, 0.0, 2.0, 0.666667, 0.0, 1.33333, 0.666667, 0.0, 2.0, 0.666667, 0.0, 1.33333, 1.33333, 0.0, 0.666667, 0.666667, 0.0, 0.666667, 1.33333, 0.0, -5.96046e-08, 0.666667, 0.0, -5.96046e-08, 1.33333, 0.0, -5.96046e-08, 2.0, 0.0, 2.0, 1.33333, 0.0, 1.33333, 2.0, 0.0, 1.33333, 1.33333, 0.0, 0.666667, 2.0, 0.0, 0.666667, 2.0, 0.0, -5.96046e-08, 1.33333, 0.0, -0.666667, 2.0, 0.0, -2.0, -1.33333, 0.0, -0.666667, 1.33333, 0.0, -0.666667, 0.666667, 0.0, -0.666667, 2.0, 0.0, -0.666667),
-		Vector3Array(0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0),
+		Vector3Array(2.0, 0.0, -1.33333, 1.33333, 0.0, -2.0, 1.33333, 0.0, -1.33333, -1.33333, 0.0, -1.33333, -2.0, 0.0, -2.0, -2.0, 0.0, -1.33333, -0.666667, 0.0, -1.33333, -1.33333, 0.0, -2.0, -3.97364e-08, 0.0, -1.33333, -0.666667, 0.0, -2.0, 0.666667, 0.0, -1.33333, -5.96046e-08, 0.0, -2.0, 0.666667, 0.0, -2.0, -1.33333, 0.0, 2.0, -2.0, 0.0, 1.33333, -2.0, 0.0, 2.0, -1.33333, 0.0, 1.33333, -2.0, 0.0, 0.666667, -1.33333, 0.0, 0.666667, -2.0, 0.0, 5.96046e-08, -2.0, 0.0, 0.666667, -1.33333, 0.0, -5.96046e-08, -2.0, 0.0, -0.666667, -1.33333, 0.0, -0.666667, -2.0, 0.0, -0.666667, -0.666667, 0.0, 2.0, -0.666667, 0.0, 1.33333, -1.33333, 0.0, 0.666667, -0.666667, 0.0, 0.666667, -1.33333, 0.0, -5.96046e-08, -0.666667, 0.0, -5.96046e-08, -0.666667, 0.0, -0.666667, 5.96046e-08, 0.0, 2.0, 3.97364e-08, 0.0, 1.33333, 1.98682e-08, 0.0, 0.666667, -1.77636e-15, 0.0, -5.96046e-08, -1.98682e-08, 0.0, -0.666667, 0.666667, 0.0, 2.0, 3.97364e-08, 0.0, 1.33333, 5.96046e-08, 0.0, 2.0, 0.666667, 0.0, 1.33333, 1.98682e-08, 0.0, 0.666667, 0.666667, 0.0, 0.666667, 0.666667, 0.0, -5.96046e-08, 0.666667, 0.0, -0.666667, 1.33333, 0.0, 2.0, 0.666667, 0.0, 1.33333, 0.666667, 0.0, 2.0, 1.33333, 0.0, 1.33333, 1.33333, 0.0, 0.666667, 1.33333, 0.0, -5.96046e-08, 1.33333, 0.0, -0.666667, 2.0, 0.0, 2.0, 2.0, 0.0, 1.33333, 2.0, 0.0, 0.666667, 2.0, 0.0, -5.96046e-08, 2.0, 0.0, -0.666667, 2.0, 0.0, -2.0, -1.33333, 0.0, -0.666667, -1.77636e-15, 0.0, -5.96046e-08, -1.98682e-08, 0.0, -0.666667, -0.666667, 0.0, -0.666667, 0.666667, 0.0, 0.666667, 1.33333, 0.0, 1.33333, 1.33333, 0.0, 0.666667, 1.33333, 0.0, -5.96046e-08, 0.666667, 0.0, -5.96046e-08, 1.33333, 0.0, -0.666667, 0.666667, 0.0, -0.666667),
+		Vector3Array(0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0),
 		null, ; No Tangents,
-		ColorArray(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.105882, 0.0156863, 1.0, 0.0, 0.141176, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.00784314, 0.145098, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.141176, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.141176, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0196078, 1.0, 0.0196078, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.129412, 0.0392157, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.129412, 0.0392157, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.101961, 0.0117647, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.101961, 0.0117647, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0),
+		ColorArray(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.105882, 0.0156863, 1.0, 0.0, 0.141176, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.00784314, 0.145098, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.141176, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.141176, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0196078, 1.0, 0.0196078, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 0.129412, 0.0392157, 1.0, 1.0, 0.101961, 0.0117647, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0196078, 1.0, 0.0196078, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 0.0941176, 0.0, 1.0, 1.0, 0.129412, 0.0392157, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.101961, 0.0117647, 1.0, 1.0, 1.0, 1.0, 1.0),
 		null, ; No UV1,
 		null, ; No UV2,
 		null, ; No Bones,
 		null, ; No Weights,
-		IntArray(0, 2, 1, 3, 5, 4, 6, 3, 7, 8, 6, 9, 10, 8, 11, 2, 10, 12, 13, 15, 14, 16, 14, 17, 18, 20, 19, 21, 19, 22, 23, 24, 5, 25, 13, 16, 26, 16, 27, 28, 27, 29, 30, 29, 23, 31, 23, 3, 32, 25, 26, 26, 28, 33, 33, 28, 30, 34, 36, 35, 31, 6, 8, 37, 39, 38, 40, 33, 41, 41, 33, 42, 43, 42, 44, 45, 44, 8, 46, 48, 47, 49, 51, 50, 51, 53, 52, 54, 43, 45, 45, 10, 2, 55, 46, 56, 57, 56, 58, 59, 58, 54, 60, 54, 61, 61, 2, 0, 0, 1, 62, 3, 4, 7, 6, 7, 9, 8, 9, 11, 10, 11, 12, 2, 12, 1, 13, 14, 16, 16, 17, 27, 18, 19, 21, 21, 22, 63, 23, 5, 3, 25, 16, 26, 26, 27, 28, 28, 29, 30, 30, 23, 31, 31, 3, 6, 32, 26, 40, 26, 33, 40, 33, 30, 42, 30, 44, 42, 31, 8, 44, 48, 40, 47, 40, 41, 47, 41, 42, 43, 43, 44, 45, 45, 8, 10, 46, 47, 56, 47, 58, 56, 41, 54, 58, 52, 65, 64, 45, 2, 61, 55, 56, 57, 57, 58, 59, 59, 54, 60, 60, 61, 66, 61, 0, 66)
+		IntArray(0, 2, 1, 3, 5, 4, 6, 3, 7, 8, 6, 9, 10, 8, 11, 2, 10, 12, 13, 15, 14, 16, 14, 17, 18, 20, 19, 21, 19, 22, 23, 24, 5, 25, 13, 16, 26, 16, 27, 28, 27, 29, 30, 29, 23, 31, 23, 3, 32, 25, 26, 33, 26, 28, 34, 28, 30, 35, 30, 31, 36, 31, 6, 37, 39, 38, 40, 38, 41, 42, 34, 35, 43, 35, 36, 44, 36, 8, 45, 47, 46, 48, 46, 42, 49, 42, 43, 50, 43, 44, 51, 44, 10, 52, 45, 48, 53, 48, 49, 54, 49, 50, 55, 50, 51, 56, 51, 2, 0, 1, 57, 3, 4, 7, 6, 7, 9, 8, 9, 11, 10, 11, 12, 2, 12, 1, 13, 14, 16, 16, 17, 27, 18, 19, 21, 21, 22, 58, 23, 5, 3, 25, 16, 26, 26, 27, 28, 28, 29, 30, 30, 23, 31, 31, 3, 6, 32, 26, 33, 33, 28, 34, 34, 30, 35, 59, 61, 60, 36, 6, 8, 47, 33, 46, 40, 41, 62, 42, 35, 43, 43, 36, 44, 44, 8, 10, 45, 46, 48, 63, 62, 64, 64, 66, 65, 65, 68, 67, 51, 10, 2, 52, 48, 53, 53, 49, 54, 54, 50, 55, 55, 51, 56, 56, 2, 0)
 	],
 	"morph_arrays":[]
 }

+ 1 - 0
tests/scenes/export_blends.py

@@ -15,6 +15,7 @@ def export_escn(out_file):
             
     res = export_godot.save(op(), bpy.context, out_file, 
         object_types={"EMPTY", "CAMERA", "LAMP", "ARMATURE", "MESH", "CURVE"},
+        export_shape_key=True,
         use_active_layers=False,
         use_export_selected=False,
         use_mesh_modifiers=True,

BIN
tests/scenes/just_shapekey.blend


BIN
tests/scenes/shapekey_with_multi_surface.blend


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