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)。
-
相关问题
参考
No Comments