def _create_usd_skeleton(self, gltf_skin, usd_xform, usd_joint_names): """Creates a USD skeleton from a glTF skin Arguments: gltf_skin {Skin} -- gltf skin usd_xform {Xform} -- USD Xform Returns: Skeleton -- USD skeleton """ # create skeleton root_joints = gltf_skin.root_joints root_joint_names = [GLTF2USDUtils.convert_to_usd_friendly_node_name(root_joint.name) for root_joint in root_joints] skeleton = None if len(root_joints) == 1: skeleton = UsdSkel.Skeleton.Define(self.stage, '{0}/{1}'.format(usd_xform.GetPath(), root_joint_names[0])) else: skeleton = UsdSkel.Skeleton.Define(self.stage, '{0}/{1}'.format(usd_xform.GetPath(), '__root__')) gltf_bind_transforms = [Gf.Matrix4d(*xform).GetInverse() for xform in gltf_skin.get_inverse_bind_matrices()] gltf_rest_transforms = [GLTF2USDUtils.compute_usd_transform_matrix_from_gltf_node(joint) for joint in gltf_skin.get_joints()] if len(root_joints) > 1: matrix = Gf.Matrix4d() matrix.SetIdentity() skeleton.CreateJointsAttr().Set(usd_joint_names) skeleton.CreateBindTransformsAttr(gltf_bind_transforms) skeleton.CreateRestTransformsAttr(gltf_rest_transforms) return skeleton
def test_convert_node_transform_to_rest_matrix(self): node = self.loader.get_nodes()[0] GLTF2USDUtils.compute_usd_transform_matrix_from_gltf_node(node)