Skip to main content

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

T_pose.png

对手腕和手指的初始姿态进行了规范。

  • 手心朝下
  • 大拇指水平放置,在 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)。

 

相关问题

 

参考