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")