Humanoid 概要 概要 VRM 的 Humaniod,主要根据能否接受运动捕捉中的 Forward kinematics(FK/正向运动学) 的运动作为标准来决定。 假设一帧的 动作(姿势) 由以下的信息来表示。: hips(髋骨) 的移动值 各骨骼的旋转值 为了让一个 Gltf Scene(Unity Hierarchy)接收这些数据并再现相同的姿势,需要满足以下条件: 明确 Gltf Node(Unity GameObject)和骨骼(如髋骨、脊柱、胸部等)之间的对应关系。 骨骼的父子关系统一。 接收动作前的姿势是统一的 => T-Pose。 备注 更具体地说,如果骨骼的长度不同,姿势就会有些偏差。针对这种问题的解决方案,我们称之为重定向,但在VRM中并没有专门的规范。如果 股骨、膝盖、脚踝 到 脚跟 的比例不一样,就会导致站立时脚跟在地面产生一些滑移。】 因为是以 Unity 的 HumanoidAvatar 为基础决定的,所以基本上是一样的。 https://docs.unity3d.com/Manual/AvatarCreationandSetup.html 此外,为了简化程序处理,VRM 的 Humanoid 规范增加了以下内容 所有的 Gltf Node (Unity GameObject) 的旋转设置为0时,就会变成初始姿势。 缩放值不变 备注 特别是缩放是一个很复杂的问题,如果缩放中心不是原点、存在负缩放、以及XYZ轴分别有不同的缩放的话,编写程序时处理这些问题非常麻烦。   T-Pose 对手腕和手指的初始姿态进行了规范。 手心朝下 大拇指水平放置,在 XZ平面上(从上方看) 与 Z轴夹角呈45度   Unity 的 Humanoid 在 Unity 中,有一个名为“Avatar”的对象。你可以将其设置为“Humanoid”模式。虽然 Avatar 是 Unity  的一个对象,但 Humanoid Avatar 的设置界面是 fbx importer(fbx导出器) 的一部分。因此,你不能从非 fbx 的数据创建包含 Humanoid Avatar 的模型。但是,由于存在能够从程序中创建 Humanoid Avatar 的功能,使得 UniVRM 能够创建 Humanoid Avatar。 humanoid component   与 BVH 的兼容性 与初始姿势为 T-Pose 的 BVH 文件兼容。  将位移数据赋予 hips。  以 hips 为起始,逐级为子节点设置局部旋转值。   详情 骨骼列表与 Unity 文档中的 HumanBodyBones 相同。 对象节点的选择,与蒙皮(例如 GLTF 的 skin 和 joint,Unity 的 SkinnedMeshRenderer 等)无关 意思可能是,选择使用哪些骨骼时,可以不考虑这些骨骼是否参与蒙皮处理。 需要包含必要的骨骼 骨骼父子关系遵守 Humanoid 的定义(例如,LowerLeg 的第一个父级骨骼是 UpperLeg) 将“hips”作为 Root(根节点),建立以下父子关系。括号内为非必需骨骼。 hips - spine - chest - (upper chest) - neck - head 从 head 向左 - (eye) 从 head 向右 - (eye) 从 chest 或 upper chest 向左 - (shoulder) - upper arm - lower arm - hand - (fingers) 从 chest 或 upper chest 向右 - (shoulder) - upper arm - lower arm - hand - (fingers) 从 hips 向左 - upper leg - lower leg - foot - (toes) 从 hips 向右 - upper leg - lower leg - foot - (toes) 允许在骨骼间插入与 Humanoid 骨骼无关的节点(如 LowerLeg 的父节点为 empty,而 empty 的父节点为 UpperLeg)。 非必需的骨骼可以跳过(如 UpperArm的 父节点不是 shoulder 而是 chest)。   相关问题 https://github.com/vrm-c/vrm-specification/issues/87   参考 Mecanim Humanoids 从 Blender 导出与 Unity 的 Humanoid 兼容的 fbx 文件