Humanoid(人形)


Humanoid 概要

概要

VRM 的 Humaniod,主要根据能否接受运动捕捉中的 Forward kinematics(FK/正向运动学) 的运动作为标准来决定。

假设一帧的 动作(姿势) 由以下的信息来表示。:

为了让一个 Gltf Scene(Unity Hierarchy)接收这些数据并再现相同的姿势,需要满足以下条件:

备注
更具体地说,如果骨骼的长度不同,姿势就会有些偏差。针对这种问题的解决方案,我们称之为重定向,但在VRM中并没有专门的规范。如果 股骨、膝盖、脚踝 到 脚跟 的比例不一样,就会导致站立时脚跟在地面产生一些滑移。】

因为是以 Unity 的 HumanoidAvatar 为基础决定的,所以基本上是一样的。

https://docs.unity3d.com/Manual/AvatarCreationandSetup.html

此外,为了简化程序处理,VRM 的 Humanoid 规范增加了以下内容

备注
特别是缩放是一个很复杂的问题,如果缩放中心不是原点、存在负缩放、以及XYZ轴分别有不同的缩放的话,编写程序时处理这些问题非常麻烦。

 

T-Pose

T_pose.png

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

 

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 文件兼容。 

 

详情

骨骼列表与 Unity 文档中的 HumanBodyBones 相同。

 

相关问题

 

参考

 

BaseModel(基础模型)

满足以下条件的 GameObject 可以导出为 VRM 格式:

 

FBX

要满足上述条件,请在 fbx importerrig 设置中将模型设置为 humanoid。fbx 的 prefab 在设置为 humanoid 后,会附加Animator 组件,并且会设置 HumanoidAvatar。

要让 fbx 转化为 Humanoid,需要满足以下2个条件

此外

参考

从 Blender 导出与 Unity 的 Humanoid 兼容的 fbx 文件

 

在场景中加工 FBX

不会产生问题的:

有时可能会遇到问题:

出现问题的原因

HumanoidAvatar 记录了以下信息:

如果对这此进行了更改,则需要重新创建。可以在下面的 HumanoidComponent 中来创建。

 

从 GameObject 手动创建 HumanoidAvatar

可以不依赖 fbx importer 来创建 HumanoidAvatar。

 HumanoidComponent

使用这个的话,

对于像这样的 Hierarchy(层级结构),可以后续追加创建 HumanoidAvatar。创建了 HumanoidAvatar 的游戏对象(无论在场景还是作为 Prefab)都可以被导出为 VRM 格式。

 

 

HumanoidComponent

HumanoidComponent

UniVRM-0.60.0

即使没有fbx文件,也可以直接从场景创建 humanoid avatar。

使用方法

准备一个有 Humanoid Bone 的场景。

举个例子

https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/RiggedFigure/glTF-Binary

接下来使用上面链接的资源来演示。

首先,请将 RiggedFigure.glb 导入到 Asset 文件夹中。使用 UniVRM 的 glb 导入功能,会生成一个prefab(预制件)。

在一个新的场景中将 RiggedFigure 的 prefab 实例化。

请使用 AddComponent 添加 Humanoid 组件。(MeshUtility.Humanoid。这包含在UniVRM中。)

bone_required.jpg

正确配置骨骼。

create_avatar.jpg

按下 Create UnityEngine.Avatar 按钮

humanoid_animator.jpg

将创建一个新的 humanoid avatar。

保持这样,可以将其设置为 T-Pose 并进行 VRM 化。

UniHumanoid

Unity humanoid 工具与 BVH 导入器。

BVH runtime loader

var context = new BvhImporterContext();
context.Parse(path);
context.Load(); // create Skeleton hierarchy and mesh for visualize
GameObject root = context.Root;

 

RuntimeLoader

 

RuntimeLoader 和 PoseTransfer

加载 BVH 文件,并将姿势转移到任何具有人形特征的模型上。

humanpose_transfer_inspector.png

humanpose_transfer.png


加载 BVH 文件并创建带有 AnimationClip 的预制件

Drop bvh file to Assets folder. Then, AssetPostprocessor import bvh file.

将 BVH 文件拖动到 Assets 文件夹。然后,AssetPostprocessor 将导入 BVH 文件。

下载.png

将预制体在场景中实例化。

mesh.png

这个 object 可以处理了.

 

骨骼映射

这段 script(脚本)可以帮助你从现有的 GameObject hierarchy(游戏对象层级)中创建一个 human avatar。首先,你需要将这个脚本附加到具有 Animator(动画控制器)的 root GameObject(根游戏对象上)。

然后按照下面进行配置

点击Guess bone mapping(猜测骨骼映射)。如果推测骨骼映射失败,你可以手动设置骨骼。

(可选步骤), 按下 Ensure T-Pose。创建 avatar。

bvh_bonemapping.png

 

这些 humanoid 通过 UniGLTF 导入,并利用 BoneMapping 技术创建了 human avatar。

humanoid.gif

下载 BVH 文件