From a96ecd2834c8eefc20cb3cc38b02cb442880f7b3 Mon Sep 17 00:00:00 2001 From: Aras Pranckevicius Date: Mon, 12 May 2025 10:56:07 +0200 Subject: [PATCH] Fix #137768: new FBX importer does not import some animations correctly - FBX "root bone" should become the Armature object itself, and not an extra bone (follow same logic as Python importer did). - "World to armature matrix" was not correct for armatures that are parented under some other objects with transforms. - Parenting imported meshes under an Armature was not taking into account that the mesh bind transform might not be the same as the current mesh node transform (i.e. was not setting "matrix parent inverse" to compensate like the Python importer did). - The repro file in #137768 also exposed an issue that importing custom vertex normals was not working correctly in the new importer, when mesh is partially invalid (validation alters the mesh, custom normals have to be set afterwards). Pull Request: https://projects.blender.org/blender/blender/pulls/138736 --- source/blender/io/fbx/importer/fbx_import.cc | 8 +- .../io/fbx/importer/fbx_import_anim.cc | 9 +- .../io/fbx/importer/fbx_import_armature.cc | 139 +- .../io/fbx/importer/fbx_import_mesh.cc | 67 +- .../io/fbx/importer/fbx_import_util.cc | 16 - .../io/fbx/importer/fbx_import_util.hh | 8 +- .../issue127388_imported_bones_too_large.fbx | 4 +- .../fbx/issue43141_skinned_rabbit.fbx | 3 + .../fbx/reference/bl42_various_objects.txt | 104 +- .../issue127388_imported_bones_too_large.txt | 1377 +---------------- .../reference/issue43141_skinned_rabbit.txt | 387 +++++ .../reference/issue76800_bone_orientation.txt | 4 +- .../ufbx_motionbuilder_sausage_rrss_77b.txt | 4 + tests/python/modules/io_report.py | 7 + 14 files changed, 672 insertions(+), 1465 deletions(-) create mode 100644 tests/files/io_tests/fbx/issue43141_skinned_rabbit.fbx create mode 100644 tests/files/io_tests/fbx/reference/issue43141_skinned_rabbit.txt diff --git a/source/blender/io/fbx/importer/fbx_import.cc b/source/blender/io/fbx/importer/fbx_import.cc index cf676328761..55746419d9c 100644 --- a/source/blender/io/fbx/importer/fbx_import.cc +++ b/source/blender/io/fbx/importer/fbx_import.cc @@ -218,7 +218,7 @@ void FbxImportContext::import_empties() { /* Create empties for fbx nodes. */ for (const ufbx_node *node : this->fbx.nodes) { - /* Ignore root, and bones and nodes for which we have created objects already. */ + /* Ignore root, bones and nodes for which we have created objects already. */ if (node->is_root || node->bone || this->mapping.el_to_object.contains(&node->element)) { continue; } @@ -253,9 +253,9 @@ void FbxImportContext::setup_hierarchy() if (node == nullptr) { continue; } - if (node->bone != nullptr) { - /* If this node is for a bone, do not try to setup object parenting for it - * (the object for bone bones is whole armature). */ + if (node->bone != nullptr && !node->bone->is_root) { + /* If this node is for a non-root bone, do not try to setup object parenting + * for it (the object for bone bones is whole armature). */ continue; } if (node->parent) { diff --git a/source/blender/io/fbx/importer/fbx_import_anim.cc b/source/blender/io/fbx/importer/fbx_import_anim.cc index 79ff76960b5..913c5cd787d 100644 --- a/source/blender/io/fbx/importer/fbx_import_anim.cc +++ b/source/blender/io/fbx/importer/fbx_import_anim.cc @@ -202,7 +202,7 @@ static void create_transform_curve_desc(const FbxElementMapping &mapping, bool is_bone = false; std::string group_name_str = get_fbx_name(anim.fbx_elem->name); const ufbx_node *fnode = ufbx_as_node(anim.fbx_elem); - if (fnode != nullptr && fnode->bone != nullptr) { + if (fnode != nullptr && fnode->bone != nullptr && !fnode->bone->is_root) { is_bone = true; group_name_str = mapping.node_to_name.lookup_default(fnode, ""); rna_prefix = std::string("pose.bones[\"") + group_name_str + "\"]."; @@ -255,7 +255,7 @@ static void create_transform_curve_data(const FbxElementMapping &mapping, bool is_bone = false; const ufbx_node *fnode = ufbx_as_node(anim.fbx_elem); ufbx_matrix bone_xform = ufbx_identity_matrix; - if (fnode != nullptr && fnode->bone != nullptr) { + if (fnode != nullptr && fnode->bone != nullptr && !fnode->bone->is_root) { is_bone = true; /* Bone transform curves need to be transformed to the bind transform @@ -268,9 +268,8 @@ static void create_transform_curve_data(const FbxElementMapping &mapping, if (!bone_at_scene_root) { Object *arm_obj = mapping.bone_to_armature.lookup_default(fnode, nullptr); if (arm_obj != nullptr) { - ufbx_matrix arm_to_world; - m44_to_matrix(arm_obj->runtime->object_to_world.ptr(), arm_to_world); - world_to_arm = ufbx_matrix_invert(&arm_to_world); + world_to_arm = mapping.armature_world_to_arm_pose_matrix.lookup_default( + arm_obj, ufbx_identity_matrix); } } diff --git a/source/blender/io/fbx/importer/fbx_import_armature.cc b/source/blender/io/fbx/importer/fbx_import_armature.cc index 49bd42f8df1..b51c7d61b6c 100644 --- a/source/blender/io/fbx/importer/fbx_import_armature.cc +++ b/source/blender/io/fbx/importer/fbx_import_armature.cc @@ -8,8 +8,8 @@ #include "BKE_action.hh" #include "BKE_armature.hh" +#include "BKE_lib_id.hh" #include "BKE_object.hh" -#include "BKE_object_types.hh" #include "BLI_math_vector.hh" @@ -75,11 +75,29 @@ Object *ArmatureImportContext::create_armature_for_node(const ufbx_node *node) read_custom_properties(node->props, obj->id, this->params.props_enum_as_string); } node_matrix_to_obj(node, obj, this->mapping); + + /* Record world to fbx node matrix for the armature object. */ + ufbx_matrix world_to_arm = ufbx_matrix_invert(&node->node_to_world); + this->mapping.armature_world_to_arm_node_matrix.add(obj, world_to_arm); + + /* Record world to posed root node matrix. */ + if (node->bind_pose && node->bind_pose->is_bind_pose) { + for (const ufbx_bone_pose &pose : node->bind_pose->bone_poses) { + if (pose.bone_node == node) { + world_to_arm = ufbx_matrix_invert(&pose.bone_to_world); + break; + } + } + } + this->mapping.armature_world_to_arm_pose_matrix.add(obj, world_to_arm); } else { /* For armatures created at root, make them have the same rotation/scale * as done by ufbx for all regular nodes. */ ufbx_matrix_to_obj(this->mapping.global_conv_matrix, obj); + ufbx_matrix world_to_arm = ufbx_matrix_invert(&this->mapping.global_conv_matrix); + this->mapping.armature_world_to_arm_pose_matrix.add(obj, world_to_arm); + this->mapping.armature_world_to_arm_node_matrix.add(obj, world_to_arm); } return obj; } @@ -94,40 +112,47 @@ void ArmatureImportContext::create_armature_bones(const ufbx_node *node, { bArmature *arm = static_cast(arm_obj->data); - EditBone *bone = ED_armature_ebone_add(arm, get_fbx_name(node->name, "Bone")); - this->mapping.node_to_name.add(node, bone->name); arm_bones.add(node); /* For all bone nodes, record the whole armature as the owning object. */ this->mapping.el_to_object.add(&node->element, arm_obj); - bone->flag |= BONE_SELECTED; - bone->parent = parent_bone; - if (node->inherit_mode == UFBX_INHERIT_MODE_IGNORE_PARENT_SCALE) { - bone->inherit_scale_mode = BONE_INHERIT_SCALE_NONE; + + ufbx_matrix bone_mtx = ufbx_identity_matrix; + EditBone *bone = nullptr; + if (node->bone == nullptr || node->bone->is_root) { + /* For root bone, the armature object itself is created, so it will not have the EditBone. */ + this->mapping.node_to_name.add(node, BKE_id_name(arm_obj->id)); } - - this->mapping.bone_to_armature.add(node, arm_obj); - + else { + /* For regular non-root bones, create an EditBone. */ + bone = ED_armature_ebone_add(arm, get_fbx_name(node->name, "Bone")); + this->mapping.node_to_name.add(node, bone->name); + bone->flag |= BONE_SELECTED; + bone->parent = parent_bone; + if (node->inherit_mode == UFBX_INHERIT_MODE_IGNORE_PARENT_SCALE) { + bone->inherit_scale_mode = BONE_INHERIT_SCALE_NONE; + } #ifdef FBX_DEBUG_PRINT - fprintf(g_debug_file, - "create BONE %s (parent %s) parent_mtx:\n", - node->name.data, - parent_bone ? parent_bone->name : ""); - print_matrix(parent_mtx); + fprintf(g_debug_file, + "create BONE %s (parent %s) parent_mtx:\n", + node->name.data, + parent_bone ? parent_bone->name : ""); + print_matrix(parent_mtx); #endif - const ufbx_matrix *bind_mtx = this->mapping.bone_to_bind_matrix.lookup_ptr(node); - BLI_assert_msg(bind_mtx, "fbx: did not find bind matrix for bone"); - ufbx_matrix bone_mtx = bind_mtx ? *bind_mtx : ufbx_identity_matrix; - -#ifdef FBX_DEBUG_PRINT - // fprintf(g_debug_file, " local_bind_mtx:\n"); - // print_matrix(bone_mtx); -#endif + const ufbx_matrix *bind_mtx = this->mapping.bone_to_bind_matrix.lookup_ptr(node); + BLI_assert_msg(bind_mtx, "fbx: did not find bind matrix for bone"); + if (bind_mtx != nullptr) { + bone_mtx = *bind_mtx; + } + } bone_mtx = ufbx_matrix_mul(&world_to_arm, &bone_mtx); bone_mtx.cols[0] = ufbx_vec3_normalize(bone_mtx.cols[0]); bone_mtx.cols[1] = ufbx_vec3_normalize(bone_mtx.cols[1]); bone_mtx.cols[2] = ufbx_vec3_normalize(bone_mtx.cols[2]); + + this->mapping.bone_to_armature.add(node, arm_obj); + #ifdef FBX_DEBUG_PRINT fprintf(g_debug_file, " bone_mtx:\n"); print_matrix(bone_mtx); @@ -177,31 +202,36 @@ void ArmatureImportContext::create_armature_bones(const ufbx_node *node, /* Zero length bones are automatically collapsed into their parent when you leave edit mode, * so enforce a minimum length. */ bone_size = math::max(bone_size, 0.01f); - bone->tail[0] = 0.0f; - bone->tail[1] = bone_size; - bone->tail[2] = 0.0f; this->mapping.bone_to_length.add(node, bone_size); - /* Set bone matrix. */ - float bone_matrix[4][4]; - matrix_to_m44(bone_mtx, bone_matrix); - ED_armature_ebone_from_mat4(bone, bone_matrix); + if (bone != nullptr) { + bone->tail[0] = 0.0f; + bone->tail[1] = bone_size; + bone->tail[2] = 0.0f; + /* Set bone matrix. */ + float bone_matrix[4][4]; + matrix_to_m44(bone_mtx, bone_matrix); + ED_armature_ebone_from_mat4(bone, bone_matrix); + } + #ifdef FBX_DEBUG_PRINT - fprintf(g_debug_file, - " length %.3f head (%.3f %.3f %.3f) tail (%.3f %.3f %.3f)\n", - adjf(bone_size), - adjf(bone->head[0]), - adjf(bone->head[1]), - adjf(bone->head[2]), - adjf(bone->tail[0]), - adjf(bone->tail[1]), - adjf(bone->tail[2])); + if (bone != nullptr) { + fprintf(g_debug_file, + " length %.3f head (%.3f %.3f %.3f) tail (%.3f %.3f %.3f)\n", + adjf(bone_size), + adjf(bone->head[0]), + adjf(bone->head[1]), + adjf(bone->head[2]), + adjf(bone->tail[0]), + adjf(bone->tail[1]), + adjf(bone->tail[2])); + } #endif /* Mark bone as connected to parent if head approximately in the same place as parent tail, in * both rest pose and current pose. */ if (parent_bone != nullptr) { - float3 self_head_rest(bone->head); + float3 self_head_rest = bone ? float3(bone->head) : float3(0); float3 par_tail_rest(parent_bone->tail); const float connect_dist = 1.0e-4f; const float connect_dist_sq = connect_dist * connect_dist; @@ -218,7 +248,7 @@ void ArmatureImportContext::create_armature_bones(const ufbx_node *node, float3 par_tail_cur(par_tail_cur_u.x, par_tail_cur_u.y, par_tail_cur_u.z); float dist_sq_cur = math::distance_squared(self_head_cur, par_tail_cur); - if (dist_sq_cur < connect_dist_sq) { + if (dist_sq_cur < connect_dist_sq && bone != nullptr) { /* Connected in both cases. */ bone->flag |= BONE_CONNECTED; } @@ -251,10 +281,10 @@ void ArmatureImportContext::create_armature_bones(const ufbx_node *node, void ArmatureImportContext::find_armatures(const ufbx_node *node) { - /* Need to create armature if we are root bone, or any child is bone. */ + /* Need to create armature if we are root bone, or any child is a non-root bone. */ bool needs_arm = false; for (const ufbx_node *fchild : node->children) { - if (fchild->attrib_type == UFBX_ELEMENT_BONE) { + if (fchild->bone && !fchild->bone->is_root) { needs_arm = true; break; } @@ -274,17 +304,22 @@ void ArmatureImportContext::find_armatures(const ufbx_node *node) } /* Create bones in edit mode. */ - ufbx_matrix arm_to_world; - m44_to_matrix(arm_obj->runtime->object_to_world.ptr(), arm_to_world); - ufbx_matrix world_to_arm = ufbx_matrix_invert(&arm_to_world); + ufbx_matrix world_to_arm = this->mapping.armature_world_to_arm_pose_matrix.lookup_default( + arm_obj, ufbx_identity_matrix); Set arm_bones; bArmature *arm = static_cast(arm_obj->data); ED_armature_to_edit(arm); - for (const ufbx_node *fchild : node->children) { - if (fchild->attrib_type == UFBX_ELEMENT_BONE) { - create_armature_bones( - fchild, arm_obj, arm_bones, nullptr, ufbx_identity_matrix, world_to_arm, 1.0f); + if (node->bone && node->bone->is_root) { + create_armature_bones( + node, arm_obj, arm_bones, nullptr, ufbx_identity_matrix, world_to_arm, 1.0f); + } + else { + for (const ufbx_node *fchild : node->children) { + if (fchild->bone) { + create_armature_bones( + fchild, arm_obj, arm_bones, nullptr, ufbx_identity_matrix, world_to_arm, 1.0f); + } } } ED_armature_from_edit(&this->bmain, arm); @@ -327,9 +362,9 @@ void ArmatureImportContext::find_armatures(const ufbx_node *node) } } - /* Recurse into non-bone children. */ + /* Recurse into non-bone or root-bone children. */ for (const ufbx_node *fchild : node->children) { - if (fchild->attrib_type != UFBX_ELEMENT_BONE) { + if (fchild->bone == nullptr || fchild->bone->is_root) { this->find_armatures(fchild); } } diff --git a/source/blender/io/fbx/importer/fbx_import_mesh.cc b/source/blender/io/fbx/importer/fbx_import_mesh.cc index 69cb7560d64..3aad87a8c0a 100644 --- a/source/blender/io/fbx/importer/fbx_import_mesh.cc +++ b/source/blender/io/fbx/importer/fbx_import_mesh.cc @@ -14,7 +14,6 @@ #include "BKE_modifier.hh" #include "BKE_object.hh" #include "BKE_object_deform.h" -#include "BKE_object_types.hh" #include "BLI_color.hh" #include "BLI_listbase.h" @@ -34,6 +33,8 @@ namespace blender::io::fbx { +static constexpr const char *temp_custom_normals_name = "fbx_temp_custom_normals"; + static const ufbx_skin_deformer *get_skin_from_mesh(const ufbx_mesh *mesh) { if (mesh->skin_deformers.count > 0) { @@ -253,18 +254,23 @@ static void import_colors(const ufbx_mesh *fmesh, } } -static void import_normals(const ufbx_mesh *fmesh, Mesh *mesh) +static bool import_normals_into_temp_attribute(const ufbx_mesh *fmesh, + Mesh *mesh, + bke::MutableAttributeAccessor &attributes) { - if (fmesh->vertex_normal.exists) { - BLI_assert(fmesh->vertex_normal.indices.count == mesh->corners_num); - Array normals(mesh->corners_num); - for (int i = 0; i < mesh->corners_num; i++) { - int val_idx = fmesh->vertex_normal.indices[i]; - const ufbx_vec3 &normal = fmesh->vertex_normal.values[val_idx]; - normals[i] = float3(normal.x, normal.y, normal.z); - } - bke::mesh_set_custom_normals(*mesh, normals); + if (!fmesh->vertex_normal.exists) { + return false; } + bke::SpanAttributeWriter normals = attributes.lookup_or_add_for_write_only_span( + temp_custom_normals_name, bke::AttrDomain::Corner); + BLI_assert(fmesh->vertex_normal.indices.count == mesh->corners_num); + BLI_assert(fmesh->vertex_normal.indices.count == normals.span.size()); + for (int i = 0; i < mesh->corners_num; i++) { + int val_idx = fmesh->vertex_normal.indices[i]; + const ufbx_vec3 &normal = fmesh->vertex_normal.values[val_idx]; + normals.span[i] = float3(normal.x, normal.y, normal.z); + } + return true; } static void import_skin_vertex_groups(const ufbx_mesh *fmesh, @@ -368,8 +374,12 @@ void import_meshes(Main &bmain, if (params.vertex_colors != eFBXVertexColorMode::None) { import_colors(fmesh, mesh, attributes, attr_owner, params.vertex_colors); } + bool has_custom_normals = false; if (params.use_custom_normals) { - import_normals(fmesh, mesh); + /* Mesh validation below can alter the mesh, so we first write custom normals + * into a temporary custom corner domain attribute, and then re-apply that + * data as custom normals after the validation. */ + has_custom_normals = import_normals_into_temp_attribute(fmesh, mesh, attributes); } const ufbx_skin_deformer *skin = get_skin_from_mesh(fmesh); if (skin != nullptr) { @@ -384,6 +394,16 @@ void import_meshes(Main &bmain, #endif BKE_mesh_validate(mesh, verbose_validate, false); } + + if (has_custom_normals) { + /* Actually set custom normals after the validation. */ + bke::SpanAttributeWriter normals = + attributes.lookup_or_add_for_write_only_span(temp_custom_normals_name, + bke::AttrDomain::Corner); + bke::mesh_set_custom_normals(*mesh, normals.span); + attributes.remove(temp_custom_normals_name); + } + meshes[index] = mesh; }); @@ -449,14 +469,25 @@ void import_meshes(Main &bmain, obj->parent = parent_to_arm; /* We are setting mesh parent to the armature, so set the matrix that is - * armature-local. */ - ufbx_matrix arm_to_world; - m44_to_matrix(parent_to_arm->runtime->object_to_world.ptr(), arm_to_world); - ufbx_matrix world_to_arm = ufbx_matrix_invert(&arm_to_world); - ufbx_matrix mtx = ufbx_matrix_mul(&node->node_to_world, &node->geometry_to_node); - mtx = ufbx_matrix_mul(&world_to_arm, &mtx); + * armature-local. Note that the matrix needs to be relative to the FBX + * node matrix (not the root bone pose matrix). */ + ufbx_matrix world_to_arm = mapping.armature_world_to_arm_node_matrix.lookup_default( + parent_to_arm, ufbx_identity_matrix); + ufbx_matrix world_to_arm_pose = mapping.armature_world_to_arm_pose_matrix.lookup_default( + parent_to_arm, ufbx_identity_matrix); + + ufbx_matrix mtx = ufbx_matrix_mul(&world_to_arm, &node->geometry_to_world); ufbx_matrix_to_obj(mtx, obj); matrix_already_set = true; + + /* Setup parent inverse matrix of the mesh, to account for the mesh possibly being in + * different bind pose than what the node is at. */ + ufbx_matrix mtx_inv = ufbx_matrix_invert(&mtx); + ufbx_matrix mtx_world = mapping.bone_to_bind_matrix.lookup_default( + node, node->geometry_to_world); + ufbx_matrix mtx_parent_inverse = ufbx_matrix_mul(&mtx_world, &mtx_inv); + mtx_parent_inverse = ufbx_matrix_mul(&world_to_arm_pose, &mtx_parent_inverse); + matrix_to_m44(mtx_parent_inverse, obj->parentinv); } } diff --git a/source/blender/io/fbx/importer/fbx_import_util.cc b/source/blender/io/fbx/importer/fbx_import_util.cc index baa9304ca4c..1d05d42ebf0 100644 --- a/source/blender/io/fbx/importer/fbx_import_util.cc +++ b/source/blender/io/fbx/importer/fbx_import_util.cc @@ -43,22 +43,6 @@ void matrix_to_m44(const ufbx_matrix &src, float dst[4][4]) dst[3][3] = 1.0f; } -void m44_to_matrix(const float src[4][4], ufbx_matrix &dst) -{ - dst.m00 = src[0][0]; - dst.m01 = src[1][0]; - dst.m02 = src[2][0]; - dst.m03 = src[3][0]; - dst.m10 = src[0][1]; - dst.m11 = src[1][1]; - dst.m12 = src[2][1]; - dst.m13 = src[3][1]; - dst.m20 = src[0][2]; - dst.m21 = src[1][2]; - dst.m22 = src[2][2]; - dst.m23 = src[3][2]; -} - ufbx_matrix calc_bone_pose_matrix(const ufbx_transform &local_xform, const ufbx_node &node, const ufbx_matrix &local_bind_inv_matrix) diff --git a/source/blender/io/fbx/importer/fbx_import_util.hh b/source/blender/io/fbx/importer/fbx_import_util.hh index 1efcf8d33bc..7c27bef65af 100644 --- a/source/blender/io/fbx/importer/fbx_import_util.hh +++ b/source/blender/io/fbx/importer/fbx_import_util.hh @@ -28,6 +28,13 @@ struct FbxElementMapping { Map el_to_shape_key; Map mat_to_material; Map bone_to_armature; + + /* For the armatures we create, for different use cases we need transform + * from world space to the root bone, either in posed transform or in + * node transform. */ + Map armature_world_to_arm_pose_matrix; + Map armature_world_to_arm_node_matrix; + /* Mapping of ufbx node to object name used within blender. If names are too long * or duplicate, they might not match what was in FBX file. */ Map node_to_name; @@ -72,7 +79,6 @@ struct FbxElementMapping { }; void matrix_to_m44(const ufbx_matrix &src, float dst[4][4]); -void m44_to_matrix(const float src[4][4], ufbx_matrix &dst); void ufbx_matrix_to_obj(const ufbx_matrix &mtx, Object *obj); void node_matrix_to_obj(const ufbx_node *node, Object *obj, const FbxElementMapping &mapping); void read_custom_properties(const ufbx_props &props, ID &id, bool enums_as_strings); diff --git a/tests/files/io_tests/fbx/issue127388_imported_bones_too_large.fbx b/tests/files/io_tests/fbx/issue127388_imported_bones_too_large.fbx index 77062bae7d5..ce1e9878359 100644 --- a/tests/files/io_tests/fbx/issue127388_imported_bones_too_large.fbx +++ b/tests/files/io_tests/fbx/issue127388_imported_bones_too_large.fbx @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f419b3a79e691da3e79ece750a4f41cf516cbadce9467312c3b2053862290c1 -size 896992 +oid sha256:9e8c52f093c480229b90edb1d5714ea412844d3d774abe618d4f941291717a25 +size 572624 diff --git a/tests/files/io_tests/fbx/issue43141_skinned_rabbit.fbx b/tests/files/io_tests/fbx/issue43141_skinned_rabbit.fbx new file mode 100644 index 00000000000..0d7b7a48681 --- /dev/null +++ b/tests/files/io_tests/fbx/issue43141_skinned_rabbit.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c894302f7ea2663739d0e602c3cababb5d78d62ab23ac9d3af1ba6086808b3b +size 283824 diff --git a/tests/files/io_tests/fbx/reference/bl42_various_objects.txt b/tests/files/io_tests/fbx/reference/bl42_various_objects.txt index d4a36a1fee9..d18952bfc05 100644 --- a/tests/files/io_tests/fbx/reference/bl42_various_objects.txt +++ b/tests/files/io_tests/fbx/reference/bl42_various_objects.txt @@ -445,9 +445,13 @@ - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - Obj 'Suzanne' MESH data:'Suzanne' par:'SuzanneArmWParent' - - pos -4.220, 3.645, -2.342 - - rot -0.822, 0.009, 0.338 (XYZ) - - scl 1.029, 1.288, 1.277 + - matrix_parent_inverse: + 1.000 0.000 0.000 0.000 + 0.000 1.006 0.058 0.000 + 0.000 0.068 1.006 0.000 + - pos -0.980, 0.243, 0.731 + - rot -0.365, -0.168, 0.285 (XYZ) + - scl 0.994, 1.040, 0.965 - 8 vertex groups - 'Bone' 'Bone.001' 'Bone.004' 'Bone.002' 'Bone.003' 'Bone.005' 'Bone.006' 'Bone.007' - 1 modifiers @@ -2510,58 +2514,58 @@ 0.791 -0.300 -0.534 0.571 - Armature 'SuzanneArmWParent' 13 bones - - bone 'Bone' h:(-4.070, 2.798, -3.177) t:(-4.292, 3.400, -3.563) radius h:0.100 t:0.050 - 0.947 -0.296 0.124 -4.070 - 0.177 0.804 0.568 2.798 - -0.268 -0.516 0.814 -3.177 - - bone 'Bone.001' parent:'Bone' h:(0.000, 0.175, 0.000) t:(-0.494, -0.030, -0.478) radius h:0.100 t:0.050 - -0.567 -0.651 -0.505 -4.344 - 0.651 -0.730 0.210 3.541 - -0.505 -0.210 0.837 -3.653 - - bone 'Bone.002' parent:'Bone' h:(0.000, 0.175, 0.000) t:(0.771, 0.079, -0.068) radius h:0.100 t:0.050 - 0.001 0.962 0.274 -4.344 - -0.995 0.027 -0.094 3.541 - -0.098 -0.272 0.957 -3.653 - - bone 'Bone.003' parent:'Bone.002' h:(0.000, 0.014, 0.000) t:(-0.268, 0.517, -0.622) radius h:0.100 t:0.050 - 0.638 0.372 0.674 -3.581 - -0.765 0.401 0.503 3.562 - -0.083 -0.837 0.541 -3.869 + - bone 'Bone' h:(-0.830, -0.042, -0.111) t:(-1.104, 0.654, -0.150) radius h:0.100 t:0.050 + 0.922 -0.365 0.129 -0.830 + 0.353 0.929 0.107 -0.042 + -0.159 -0.053 0.986 -0.111 + - bone 'Bone.001' parent:'Bone' h:(0.000, 0.000, 0.000) t:(-0.559, -0.131, -0.430) connect radius h:0.100 t:0.050 + -0.519 -0.729 -0.446 -1.104 + 0.847 -0.510 -0.153 0.654 + -0.116 -0.457 0.882 -0.150 + - bone 'Bone.002' parent:'Bone' h:(0.000, 0.000, 0.000) t:(0.756, -0.189, -0.024) connect radius h:0.100 t:0.050 + 0.002 0.978 0.206 -1.104 + -0.841 0.114 -0.529 0.654 + -0.541 -0.172 0.823 -0.150 + - bone 'Bone.003' parent:'Bone.002' h:(0.000, 0.000, 0.000) t:(-0.279, 0.531, -0.594) connect radius h:0.100 t:0.050 + 0.615 0.470 0.634 -0.341 + -0.681 0.722 0.126 0.743 + -0.398 -0.509 0.763 -0.285 - bone 'Bone.003_end' parent:'Bone.003' h:(0.000, 0.000, 0.000) t:(0.000, 0.844, 0.000) connect radius h:0.100 t:0.050 - 0.638 0.372 0.674 -3.267 - -0.765 0.401 0.503 3.901 - -0.083 -0.837 0.541 -4.575 - - bone 'Bone.004' parent:'Bone.001' h:(0.000, 0.086, 0.000) t:(0.656, 0.476, 0.038) radius h:0.100 t:0.050 - 0.425 -0.844 -0.327 -4.867 - 0.813 0.197 0.548 2.955 - -0.398 -0.499 0.769 -3.822 + 0.615 0.470 0.634 0.055 + -0.681 0.722 0.126 1.352 + -0.398 -0.509 0.763 -0.714 + - bone 'Bone.004' parent:'Bone.001' h:(0.000, 0.000, 0.000) t:(0.598, 0.469, 0.084) connect radius h:0.100 t:0.050 + 0.348 -0.903 -0.253 -1.627 + 0.937 0.332 0.106 0.289 + -0.012 -0.274 0.962 -0.478 - bone 'Bone.004_end' parent:'Bone.004' h:(0.000, 0.000, 0.000) t:(0.000, 0.765, 0.000) connect radius h:0.100 t:0.050 - 0.425 -0.844 -0.327 -5.512 - 0.813 0.197 0.548 3.105 - -0.398 -0.499 0.769 -4.204 - - bone 'Bone.005' h:(-4.070, 2.798, -3.177) t:(-3.896, 1.896, -3.445) radius h:0.100 t:0.050 - -0.964 0.182 0.194 -4.070 - -0.227 -0.942 -0.245 2.798 - 0.138 -0.281 0.950 -3.177 + 0.348 -0.903 -0.253 -2.317 + 0.937 0.332 0.106 0.543 + -0.012 -0.274 0.962 -0.688 + - bone 'Bone.005' h:(-0.830, -0.042, -0.111) t:(-0.616, -0.731, -0.739) radius h:0.100 t:0.050 + -0.957 0.224 0.184 -0.830 + -0.290 -0.720 -0.630 -0.042 + -0.009 -0.657 0.754 -0.111 - bone 'Bone.005_end' parent:'Bone.005' h:(0.000, 0.000, 0.000) t:(0.000, 0.957, 0.000) connect radius h:0.100 t:0.050 - -0.964 0.182 0.194 -3.896 - -0.227 -0.942 -0.245 1.896 - 0.138 -0.281 0.950 -3.445 - - bone 'Bone.006' h:(-4.070, 2.798, -3.177) t:(-4.434, 3.031, -2.638) radius h:0.100 t:0.050 - 0.115 -0.527 0.842 -4.070 - 0.938 0.338 0.083 2.798 - -0.328 0.780 0.533 -3.177 + -0.957 0.224 0.184 -0.616 + -0.290 -0.720 -0.630 -0.731 + -0.009 -0.657 0.754 -0.739 + - bone 'Bone.006' h:(-0.830, -0.042, -0.111) t:(-1.270, -0.059, 0.422) radius h:0.100 t:0.050 + 0.109 -0.636 0.764 -0.830 + 0.987 -0.024 -0.160 -0.042 + 0.120 0.771 0.625 -0.111 - bone 'Bone.006_end' parent:'Bone.006' h:(0.000, 0.000, 0.000) t:(0.000, 0.691, 0.000) connect radius h:0.100 t:0.050 - 0.115 -0.527 0.842 -4.434 - 0.938 0.338 0.083 3.031 - -0.328 0.780 0.533 -2.638 - - bone 'Bone.007' h:(-4.070, 2.798, -3.177) t:(-3.901, 3.205, -2.693) radius h:0.100 t:0.050 - 0.941 0.259 -0.216 -4.070 - -0.334 0.622 -0.708 2.798 - -0.049 0.739 0.672 -3.177 + 0.109 -0.636 0.764 -1.270 + 0.987 -0.024 -0.160 -0.059 + 0.120 0.771 0.625 0.422 + - bone 'Bone.007' h:(-0.830, -0.042, -0.111) t:(-0.615, 0.123, 0.485) radius h:0.100 t:0.050 + 0.924 0.328 -0.196 -0.830 + -0.286 0.253 -0.924 -0.042 + -0.254 0.910 0.328 -0.111 - bone 'Bone.007_end' parent:'Bone.007' h:(0.000, 0.000, 0.000) t:(0.000, 0.654, 0.000) connect radius h:0.100 t:0.050 - 0.941 0.259 -0.216 -3.901 - -0.334 0.622 -0.708 3.205 - -0.049 0.739 0.672 -2.693 + 0.924 0.328 -0.196 -0.615 + -0.286 0.253 -0.924 0.123 + -0.254 0.910 0.328 0.485 ==== Images: 3 - Image 'checkerboard_emissive.png' 128x128 24bpp diff --git a/tests/files/io_tests/fbx/reference/issue127388_imported_bones_too_large.txt b/tests/files/io_tests/fbx/reference/issue127388_imported_bones_too_large.txt index 2725bbc363d..dfe9a39a55d 100644 --- a/tests/files/io_tests/fbx/reference/issue127388_imported_bones_too_large.txt +++ b/tests/files/io_tests/fbx/reference/issue127388_imported_bones_too_large.txt @@ -10,82 +10,8 @@ - (1.194, 3.672, 4.042) - (1.253, 4.011, 4.015) - (1.112, 3.574, 4.089) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (5394, -12489) - - (8210, -26096) - - (2708, 28364) - ... - - (8221, -18637) - - (2966, -22155) - - (11086, -7346) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.127, 0.069) - - (0.122, 0.091) - - (0.122, 0.069) - ... - - (0.388, 0.827) - - (0.412, 0.835) - - (0.380, 0.821) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 12=0.750 11=0.250 - 10=0.500 12=0.500 @@ -106,82 +32,8 @@ - (-0.901, 4.592, 2.943) - (-0.938, 4.660, 2.795) - (-0.964, 4.586, 2.809) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (1419, 22767) - - (28714, -7927) - - (8085, -10066) - ... - - (12428, -21714) - - (-32424, -6562) - - (30927, -23757) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.398, 0.117) - - (0.405, 0.119) - - (0.395, 0.110) - ... - - (0.275, 0.013) - - (0.271, 0.005) - - (0.266, 0.007) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 0=1.000 - 0=1.000 @@ -202,82 +54,8 @@ - (-0.264, 3.197, -1.639) - (-0.440, 3.145, -1.522) - (-0.337, 3.322, -1.490) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (0, 0) - - (0, 0) - - (3931, 3587) - ... - - (0, 0) - - (3342, 29135) - - (4893, -612) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.388, 0.483) - - (0.395, 0.481) - - (0.395, 0.474) - ... - - (0.627, 0.714) - - (0.627, 0.696) - - (0.634, 0.700) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 0=1.000 - 0=1.000 @@ -298,82 +76,8 @@ - (0.546, 2.963, 5.180) - (0.427, 3.080, 5.200) - (0.717, 3.476, 5.126) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (0, 0) - - (12383, -11833) - - (14137, -21509) - ... - - (10789, -21306) - - (14803, -11545) - - (12610, -23932) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.980, 0.091) - - (0.991, 0.091) - - (0.991, 0.054) - ... - - (0.999, 0.054) - - (0.991, 0.054) - - (0.999, 0.091) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 0=1.000 - 0=1.000 @@ -394,82 +98,8 @@ - (-0.453, 2.270, 5.321) - (-0.428, 2.220, 5.350) - (-0.407, 2.184, 5.383) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (0, 0) - - (0, 0) - - (0, 0) - ... - - (0, 0) - - (0, 0) - - (0, 0) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.262, 0.757) - - (0.268, 0.760) - - (0.261, 0.758) - ... - - (0.253, 0.754) - - (0.248, 0.754) - - (0.252, 0.755) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 0=1.000 - 0=1.000 @@ -490,82 +120,8 @@ - (-0.601, 2.689, 5.561) - (-0.574, 2.644, 5.437) - (-0.538, 2.548, 5.619) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (12036, -12092) - - (15546, -16164) - - (0, 0) - ... - - (0, 0) - - (0, 0) - - (0, 0) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.116, 0.750) - - (0.141, 0.747) - - (0.139, 0.737) - ... - - (0.097, 0.699) - - (0.096, 0.715) - - (0.109, 0.703) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 0=1.000 - 0=1.000 @@ -586,82 +142,8 @@ - (0.678, 1.069, -11.106) - (0.700, 1.042, -11.111) - (0.805, 1.156, -11.530) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (0, 0) - - (0, 0) - - (0, 0) - ... - - (13572, -10532) - - (13572, -24475) - - (0, 0) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.447, 0.505) - - (0.419, 0.525) - - (0.444, 0.501) - ... - - (0.418, 0.523) - - (0.392, 0.546) - - (0.419, 0.525) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 0=1.000 - 0=1.000 @@ -682,82 +164,8 @@ - (-2.630, 0.832, 3.592) - (-2.567, 0.834, 3.510) - (-2.543, 0.994, 3.528) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (4824, -2535) - - (0, 0) - - (3385, 23184) - ... - - (0, 0) - - (0, 0) - - (0, 0) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.761, 0.106) - - (0.763, 0.099) - - (0.773, 0.102) - ... - - (0.587, 0.024) - - (0.577, 0.027) - - (0.588, 0.036) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 1=1.000 - 1=1.000 @@ -778,82 +186,8 @@ - (2.322, 0.307, 0.785) - (2.331, 0.262, 0.774) - (2.330, 0.161, 0.846) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (14185, -16208) - - (0, 0) - - (12622, -16355) - ... - - (0, 0) - - (0, 0) - - (0, 0) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.257, 0.239) - - (0.276, 0.240) - - (0.276, 0.237) - ... - - (0.783, 0.136) - - (0.787, 0.134) - - (0.795, 0.139) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 12=1.000 - 12=1.000 @@ -874,82 +208,8 @@ - (-1.194, 3.672, 4.042) - (-1.112, 3.574, 4.089) - (-1.253, 4.011, 4.015) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (0, 0) - - (13032, -16755) - - (9334, -21899) - ... - - (8221, -14130) - - (11086, -25420) - - (2966, -10612) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.588, 0.113) - - (0.588, 0.116) - - (0.580, 0.113) - ... - - (0.388, 0.827) - - (0.380, 0.821) - - (0.412, 0.835) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 10=1.000 - 10=1.000 @@ -970,82 +230,8 @@ - (-0.368, 2.967, 5.495) - (-0.583, 2.792, 5.304) - (-0.545, 2.961, 5.191) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (0, 0) - - (18, -6512) - - (24, 32415) - ... - - (0, 0) - - (0, 0) - - (0, 0) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.193, 0.652) - - (0.198, 0.674) - - (0.179, 0.661) - ... - - (0.190, 0.690) - - (0.163, 0.687) - - (0.170, 0.673) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 4=1.000 - 4=1.000 @@ -1066,82 +252,8 @@ - (-2.527, 0.035, 4.175) - (-2.590, -0.013, 4.209) - (-2.842, 0.023, 4.178) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (28926, -16383) - - (14787, -17420) - - (0, 0) - ... - - (19769, -16429) - - (19043, -22783) - - (0, 0) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.582, 0.044) - - (0.577, 0.039) - - (0.575, 0.041) - ... - - (0.859, 0.009) - - (0.853, 0.010) - - (0.855, 0.013) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 5=1.000 - 5=1.000 @@ -1162,82 +274,8 @@ - (-0.633, 3.618, 0.059) - (-0.540, 3.836, 0.261) - (-0.473, 3.977, 0.406) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (13848, -27977) - - (10357, 16672) - - (6713, -15883) - ... - - (7844, -15271) - - (0, 0) - - (10901, -8338) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.174, 0.359) - - (0.198, 0.380) - - (0.173, 0.388) - ... - - (0.236, 0.498) - - (0.220, 0.496) - - (0.227, 0.512) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.993, 0.584) - - (0.963, 0.676) - - (0.908, 0.617) - ... - - (0.670, 0.934) - - (0.656, 0.884) - - (0.619, 0.925) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 0=1.000 - 0=1.000 @@ -1258,82 +296,8 @@ - (-1.299, 4.016, 1.743) - (-1.170, 4.293, 1.601) - (-1.173, 4.133, 1.553) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (0, 0) - - (0, 0) - - (0, 0) - ... - - (0, 0) - - (0, 0) - - (0, 0) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.856, 0.906) - - (0.855, 0.867) - - (0.835, 0.906) - ... - - (0.855, 0.867) - - (0.848, 0.906) - - (0.856, 0.906) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 2=1.000 - 2=1.000 @@ -1354,82 +318,8 @@ - (-0.436, 2.833, 1.461) - (-0.851, 2.769, 1.719) - (-0.919, 2.609, 1.947) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (0, 0) - - (0, 0) - - (0, 0) - ... - - (6970, -21461) - - (8646, -9948) - - (6047, -18333) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.672, 0.279) - - (0.681, 0.263) - - (0.675, 0.258) - ... - - (0.569, 0.191) - - (0.560, 0.241) - - (0.561, 0.214) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.157, 0.388) - - (0.130, 0.442) - - (0.154, 0.457) - ... - - (0.573, 0.679) - - (0.602, 0.512) - - (0.563, 0.568) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 2=0.750 1=0.250 - 1=0.500 2=0.500 @@ -1450,82 +340,8 @@ - (2.630, 0.832, 3.592) - (2.543, 0.994, 3.528) - (2.567, 0.834, 3.510) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (0, 0) - - (0, 0) - - (0, 0) - ... - - (0, 0) - - (0, 0) - - (0, 0) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.168, 0.513) - - (0.178, 0.527) - - (0.182, 0.524) - ... - - (0.571, 0.029) - - (0.571, 0.041) - - (0.560, 0.032) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 1=0.700 2=0.300 - 1=0.800 2=0.200 @@ -1546,82 +362,8 @@ - (-0.649, 4.547, 0.921) - (-0.590, 4.308, 1.164) - (-0.627, 4.366, 0.913) - - attr 'sharp_edge' BOOLEAN EDGE - - 0 0 0 0 0 ... 0 0 0 0 0 - attr 'material_index' INT FACE - 0 0 0 0 0 ... 0 0 0 0 0 - - attr 'custom_normal' INT16_2D CORNER - - (0, 0) - - (0, 0) - - (0, 0) - ... - - (0, 0) - - (0, 0) - - (0, 0) - - attr 'UVChannel_1' FLOAT2 CORNER - - (0.026, 0.994) - - (0.025, 0.955) - - (0.005, 0.994) - ... - - (0.005, 0.994) - - (0.026, 0.994) - - (0.025, 0.955) - - attr 'UVChannel_2' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_3' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_4' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_5' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_6' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_7' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - - attr 'UVChannel_8' FLOAT2 CORNER - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - ... - - (0.000, 0.000) - - (0.000, 0.000) - - (0.000, 0.000) - vertex groups: - 2=1.000 - 2=1.000 @@ -1632,10 +374,22 @@ - '(0200p,0200){hollow}body@2@128' ==== Objects: 19 -- Obj 'Armature' ARMATURE data:'Armature' +- Obj '(0)en_draber#1C6#0' ARMATURE data:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 1.571, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 + - posed bone '(10)drs-line_tail_04#1C0#0' + 0.981 0.000 0.196 -0.247 + 0.000 1.000 0.000 -0.001 + -0.196 0.000 0.981 -0.031 + - posed bone '(11)drs-line_tail_end#1C0#0' + 0.980 0.000 -0.197 0.066 + 0.000 1.000 0.000 0.001 + 0.197 0.000 0.980 0.971 + - posed bone '(9)drs-line_tail_03#1C0#0' + 1.000 0.000 0.001 -0.041 + 0.000 1.000 0.000 0.000 + -0.001 0.000 1.000 -0.013 - posed bone 'eff01#0#0' -0.625 0.000 -0.781 2.060 0.610 -0.625 -0.488 -1.994 @@ -1656,146 +410,146 @@ - pos 0.000, 0.000, 0.000 - rot 1.571, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 -- Obj 'mesh[0]_0_0_0_0#75#0' MESH data:'mesh[0]_0_0_0_0#75#0_mesh' par:'Armature' +- Obj 'mesh[0]_0_0_0_0#75#0' MESH data:'mesh[0]_0_0_0_0#75#0_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 16 vertex groups - '(1)hip_efce#1C0#0' '(2)spine#1C0#0' '(3)l_thigh#1C0#0' '(4)l_thigh_tw#1C0#0' '(7)drs-line_tail_01#1C0#0' ... '(17)neck01#1C0#0' '(21)jaw0#1C0#0' '(25)l_clavicle#1C0#0' '(40)l_upperarm_tw#1C0#0' '(69)l_calf#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[10]_1_1_1_1#78#5' MESH data:'mesh[10]_1_1_1_1#78#5_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[10]_1_1_1_1#78#5' MESH data:'mesh[10]_1_1_1_1#78#5_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 2 vertex groups - '(13)spine01#1C1#0' '(14)spine02#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[11]_0_0_0_0#79#1' MESH data:'mesh[11]_0_0_0_0#79#1_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[11]_0_0_0_0#79#1' MESH data:'mesh[11]_0_0_0_0#79#1_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 6 vertex groups - '(1)hip_efce#1C0#0' '(2)spine#1C0#0' '(58)rwing_put#1C0#0' '(59)drs-line_rwing_01#1C0#0' '(61)lwing_put#1C0#0' '(62)drs-line_lwing_01#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[12]_0_0_0_0#80#6' MESH data:'mesh[12]_0_0_0_0#80#6_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[12]_0_0_0_0#80#6' MESH data:'mesh[12]_0_0_0_0#80#6_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 1 vertex groups - '(18)head#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[13]_0_0_0_0#81#7' MESH data:'mesh[13]_0_0_0_0#81#7_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[13]_0_0_0_0#81#7' MESH data:'mesh[13]_0_0_0_0#81#7_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 1 vertex groups - '(18)head#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[14]_0_0_0_0#82#8' MESH data:'mesh[14]_0_0_0_0#82#8_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[14]_0_0_0_0#82#8' MESH data:'mesh[14]_0_0_0_0#82#8_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 1 vertex groups - '(18)head#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[15]_0_0_0_0#83#9' MESH data:'mesh[15]_0_0_0_0#83#9_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[15]_0_0_0_0#83#9' MESH data:'mesh[15]_0_0_0_0#83#9_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 1 vertex groups - '(10)drs-line_tail_04#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[16]_0_0_0_0#84#4' MESH data:'mesh[16]_0_0_0_0#84#4_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[16]_0_0_0_0#84#4' MESH data:'mesh[16]_0_0_0_0#84#4_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 4 vertex groups - '(42)r_upperarm#1C0#0' '(43)r_forearm#1C0#0' '(53)r_ko01#1C0#0' '(55)r_forearm_tw#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[1]_0_0_0_0#75#0' MESH data:'mesh[1]_0_0_0_0#75#0_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[1]_0_0_0_0#75#0' MESH data:'mesh[1]_0_0_0_0#75#0_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 16 vertex groups - '(25)l_clavicle#1C0#0' '(26)l_upperarm#1C0#0' '(27)l_forearm#1C0#0' '(28)l_hand_efhl#1C0#0' '(31)l_hito01#1C0#0' ... '(65)l_foot#1C0#0' '(66)l_toe_ko01#1C0#0' '(67)l_toe_naka01#1C0#0' '(68)l_toe_hito01#1C0#0' '(69)l_calf#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[2]_0_0_0_0#75#0' MESH data:'mesh[2]_0_0_0_0#75#0_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[2]_0_0_0_0#75#0' MESH data:'mesh[2]_0_0_0_0#75#0_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 16 vertex groups - '(1)hip_efce#1C0#0' '(5)r_thigh#1C0#0' '(6)r_thigh_tw#1C0#0' '(14)spine02#1C0#0' '(15)neck#1C0#0' ... '(35)l_kusuri01#1C0#0' '(37)l_ko01#1C0#0' '(38)l_ko02#1C0#0' '(41)r_clavicle#1C0#0' '(56)r_upperarm_tw#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[3]_0_0_0_0#75#0' MESH data:'mesh[3]_0_0_0_0#75#0_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[3]_0_0_0_0#75#0' MESH data:'mesh[3]_0_0_0_0#75#0_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 16 vertex groups - '(5)r_thigh#1C0#0' '(6)r_thigh_tw#1C0#0' '(15)neck#1C0#0' '(17)neck01#1C0#0' '(18)head#1C0#0' ... '(70)r_foot#1C0#0' '(71)r_toe_ko01#1C0#0' '(72)r_toe_naka01#1C0#0' '(73)r_toe_hito01#1C0#0' '(74)r_calf#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[4]_0_0_0_0#75#0' MESH data:'mesh[4]_0_0_0_0#75#0_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[4]_0_0_0_0#75#0' MESH data:'mesh[4]_0_0_0_0#75#0_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 16 vertex groups - '(41)r_clavicle#1C0#0' '(42)r_upperarm#1C0#0' '(43)r_forearm#1C0#0' '(44)r_hand_efhr#1C0#0' '(45)r_oya01#1C0#0' ... '(52)r_kusuri02#1C0#0' '(53)r_ko01#1C0#0' '(54)r_ko02#1C0#0' '(55)r_forearm_tw#1C0#0' '(56)r_upperarm_tw#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[5]_1_1_1_1#75#0' MESH data:'mesh[5]_1_1_1_1#75#0_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[5]_1_1_1_1#75#0' MESH data:'mesh[5]_1_1_1_1#75#0_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 2 vertex groups - '(1)hip_efce#1C0#0' '(2)spine#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[6]_0_0_0_0#76#2' MESH data:'mesh[6]_0_0_0_0#76#2_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[6]_0_0_0_0#76#2' MESH data:'mesh[6]_0_0_0_0#76#2_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 7 vertex groups - '(2)spine#1C0#0' '(13)spine01#1C1#0' '(14)spine02#1C0#0' '(15)neck#1C0#0' '(25)l_clavicle#1C0#0' '(40)l_upperarm_tw#1C0#0' '(56)r_upperarm_tw#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[7]_2_1_1_1#76#2' MESH data:'mesh[7]_2_1_1_1#76#2_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[7]_2_1_1_1#76#2' MESH data:'mesh[7]_2_1_1_1#76#2_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 6 vertex groups - '(2)spine#1C0#0' '(13)spine01#1C1#0' '(14)spine02#1C0#0' '(40)l_upperarm_tw#1C0#0' '(56)r_upperarm_tw#1C0#0' '(57)body01#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[8]_0_0_0_0#77#3' MESH data:'mesh[8]_0_0_0_0#77#3_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[8]_0_0_0_0#77#3' MESH data:'mesh[8]_0_0_0_0#77#3_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 4 vertex groups - '(26)l_upperarm#1C0#0' '(27)l_forearm#1C0#0' '(37)l_ko01#1C0#0' '(39)l_forearm_tw#1C0#0' - 1 modifiers - - ARMATURE 'Armature' -- Obj 'mesh[9]_0_0_0_0#78#5' MESH data:'mesh[9]_0_0_0_0#78#5_mesh' par:'Armature' + - ARMATURE '(0)en_draber#1C6#0' +- Obj 'mesh[9]_0_0_0_0#78#5' MESH data:'mesh[9]_0_0_0_0#78#5_mesh' par:'(0)en_draber#1C6#0' - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 - 5 vertex groups - '(2)spine#1C0#0' '(13)spine01#1C1#0' '(14)spine02#1C0#0' '(40)l_upperarm_tw#1C0#0' '(56)r_upperarm_tw#1C0#0' - 1 modifiers - - ARMATURE 'Armature' + - ARMATURE '(0)en_draber#1C6#0' ==== Materials: 3 - Mat '(0200p,0200){hollow}body@2@128' - - base color (1.000, 1.000, 1.000) tex:'en_draber_a_d.dds' (en_draber_a_d.dds) a:False + - base color (1.000, 1.000, 1.000) - specular ior 1.000 - specular tint (0.200, 0.200, 0.200) - roughness 0.553 @@ -1807,7 +561,7 @@ - backface False probe True shadow False - Mat '(0201p,0201){opaque}body_weak@2@0' - - base color (1.000, 1.000, 1.000) tex:'en_draber_a_d.dds' (en_draber_a_d.dds) a:False + - base color (1.000, 1.000, 1.000) - specular ior 1.000 - specular tint (0.200, 0.200, 0.200) - roughness 0.553 @@ -1819,7 +573,7 @@ - backface False probe True shadow False - Mat '(0201p,0201){opaque}weak@2@0' - - base color (1.000, 1.000, 1.000) tex:'en_draber_a_d.dds' (en_draber_a_d.dds) a:False + - base color (1.000, 1.000, 1.000) - specular ior 1.000 - specular tint (0.200, 0.200, 0.200) - roughness 0.553 @@ -1831,20 +585,16 @@ - backface False probe True shadow False ==== Armatures: 1 -- Armature 'Armature' 89 bones - - bone '(0)en_draber#1C6#0' h:(0.000, 0.000, 0.000) t:(0.000, 3.025, 0.000) radius h:0.100 t:0.050 - 1.000 0.000 0.000 0.000 - 0.000 1.000 0.000 0.000 - 0.000 0.000 1.000 0.000 - - bone '(1)hip_efce#1C0#0' parent:'(0)en_draber#1C6#0' h:(0.000, -0.590, -0.912) t:(0.785, -0.590, -0.912) radius h:0.100 t:0.050 +- Armature '(0)en_draber#1C6#0' 88 bones + - bone '(1)hip_efce#1C0#0' h:(0.000, 2.435, -0.912) t:(0.785, 2.435, -0.912) radius h:0.100 t:0.050 0.000 1.000 0.000 0.000 1.000 0.000 0.000 2.435 0.000 0.000 -1.000 -0.912 - - bone '(10)drs-line_tail_04#1C0#0' parent:'(9)drs-line_tail_03#1C0#0' h:(2.331, -2.332, 0.002) t:(2.331, 2.285, 0.002) radius h:0.100 t:0.050 - 0.000 1.000 0.000 -0.001 - 0.197 0.000 -0.980 0.279 - -0.980 0.000 -0.197 -7.334 - - bone '(11)drs-line_tail_end#1C0#0' parent:'(10)drs-line_tail_04#1C0#0' h:(4.617, -4.617, 0.000) t:(4.617, 0.000, 0.000) radius h:0.100 t:0.050 + - bone '(10)drs-line_tail_04#1C0#0' parent:'(9)drs-line_tail_03#1C0#0' h:(2.497, -2.497, 0.032) t:(2.497, 1.964, 0.032) radius h:0.100 t:0.050 + 0.000 1.000 0.000 0.000 + 0.000 0.000 -1.000 0.250 + -1.000 0.000 0.000 -7.500 + - bone '(11)drs-line_tail_end#1C0#0' parent:'(10)drs-line_tail_04#1C0#0' h:(4.360, -4.461, -0.939) t:(4.361, -0.001, -0.938) radius h:0.100 t:0.050 0.000 1.000 0.000 -0.001 0.197 0.000 -0.980 1.189 -0.980 0.000 -0.197 -11.860 @@ -2076,11 +826,11 @@ 0.635 0.405 -0.658 5.409 0.535 -0.845 -0.003 7.713 -0.557 -0.350 -0.753 -5.440 - - bone '(64)attach#1C0#0' parent:'(0)en_draber#1C6#0' h:(0.000, -3.025, 9.000) t:(0.000, 0.000, 9.000) radius h:0.100 t:0.050 + - bone '(64)attach#1C0#0' h:(0.000, 0.000, 9.000) t:(0.000, 3.025, 9.000) radius h:0.100 t:0.050 1.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 1.000 9.000 - - bone '(65)l_foot#1C0#0' parent:'(0)en_draber#1C6#0' h:(1.375, -2.062, -0.537) t:(0.376, -2.062, 0.117) radius h:0.100 t:0.050 + - bone '(65)l_foot#1C0#0' h:(1.375, 0.962, -0.537) t:(0.376, 0.962, 0.117) radius h:0.100 t:0.050 -0.281 -0.837 -0.470 1.375 -0.858 0.000 0.513 0.962 -0.430 0.547 -0.718 -0.537 @@ -2104,7 +854,7 @@ 0.000 1.000 0.000 0.000 -0.671 0.000 -0.742 2.000 -0.742 0.000 0.671 -1.723 - - bone '(70)r_foot#1C0#0' parent:'(0)en_draber#1C6#0' h:(-1.375, -2.062, -0.537) t:(-2.342, -2.062, -1.170) radius h:0.100 t:0.050 + - bone '(70)r_foot#1C0#0' h:(-1.375, 0.962, -0.537) t:(-2.342, 0.962, -1.170) radius h:0.100 t:0.050 0.281 -0.837 0.470 -1.375 -0.858 0.000 0.513 0.962 -0.429 -0.548 -0.718 -0.537 @@ -2124,7 +874,7 @@ 0.464 -0.808 0.363 -1.389 -0.639 -0.021 0.769 1.005 -0.614 -0.589 -0.526 -0.515 - - bone '(75)draber_mdl#1C6#1000' parent:'(0)en_draber#1C6#0' h:(0.000, -3.025, 0.000) t:(0.000, -3.015, 0.000) radius h:0.100 t:0.050 + - bone '(75)draber_mdl#1C6#1000' h:(0.000, 0.000, 0.000) t:(0.000, 0.010, 0.000) radius h:0.100 t:0.050 1.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 1.000 0.000 @@ -2168,7 +918,7 @@ 1.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 1.000 0.000 - - bone '(9)drs-line_tail_03#1C0#0' parent:'(8)drs-line_tail_02#1C0#0' h:(2.043, -2.043, 0.002) t:(2.043, 0.288, 0.002) radius h:0.100 t:0.050 + - bone '(9)drs-line_tail_03#1C0#0' parent:'(8)drs-line_tail_02#1C0#0' h:(2.043, -2.043, 0.002) t:(2.043, 0.454, 0.002) radius h:0.100 t:0.050 0.000 1.000 0.000 -0.001 0.005 0.000 -1.000 0.270 -1.000 0.000 -0.005 -5.003 @@ -2189,6 +939,3 @@ -0.837 0.000 -0.548 -1.444 0.000 -1.000 0.000 0.277 -==== Images: 1 -- Image 'en_draber_a_d.dds' 0x0 0bpp - diff --git a/tests/files/io_tests/fbx/reference/issue43141_skinned_rabbit.txt b/tests/files/io_tests/fbx/reference/issue43141_skinned_rabbit.txt new file mode 100644 index 00000000000..e7e39f687a4 --- /dev/null +++ b/tests/files/io_tests/fbx/reference/issue43141_skinned_rabbit.txt @@ -0,0 +1,387 @@ +==== Meshes: 1 +- Mesh 'Mesh' vtx:517 face:1022 loop:3066 edge:1536 + - 2 3 1 1 0 ... 235 478 478 233 234 + - 0/1 0/2 8/9 8/10 16/17 ... 7/287 7/395 199/453 199/455 199/461 + - attr 'position' FLOAT_VECTOR POINT + - (-0.540, -0.735, -0.314) + - (-0.584, -0.373, -0.289) + - (-0.500, -0.569, -0.051) + ... + - (0.104, -1.180, 0.138) + - (0.016, 1.165, -0.265) + - (0.024, 1.181, -0.230) + - vertex groups: + - 0=1.000 + - 0=1.000 + - 2=1.000 + - 2=1.000 + - 2=1.000 + +==== Objects: 2 +- Obj 'Bip001' ARMATURE data:'Bip001' + - pos 0.000, 8.048, 8.117 + - rot 0.000, 1.480, -1.571 (XYZ) + - scl 0.025, 0.025, 0.025 + - posed bone 'Bip001 Head' + 0.996 0.070 -0.048 0.542 + -0.070 0.997 -0.012 -0.068 + 0.047 0.015 0.999 0.000 + - posed bone 'Bip001 L Calf' + 0.757 0.654 0.000 0.000 + -0.654 0.757 0.000 0.000 + 0.000 0.000 1.000 0.000 + - posed bone 'Bip001 L Clavicle' + 0.992 0.000 -0.127 8.624 + 0.000 1.000 0.000 0.000 + 0.127 0.000 0.992 1.640 + - posed bone 'Bip001 L Foot' + 0.540 -0.841 0.040 0.000 + 0.837 0.531 -0.133 0.000 + 0.090 0.105 0.990 0.000 + - posed bone 'Bip001 L Forearm' + 0.996 0.094 0.000 0.000 + -0.094 0.996 0.000 0.000 + 0.000 0.000 1.000 0.000 + - posed bone 'Bip001 L Hand' + 0.947 0.320 0.015 0.000 + -0.319 0.947 -0.045 0.000 + -0.028 0.038 0.999 0.000 + - posed bone 'Bip001 L HorseLink' + 0.869 0.494 0.000 0.000 + -0.494 0.869 0.000 0.000 + 0.000 0.000 1.000 0.000 + - posed bone 'Bip001 L Thigh' + 0.977 -0.214 0.008 17.106 + 0.213 0.977 0.029 -3.535 + -0.014 -0.027 1.000 -2.016 + - posed bone 'Bip001 L UpperArm' + 0.951 -0.308 -0.030 0.000 + 0.307 0.951 -0.035 0.000 + 0.040 0.024 0.999 0.000 + - posed bone 'Bip001 Neck' + 0.992 -0.126 0.000 0.006 + 0.126 0.992 0.000 -0.134 + 0.000 0.000 1.000 0.000 + - posed bone 'Bip001 R Calf' + 0.757 0.654 0.000 0.000 + -0.654 0.757 0.000 0.000 + 0.000 0.000 1.000 0.000 + - posed bone 'Bip001 R Clavicle' + 0.992 0.000 0.127 8.624 + 0.000 1.000 0.000 0.000 + -0.127 0.000 0.992 -1.640 + - posed bone 'Bip001 R Foot' + 0.540 -0.841 -0.040 0.000 + 0.837 0.531 0.133 0.000 + -0.090 -0.105 0.990 0.000 + - posed bone 'Bip001 R Forearm' + 0.997 0.079 0.000 0.000 + -0.079 0.997 0.000 0.000 + 0.000 0.000 1.000 0.000 + - posed bone 'Bip001 R Hand' + 0.949 0.315 -0.012 0.000 + -0.315 0.948 0.049 0.000 + 0.027 -0.043 0.999 0.000 + - posed bone 'Bip001 R HorseLink' + 0.869 0.494 0.000 0.000 + -0.494 0.869 0.000 0.000 + 0.000 0.000 1.000 0.000 + - posed bone 'Bip001 R Thigh' + 0.977 -0.214 -0.008 17.106 + 0.213 0.977 -0.029 -3.536 + 0.014 0.027 1.000 2.016 + - posed bone 'Bip001 R UpperArm' + 0.951 -0.304 0.063 0.000 + 0.302 0.953 0.033 0.000 + -0.070 -0.012 0.997 0.000 + - posed bone 'Bip001 Spine' + 0.990 -0.144 0.000 0.015 + 0.144 0.990 0.000 0.001 + 0.000 0.000 1.000 0.000 + - posed bone 'Bip001 Spine1' + 0.998 0.063 0.000 -0.008 + -0.063 0.998 0.000 0.000 + 0.000 0.000 1.000 0.000 + - posed bone 'Bone001' + 0.880 0.309 -0.361 0.000 + -0.410 0.878 -0.249 0.000 + 0.240 0.367 0.899 0.000 + - posed bone 'Bone006' + 0.852 0.342 -0.397 0.000 + -0.443 0.875 -0.196 0.000 + 0.280 0.343 0.896 0.000 + - anim act:Take 001 slot:OBBip001 blend:REPLACE drivers:0 +- Obj 'obj4aa7ee80_obj' MESH data:'Mesh' par:'Bip001' + - matrix_parent_inverse: + 0.116 0.000 -0.993 221.665 + 0.000 1.000 0.000 0.000 + 0.993 0.000 0.116 245.374 + - pos -39.850, 4.381, 246.491 + - rot 0.021, 0.000, -1.571 (XYZ) + - scl 342.509, 342.509, 342.509 + - 33 vertex groups + - 'Bip001 L Thigh' 'Bip001 L Toe0' 'Bip001 Pelvis' 'Bip001 R Toe0' 'Bip001 Spine' ... 'Bip001 R Hand' 'Bone001' 'Bone003' 'Bone002' 'Bone004' + - 1 modifiers + - ARMATURE 'Bip001' + +==== Actions: 1 +- Action 'Take 001' curverange:(1.0 .. 87.0) layers:1 +- ActionLayer Layer strips:1 + - Keyframe strip channelbags:1 + - Channelbag slot 'OBBip001' curves:339 + - fcu 'location[0]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001' + - (1.000, 0.000) lh:(0.667, 0.000 AUTO_CLAMPED) rh:(1.333, 0.000 AUTO_CLAMPED) + - (2.000, 0.000) lh:(1.667, 0.000 AUTO_CLAMPED) rh:(2.333, 0.000 AUTO_CLAMPED) + - (3.000, 0.000) lh:(2.667, 0.000 AUTO_CLAMPED) rh:(3.333, 0.000 AUTO_CLAMPED) + ... + - (5.000, 0.000) lh:(4.667, 0.000 AUTO_CLAMPED) rh:(5.333, 0.000 AUTO_CLAMPED) + - (6.000, 0.000) lh:(5.667, 0.000 AUTO_CLAMPED) rh:(6.333, 0.000 AUTO_CLAMPED) + - (7.000, 0.000) lh:(6.667, 0.000 AUTO_CLAMPED) rh:(7.333, 0.000 AUTO_CLAMPED) + - fcu 'location[1]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001' + - (1.000, 8.048) lh:(0.667, 8.048 AUTO_CLAMPED) rh:(1.333, 8.048 AUTO_CLAMPED) + - (2.000, 8.048) lh:(1.667, 8.048 AUTO_CLAMPED) rh:(2.333, 8.048 AUTO_CLAMPED) + - (3.000, 8.048) lh:(2.667, 8.048 AUTO_CLAMPED) rh:(3.333, 8.048 AUTO_CLAMPED) + ... + - (5.000, 8.048) lh:(4.667, 8.048 AUTO_CLAMPED) rh:(5.333, 8.048 AUTO_CLAMPED) + - (6.000, 8.048) lh:(5.667, 8.048 AUTO_CLAMPED) rh:(6.333, 8.048 AUTO_CLAMPED) + - (7.000, 8.048) lh:(6.667, 8.048 AUTO_CLAMPED) rh:(7.333, 8.048 AUTO_CLAMPED) + - fcu 'location[2]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001' + - (1.000, 8.117) lh:(0.667, 8.117 AUTO_CLAMPED) rh:(1.333, 8.117 AUTO_CLAMPED) + - (2.000, 9.493) lh:(1.667, 8.900 AUTO_CLAMPED) rh:(2.333, 10.086 AUTO_CLAMPED) + - (3.000, 10.869) lh:(2.667, 10.489 AUTO_CLAMPED) rh:(3.333, 11.249 AUTO_CLAMPED) + ... + - (5.000, 12.409) lh:(4.667, 12.278 AUTO_CLAMPED) rh:(5.333, 12.541 AUTO_CLAMPED) + - (6.000, 12.725) lh:(5.667, 12.646 AUTO_CLAMPED) rh:(6.333, 12.804 AUTO_CLAMPED) + - (7.000, 12.856) lh:(6.667, 12.856 AUTO_CLAMPED) rh:(7.333, 12.856 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 Head"].location[0]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 Head' + - (1.000, 0.542) lh:(0.667, 0.542 AUTO_CLAMPED) rh:(1.333, 0.542 AUTO_CLAMPED) + - (2.000, 0.542) lh:(1.667, 0.542 AUTO_CLAMPED) rh:(2.333, 0.542 AUTO_CLAMPED) + - (3.000, 0.542) lh:(2.667, 0.542 AUTO_CLAMPED) rh:(3.333, 0.542 AUTO_CLAMPED) + ... + - (5.000, 0.542) lh:(4.667, 0.542 AUTO_CLAMPED) rh:(5.333, 0.542 AUTO_CLAMPED) + - (6.000, 0.542) lh:(5.667, 0.542 AUTO_CLAMPED) rh:(6.333, 0.542 AUTO_CLAMPED) + - (7.000, 0.542) lh:(6.667, 0.542 AUTO_CLAMPED) rh:(7.333, 0.542 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 Head"].location[1]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 Head' + - (1.000, -0.068) lh:(0.667, -0.068 AUTO_CLAMPED) rh:(1.333, -0.068 AUTO_CLAMPED) + - (2.000, -0.068) lh:(1.667, -0.068 AUTO_CLAMPED) rh:(2.333, -0.068 AUTO_CLAMPED) + - (3.000, -0.068) lh:(2.667, -0.068 AUTO_CLAMPED) rh:(3.333, -0.068 AUTO_CLAMPED) + ... + - (5.000, -0.068) lh:(4.667, -0.068 AUTO_CLAMPED) rh:(5.333, -0.068 AUTO_CLAMPED) + - (6.000, -0.068) lh:(5.667, -0.068 AUTO_CLAMPED) rh:(6.333, -0.068 AUTO_CLAMPED) + - (7.000, -0.068) lh:(6.667, -0.068 AUTO_CLAMPED) rh:(7.333, -0.068 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 Head"].location[2]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 Head' + - (1.000, 0.000) lh:(0.667, 0.000 AUTO_CLAMPED) rh:(1.333, 0.000 AUTO_CLAMPED) + - (2.000, 0.000) lh:(1.667, 0.000 AUTO_CLAMPED) rh:(2.333, 0.000 AUTO_CLAMPED) + - (3.000, 0.000) lh:(2.667, 0.000 AUTO_CLAMPED) rh:(3.333, 0.000 AUTO_CLAMPED) + ... + - (5.000, 0.000) lh:(4.667, 0.000 AUTO_CLAMPED) rh:(5.333, 0.000 AUTO_CLAMPED) + - (6.000, 0.000) lh:(5.667, 0.000 AUTO_CLAMPED) rh:(6.333, 0.000 AUTO_CLAMPED) + - (7.000, 0.000) lh:(6.667, 0.000 AUTO_CLAMPED) rh:(7.333, 0.000 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 Head"].rotation_quaternion[0]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 Head' + - (1.000, 0.999) lh:(0.667, 0.999 AUTO_CLAMPED) rh:(1.333, 0.999 AUTO_CLAMPED) + - (2.000, 1.000) lh:(1.667, 1.000 AUTO_CLAMPED) rh:(2.333, 1.000 AUTO_CLAMPED) + - (3.000, 0.999) lh:(2.667, 0.999 AUTO_CLAMPED) rh:(3.333, 0.998 AUTO_CLAMPED) + ... + - (5.000, 0.998) lh:(4.667, 0.997 AUTO_CLAMPED) rh:(5.333, 0.998 AUTO_CLAMPED) + - (6.000, 0.999) lh:(5.667, 0.999 AUTO_CLAMPED) rh:(6.333, 0.999 AUTO_CLAMPED) + - (7.000, 1.000) lh:(6.667, 1.000 AUTO_CLAMPED) rh:(7.333, 1.000 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 Head"].rotation_quaternion[1]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 Head' + - (1.000, 0.007) lh:(0.667, 0.007 AUTO_CLAMPED) rh:(1.333, 0.007 AUTO_CLAMPED) + - (2.000, 0.008) lh:(1.667, 0.007 AUTO_CLAMPED) rh:(2.333, 0.008 AUTO_CLAMPED) + - (3.000, 0.009) lh:(2.667, 0.008 AUTO_CLAMPED) rh:(3.333, 0.009 AUTO_CLAMPED) + ... + - (5.000, 0.009) lh:(4.667, 0.009 AUTO_CLAMPED) rh:(5.333, 0.009 AUTO_CLAMPED) + - (6.000, 0.008) lh:(5.667, 0.009 AUTO_CLAMPED) rh:(6.333, 0.008 AUTO_CLAMPED) + - (7.000, 0.008) lh:(6.667, 0.008 AUTO_CLAMPED) rh:(7.333, 0.008 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 Head"].rotation_quaternion[2]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 Head' + - (1.000, -0.024) lh:(0.667, -0.024 AUTO_CLAMPED) rh:(1.333, -0.024 AUTO_CLAMPED) + - (2.000, -0.024) lh:(1.667, -0.024 AUTO_CLAMPED) rh:(2.333, -0.023 AUTO_CLAMPED) + - (3.000, -0.023) lh:(2.667, -0.023 AUTO_CLAMPED) rh:(3.333, -0.023 AUTO_CLAMPED) + ... + - (5.000, -0.023) lh:(4.667, -0.023 AUTO_CLAMPED) rh:(5.333, -0.023 AUTO_CLAMPED) + - (6.000, -0.023) lh:(5.667, -0.023 AUTO_CLAMPED) rh:(6.333, -0.023 AUTO_CLAMPED) + - (7.000, -0.023) lh:(6.667, -0.023 AUTO_CLAMPED) rh:(7.333, -0.023 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 Head"].rotation_quaternion[3]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 Head' + - (1.000, -0.035) lh:(0.667, -0.035 AUTO_CLAMPED) rh:(1.333, -0.035 AUTO_CLAMPED) + - (2.000, 0.006) lh:(1.667, -0.012 AUTO_CLAMPED) rh:(2.333, 0.023 AUTO_CLAMPED) + - (3.000, 0.047) lh:(2.667, 0.035 AUTO_CLAMPED) rh:(3.333, 0.058 AUTO_CLAMPED) + ... + - (5.000, 0.062) lh:(4.667, 0.069 AUTO_CLAMPED) rh:(5.333, 0.056 AUTO_CLAMPED) + - (6.000, 0.034) lh:(5.667, 0.045 AUTO_CLAMPED) rh:(6.333, 0.023 AUTO_CLAMPED) + - (7.000, 0.011) lh:(6.667, 0.011 AUTO_CLAMPED) rh:(7.333, 0.011 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 Head"].scale[0]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 Head' + - (1.000, 1.000) lh:(0.667, 1.000 AUTO_CLAMPED) rh:(1.333, 1.000 AUTO_CLAMPED) + - (2.000, 1.000) lh:(1.667, 1.000 AUTO_CLAMPED) rh:(2.333, 1.000 AUTO_CLAMPED) + - (3.000, 1.000) lh:(2.667, 1.000 AUTO_CLAMPED) rh:(3.333, 1.000 AUTO_CLAMPED) + ... + - (5.000, 1.000) lh:(4.667, 1.000 AUTO_CLAMPED) rh:(5.333, 1.000 AUTO_CLAMPED) + - (6.000, 1.000) lh:(5.667, 1.000 AUTO_CLAMPED) rh:(6.333, 1.000 AUTO_CLAMPED) + - (7.000, 1.000) lh:(6.667, 1.000 AUTO_CLAMPED) rh:(7.333, 1.000 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 Head"].scale[1]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 Head' + - (1.000, 1.000) lh:(0.667, 1.000 AUTO_CLAMPED) rh:(1.333, 1.000 AUTO_CLAMPED) + - (2.000, 1.000) lh:(1.667, 1.000 AUTO_CLAMPED) rh:(2.333, 1.000 AUTO_CLAMPED) + - (3.000, 1.000) lh:(2.667, 1.000 AUTO_CLAMPED) rh:(3.333, 1.000 AUTO_CLAMPED) + ... + - (5.000, 1.000) lh:(4.667, 1.000 AUTO_CLAMPED) rh:(5.333, 1.000 AUTO_CLAMPED) + - (6.000, 1.000) lh:(5.667, 1.000 AUTO_CLAMPED) rh:(6.333, 1.000 AUTO_CLAMPED) + - (7.000, 1.000) lh:(6.667, 1.000 AUTO_CLAMPED) rh:(7.333, 1.000 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 Head"].scale[2]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 Head' + - (1.000, 1.000) lh:(0.667, 1.000 AUTO_CLAMPED) rh:(1.333, 1.000 AUTO_CLAMPED) + - (2.000, 1.000) lh:(1.667, 1.000 AUTO_CLAMPED) rh:(2.333, 1.000 AUTO_CLAMPED) + - (3.000, 1.000) lh:(2.667, 1.000 AUTO_CLAMPED) rh:(3.333, 1.000 AUTO_CLAMPED) + ... + - (5.000, 1.000) lh:(4.667, 1.000 AUTO_CLAMPED) rh:(5.333, 1.000 AUTO_CLAMPED) + - (6.000, 1.000) lh:(5.667, 1.000 AUTO_CLAMPED) rh:(6.333, 1.000 AUTO_CLAMPED) + - (7.000, 1.000) lh:(6.667, 1.000 AUTO_CLAMPED) rh:(7.333, 1.000 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 L Calf"].location[0]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 L Calf' + - (1.000, 0.000) lh:(0.667, 0.000 AUTO_CLAMPED) rh:(1.333, 0.000 AUTO_CLAMPED) + - (2.000, 0.000) lh:(1.667, 0.000 AUTO_CLAMPED) rh:(2.333, 0.000 AUTO_CLAMPED) + - (3.000, 0.000) lh:(2.667, 0.000 AUTO_CLAMPED) rh:(3.333, 0.000 AUTO_CLAMPED) + ... + - (5.000, 0.000) lh:(4.667, 0.000 AUTO_CLAMPED) rh:(5.333, 0.000 AUTO_CLAMPED) + - (6.000, 0.000) lh:(5.667, 0.000 AUTO_CLAMPED) rh:(6.333, 0.000 AUTO_CLAMPED) + - (7.000, 0.000) lh:(6.667, 0.000 AUTO_CLAMPED) rh:(7.333, 0.000 AUTO_CLAMPED) + - fcu 'pose.bones["Bip001 L Calf"].location[1]' smooth:CONT_ACCEL extra:CONSTANT keyframes:7 grp:'Bip001 L Calf' + - (1.000, 0.000) lh:(0.667, 0.000 AUTO_CLAMPED) rh:(1.333, 0.000 AUTO_CLAMPED) + - (2.000, 0.000) lh:(1.667, 0.000 AUTO_CLAMPED) rh:(2.333, 0.000 AUTO_CLAMPED) + - (3.000, 0.000) lh:(2.667, 0.000 AUTO_CLAMPED) rh:(3.333, 0.000 AUTO_CLAMPED) + ... + - (5.000, 0.000) lh:(4.667, 0.000 AUTO_CLAMPED) rh:(5.333, 0.000 AUTO_CLAMPED) + - (6.000, 0.000) lh:(5.667, 0.000 AUTO_CLAMPED) rh:(6.333, 0.000 AUTO_CLAMPED) + - (7.000, 0.000) lh:(6.667, 0.000 AUTO_CLAMPED) rh:(7.333, 0.000 AUTO_CLAMPED) + +==== Armatures: 1 +- Armature 'Bip001' 33 bones + - bone 'Bip001 Head' parent:'Bip001 Neck' h:(38.602, -85.889, 0.000) t:(38.698, 34.591, 0.000) radius h:0.100 t:0.050 + -0.174 0.985 0.000 12.071 + 0.000 0.000 1.000 0.000 + 0.985 0.174 0.000 452.823 + - bone 'Bip001 L Calf' parent:'Bip001 L Thigh' h:(196.253, -196.253, 0.000) t:(389.660, -125.695, 0.000) radius h:0.100 t:0.050 + 0.582 0.805 -0.115 187.559 + -0.065 -0.095 -0.993 135.788 + -0.810 0.586 -0.003 53.483 + - bone 'Bip001 L Clavicle' parent:'Bip001 Neck' h:(-55.090, -44.085, 84.940) t:(-55.090, -44.085, 164.797) radius h:0.100 t:0.050 + 0.766 0.000 -0.643 69.442 + 0.000 1.000 0.000 84.940 + 0.643 0.000 0.766 367.768 + - bone 'Bip001 L Foot' parent:'Bip001 L HorseLink' h:(122.856, -122.856, 0.000) t:(124.886, -50.097, 8.242) radius h:0.100 t:0.050 + 0.174 -0.985 0.000 325.381 + 0.000 0.000 -1.000 119.998 + 0.985 0.174 0.000 8.136 + - bone 'Bip001 L Forearm' parent:'Bip001 L UpperArm' h:(154.407, -154.407, 0.000) t:(286.684, -163.625, 0.000) radius h:0.100 t:0.050 + 0.713 0.701 0.010 230.891 + -0.077 0.064 0.995 95.636 + 0.697 -0.711 0.099 302.171 + - bone 'Bip001 L Hand' parent:'Bip001 L Forearm' h:(132.598, -132.598, 0.000) t:(217.830, -31.399, -8.748) radius h:0.100 t:0.050 + 0.098 0.993 0.070 325.484 + -0.044 -0.066 0.997 85.486 + 0.994 -0.101 0.037 394.537 + - bone 'Bip001 L HorseLink' parent:'Bip001 L Calf' h:(205.876, -205.876, 0.000) t:(120.006, -293.739, 0.000) radius h:0.100 t:0.050 + 0.146 -0.983 -0.115 307.412 + -0.020 0.113 -0.993 122.425 + 0.989 0.148 -0.003 -113.375 + - bone 'Bip001 L Thigh' parent:'Bip001 Spine' h:(-114.724, -135.564, 157.608) t:(44.428, -250.256, 163.207) radius h:0.100 t:0.050 + 0.956 -0.271 -0.115 0.000 + -0.111 0.029 -0.993 157.608 + 0.273 0.962 -0.003 0.000 + - bone 'Bip001 L Toe0' parent:'Bip001 L Foot' h:(64.923, -39.327, 0.000) t:(-8.330, -39.327, 0.000) radius h:0.100 t:0.050 + -0.985 -0.174 0.000 303.244 + 0.000 0.000 -1.000 119.998 + 0.174 -0.985 0.000 77.964 + - bone 'Bip001 L UpperArm' parent:'Bip001 L Clavicle' h:(79.857, -79.857, 0.000) t:(-74.148, -68.755, -0.884) radius h:0.100 t:0.050 + 0.649 -0.760 0.010 130.616 + 0.069 0.072 0.995 84.940 + -0.757 -0.645 0.099 419.099 + - bone 'Bip001 Neck' parent:'Bip001 Spine1' h:(166.931, -195.982, 0.000) t:(181.778, -111.386, 0.000) radius h:0.100 t:0.050 + -0.173 0.985 0.000 18.744 + 0.000 0.000 1.000 0.000 + 0.985 0.173 0.000 414.802 + - bone 'Bip001 Pelvis' h:(0.000, 0.000, 0.000) t:(122.159, 0.000, 0.000) radius h:0.100 t:0.050 + 0.000 1.000 0.000 0.000 + 0.000 0.000 1.000 0.000 + 1.000 0.000 0.000 0.000 + - bone 'Bip001 R Calf' parent:'Bip001 R Thigh' h:(196.252, -196.252, 0.000) t:(389.660, -125.695, 0.000) radius h:0.100 t:0.050 + 0.582 0.805 0.115 187.559 + 0.065 0.095 -0.993 -135.788 + -0.810 0.586 0.003 53.483 + - bone 'Bip001 R Clavicle' parent:'Bip001 Neck' h:(-55.090, -44.084, -84.940) t:(-55.090, -44.084, -164.797) radius h:0.100 t:0.050 + 0.766 0.000 0.643 69.442 + 0.000 -1.000 0.000 -84.940 + 0.643 0.000 -0.766 367.768 + - bone 'Bip001 R Foot' parent:'Bip001 R HorseLink' h:(122.856, -122.856, 0.000) t:(124.886, -50.097, -8.242) radius h:0.100 t:0.050 + 0.174 -0.985 0.000 325.381 + 0.000 0.000 -1.000 -119.998 + 0.985 0.174 0.000 8.136 + - bone 'Bip001 R Forearm' parent:'Bip001 R UpperArm' h:(154.407, -154.407, 0.000) t:(286.684, -163.625, 0.000) radius h:0.100 t:0.050 + 0.713 0.701 -0.010 230.891 + 0.077 -0.064 0.995 -95.636 + 0.697 -0.711 -0.099 302.171 + - bone 'Bip001 R Hand' parent:'Bip001 R Forearm' h:(132.598, -132.598, 0.000) t:(217.830, -31.399, 8.748) radius h:0.100 t:0.050 + 0.098 0.993 -0.070 325.484 + 0.044 0.066 0.997 -85.486 + 0.994 -0.101 -0.037 394.537 + - bone 'Bip001 R HorseLink' parent:'Bip001 R Calf' h:(205.876, -205.876, 0.000) t:(120.006, -293.739, 0.000) radius h:0.100 t:0.050 + 0.146 -0.983 0.115 307.412 + 0.020 -0.113 -0.993 -122.425 + 0.989 0.148 0.003 -113.375 + - bone 'Bip001 R Thigh' parent:'Bip001 Spine' h:(-114.724, -135.563, -157.608) t:(44.428, -250.256, -163.207) radius h:0.100 t:0.050 + 0.956 -0.271 0.115 0.000 + 0.111 -0.029 -0.993 -157.608 + 0.273 0.962 0.003 0.000 + - bone 'Bip001 R Toe0' parent:'Bip001 R Foot' h:(64.923, -39.327, 0.000) t:(-8.330, -39.327, 0.000) radius h:0.100 t:0.050 + -0.985 -0.174 0.000 303.244 + 0.000 0.000 -1.000 -119.998 + 0.174 -0.985 0.000 77.964 + - bone 'Bip001 R UpperArm' parent:'Bip001 R Clavicle' h:(79.857, -79.857, 0.000) t:(-74.148, -68.754, 0.884) radius h:0.100 t:0.050 + 0.649 -0.760 -0.010 130.616 + -0.069 -0.072 0.995 -84.940 + -0.757 -0.645 -0.099 419.099 + - bone 'Bip001 Spine' parent:'Bip001 Pelvis' h:(122.159, -122.259, 0.000) t:(61.307, 44.516, -0.001) radius h:0.100 t:0.050 + 0.343 0.939 0.000 -0.100 + 0.000 0.000 1.000 0.000 + 0.939 -0.343 0.000 122.159 + - bone 'Bip001 Spine1' parent:'Bip001 Spine' h:(133.776, -177.649, 0.000) t:(191.732, -18.809, 0.000) radius h:0.100 t:0.050 + 0.000 1.000 0.000 45.642 + 0.000 0.000 1.000 0.000 + 1.000 0.000 0.000 247.871 + - bone 'Bone001' parent:'Bip001 Head' h:(69.921, -200.036, -52.691) t:(10.537, -175.195, -52.691) radius h:0.100 t:0.050 + -0.813 0.540 0.218 -78.418 + -0.259 0.000 -0.966 -52.691 + -0.522 -0.842 0.140 507.867 + - bone 'Bone002' parent:'Bone001' h:(64.370, -64.370, 0.000) t:(67.685, 31.255, 0.000) radius h:0.100 t:0.050 + -0.831 0.512 0.218 -130.740 + -0.259 -0.009 -0.966 -69.351 + -0.492 -0.859 0.140 474.277 + - bone 'Bone003' parent:'Bone002' h:(95.682, -95.682, 0.000) t:(110.770, -22.141, 0.000) radius h:0.100 t:0.050 + -0.917 0.334 0.218 -210.259 + -0.252 -0.061 -0.966 -94.100 + -0.310 -0.941 0.140 427.167 + - bone 'Bone004' parent:'Bone003' h:(75.072, -75.072, 0.000) t:(73.734, 61.235, 0.000) radius h:0.100 t:0.050 + -0.914 0.343 0.218 -279.097 + -0.252 -0.058 -0.966 -112.987 + -0.319 -0.937 0.140 403.921 + - bone 'Bone005' parent:'Bone004' h:(136.314, -136.314, 0.000) t:(136.314, 0.000, 0.000) radius h:0.100 t:0.050 + -0.914 0.343 0.218 -403.639 + -0.252 -0.058 -0.966 -147.361 + -0.319 -0.937 0.140 360.455 + - bone 'Bone006' parent:'Bip001 Head' h:(69.921, -200.036, 61.870) t:(10.537, -175.196, 61.870) radius h:0.100 t:0.050 + -0.490 0.540 0.684 -78.417 + -0.813 0.000 -0.583 61.870 + -0.315 -0.842 0.439 507.867 + - bone 'Bone007' parent:'Bone006' h:(22.687, -64.370, -60.239) t:(23.855, 31.255, -63.342) radius h:0.100 t:0.050 + -0.473 0.512 0.717 -130.740 + -0.832 0.009 -0.555 78.531 + -0.291 -0.859 0.421 474.277 + - bone 'Bone008' parent:'Bone007' h:(30.721, -95.682, -90.616) t:(35.565, -22.141, -104.905) radius h:0.100 t:0.050 + -0.156 0.334 0.929 -210.258 + -0.981 0.061 -0.186 103.280 + -0.119 -0.941 0.318 427.167 + - bone 'Bone009' parent:'Bone008' h:(-5.015, -75.072, -74.905) t:(-4.925, 61.235, -73.569) radius h:0.100 t:0.050 + -0.541 0.343 0.768 -279.097 + -0.804 0.058 -0.592 122.167 + -0.248 -0.937 0.244 403.921 + - bone 'Bone010' parent:'Bone009' h:(50.491, -136.314, -126.618) t:(50.491, 0.000, -126.618) radius h:0.100 t:0.050 + -0.889 0.343 -0.304 -403.638 + 0.343 0.058 -0.937 156.541 + -0.304 -0.937 -0.170 360.455 + diff --git a/tests/files/io_tests/fbx/reference/issue76800_bone_orientation.txt b/tests/files/io_tests/fbx/reference/issue76800_bone_orientation.txt index 03a064d15a6..941bc291d6f 100644 --- a/tests/files/io_tests/fbx/reference/issue76800_bone_orientation.txt +++ b/tests/files/io_tests/fbx/reference/issue76800_bone_orientation.txt @@ -242,8 +242,8 @@ - bone 'RigLBLeg1' parent:'RigPelvis' h:(-5.414, -15.736, 11.386) t:(2.952, 3.808, 11.800) radius h:0.100 t:0.050 -0.007 0.019 -1.000 11.386 -0.919 0.393 0.014 59.286 - 0.394 0.919 0.015 -35.486 - - bone 'RigLBLeg2' parent:'RigLBLeg1' h:(21.263, -21.263, 0.000) t:(41.340, -10.580, -0.006) radius h:0.100 t:0.050 + 0.394 0.919 0.015 -35.487 + - bone 'RigLBLeg2' parent:'RigLBLeg1' h:(21.263, -21.263, 0.000) t:(41.340, -10.581, -0.006) radius h:0.100 t:0.050 -0.021 0.004 -1.000 11.248 -0.779 -0.627 0.014 39.739 -0.626 0.779 0.016 -27.116 diff --git a/tests/files/io_tests/fbx/reference/ufbx_motionbuilder_sausage_rrss_77b.txt b/tests/files/io_tests/fbx/reference/ufbx_motionbuilder_sausage_rrss_77b.txt index 5d1d5d5d1f1..7c488eae62c 100644 --- a/tests/files/io_tests/fbx/reference/ufbx_motionbuilder_sausage_rrss_77b.txt +++ b/tests/files/io_tests/fbx/reference/ufbx_motionbuilder_sausage_rrss_77b.txt @@ -84,6 +84,10 @@ - rot 0.000, 0.000, 0.000 (XYZ) - scl 0.010, 0.010, 0.010 - Obj 'Skin' MESH data:'Mesh' par:'Armature' + - matrix_parent_inverse: + 0.000 -1.000 0.000 0.000 + 0.000 0.000 1.000 0.000 + -1.000 0.000 0.000 0.000 - pos 0.000, 0.000, 0.000 - rot 0.000, 0.000, 0.000 (XYZ) - scl 1.000, 1.000, 1.000 diff --git a/tests/python/modules/io_report.py b/tests/python/modules/io_report.py index e797f8b4b40..ede77b2a45c 100644 --- a/tests/python/modules/io_report.py +++ b/tests/python/modules/io_report.py @@ -490,6 +490,13 @@ class Report: if obj.parent_type == 'BONE': desc.write(f" par_bone:'{obj.parent_bone}'") desc.write(f"\n") + mtx = obj.matrix_parent_inverse + if not is_approx_identity(mtx): + desc.write(f" - matrix_parent_inverse:\n") + desc.write(f" {fmtf(mtx[0][0])} {fmtf(mtx[0][1])} {fmtf(mtx[0][2])} {fmtf(mtx[0][3])}\n") + desc.write(f" {fmtf(mtx[1][0])} {fmtf(mtx[1][1])} {fmtf(mtx[1][2])} {fmtf(mtx[1][3])}\n") + desc.write(f" {fmtf(mtx[2][0])} {fmtf(mtx[2][1])} {fmtf(mtx[2][2])} {fmtf(mtx[2][3])}\n") + desc.write(f" - pos {fmtf(obj.location[0])}, {fmtf(obj.location[1])}, {fmtf(obj.location[2])}\n") desc.write( f" - rot {fmtrot(obj.rotation_euler[0])}, {fmtrot(obj.rotation_euler[1])}, {fmtrot(obj.rotation_euler[2])} ({obj.rotation_mode})\n")