如何制作VRM

如何制作VRM文件

使用 UniVRM 制作 VRM 文件的工作流程大致如下:

  1. 将 3D 模型导入 Unity 项目调整为T-Pose,并添加许可证信息。启用归一化后,输出 VRM 文件。
  2. 读取上面输出的 VRM 文件,在 Unity 中进行 VRM 特有的设置(许可晃动物体表情视线第一人称等),然后在不进行归一化的情况下输出VRM文件。

译者补充:T-pose 和 A-pose 是3D模型常用的角色模型初始姿势,人物动作呈现直立状态,主要区别在于 T-pose 为两手向身体两侧平举,A-pose 的双手为身体侧下方摆放。两种 Pose 在不同的地方可能也有细微区别,比如两腿并拢的程度,不同地方并拢的程度可能不同。一般读取动作数据时,并不是读取每个关节当前夹角多少度,而是相对于初始动作变化了多少变化量,因此会因为初始姿势的不同,导致最终动作也不一致。

重点是:

VRM_changeVRM_ZH.png

0.创建一个Unity项目并安装 UniVRM

下载 UniVRM

https://github.com/vrm-c/UniVRM/releases

请下载最新版本。文件名为UniVRM-0.XX.0_YYYY.unitypackag

XX 为 UniVRM的版本。YYYY 是版本识别ID。UniVRM版本号

补充:
UniVRM 0.99.x 是 unity 20019.4 的最终版本。
从 UniVRM 0.100.x 开始,需要至少 2020.3 的 Unity。
UniVRM 0.111.x 是最后一个自带 UMP 的版本,是 Unity 2020 的最后一个版本。
*从 UniVRM 0.112.0 开始,Univrm 不再自带 URP,需要单独安装,不然会报错!并且 Unity 版本要求至少是 2021.3 LTS。


安装Unity

https://unity.com/releases/editor/archive

请安装 UniVRM 对应版本的 Unity。对应的 Unity 版本请在相关页面查看说明。

不要使用国内 Unity 网站的链接下载的 Unity!!

如果使用的是国内的链接,即使你使用的是国际版的 UnityHub,你下载的 Unity 仍然是国内特供版的 Unity。
中国版的版本版本号后缀是“c1”,国际版版本号后缀是“f1
请使用国际版网站的链接进行下载,上面提供的链接是国际版的下载页面。

或者你可以查看跳转 UP 主整理的国际版历史版本汇总专栏
Unity国际版下载链接分享(非c1国内版)【点击此处进行跳转】
只要下载的 Unity 是国际版就OK,你安装的 UnityHub 是中国版还是国际版都没关系。

用Unity创建空项目

创建Unity项目-by.北溟瞬息

以前版本的 Unity 似乎可以直接打开 Unity引擎 进行创建项目。

但是现在的基本都被 UnityHub 接管了,所以这里我只演示在 UnityHub 中创建。

先选择你要使用的 Unity 的版本,然后选择 3D 模板,最后确认创建就行。记得根据自己实际情况修改项目文件位置。

项目文件很大,创建项目需要可能等待几分钟。

在 Unity 中导入 UniVRM unitypackage

在菜单点击 Assets -> Import Package -> Custom Package 导入预先下载好的 UniVRM-0.XX.0_YYYY.unitypackage
导入的文件将在 ../Assets/VRM../Assets/UniGLTF ../Assets/VRMShaders 文件夹中。在 Unity 中导入 UniVRM unitypackage-by.北溟瞬息

点击右下角的 import 按钮。

检查 UniVRM 是否导入成功

如果 UniVRM 导入成功,菜单栏会显示“VRM”菜单。

下面分别是新旧两种版本的样子。

新:

新版本VRM菜单-by.北溟瞬息.png

旧:

旧版本VRM菜单-by.北溟瞬息.png

如果您使用的是Unity-2018,而VRM菜单没有显示:
进入“ProjectSettings-Player-Other Settings-Scripting Runtime Version”,查看“Scripting Runtime Version”是否设置为“.Net4.X equivalent”。


Console(控制台)

在 Unity 项目中发生的错误可以在控制台窗口中显示:

在Unity中打开控制台-by.北溟瞬息.png

单击 Console 窗口左上角的 clear 按钮,查看控制台中是否留下任何错误(红色消息)。在大多数情况下,错误是由 UniVRM 安装失败引起的。安装UniVRM报错-by.北溟瞬息.png

手册

➡ 安装

1.从 Humanoid 模型创建 VRM 文件

准备一个可在 Unity 中以 Humanoid 形式处理的 3D 模型

初次准备

因为

然后,确保包含必要的骨骼,使模型可以被识别为 Humanoid。

Humanoid
你可以将 Humanoid 简单地理解为一种骨骼结构标准,用于对人型模型进行统一,以便于进行重定向,会有比如:骨骼的名称、骨骼链接顺序于骨骼必要性之类的规范化标准。

基本模型
有关可用的基础模型的详细信息,请参见 BaseModel

所需的骨骼

将 FBX 模型导入 Unity

将 FBX 文件夹拖放到 Unity 的 Assets 文件夹中

将FBX模型导入Unity-by.北溟瞬息.png

补充:
官方文档中并没有提供文档中使用的模型资源。官方使用的角色模型是由 黑星红白 创作并由 ニコニ立体 官方发布的免费可商用模型,模型可以在 ニコニ立体 找到。
https://3d.nicovideo.jp/alicia/
请注意下载的文件格式,虽然直接提供了 VRM 格式,但是如果为了学习使用,建议还是和文档中一样使用 FBX 格式进行学习。

Unity

补充:
以下其中一个是我自己打开 Unity 的界面截图(深色界面),另一个是官方文档提供的例图(浅色界面)。由于 Unity 版本不同,文件浏览界面的显示方式不同。
官方例图(旧版本)中,可以直接在列表中点击三角形将资源展开。
而在较新版本的左侧 Project 窗口中,需要选中“alicia”文件夹,然后在右边的文件预览窗口中找到“Alicia_Solid_Unity”。
这个预览的地方在文件名太长的情况看不全文件名,注意区分文件,有一个后缀是 MMD,可以进入修改文件名称状态查看完整名称(双击文件名或按 F2),或者选中文件后在右边的 Inspector (检查器) 窗口查看文件名称。

新版Unity资源界面-by.北溟瞬息.png

旧版Unity资源界面-by.北溟瞬息.png

在 Project 窗口中,选中Alicia_Solid_Unity,这是FBX的资产 Prefab(预制件)。

(新版 Unity 请在旁边的窗口中查找相应资源)

FBX 的材质设置

FBX的材质设置1-by.北溟瞬息.png

如上图所示,默认情况下,FBX 的材质设置为带有默认参数的 StandardShader(仅分配了标准着色器的Color和ColorTexture,没有半透明设置等)。
为了尽量简单地演示 “FBX 转换为 VRM” 的操作,在接下来的示例中我们将材质的着色器设置为 MToon,并将颜色设置为白色。
具体操作方法请继续往下浏览。

补充:
上面的官方示例中是没有丢失贴图的,我复现官方操作时一直是丢失了贴图的状态(模型通体白色)。FBX的材质设置2-by.北溟瞬息.png

下图内容为找回贴图的方式:
根据 FBX 文件实际情况不同,相关设置可能不一样。调整完设置以后,点击 Apply 应用设置,下面的预览窗口才会刷新。找回丢失的贴图-by.北溟瞬息.png

着色器(Shader)
VRM支持三种类型的着色器:MToon,  Unlit 和 Standard。

点击 Extract Materials 按钮,在 FBX 文件中创建 Materials 文件夹。

Extract Materials-by.北溟瞬息.png

补充:这时会弹出选择文件夹的窗口,记得自己手动创建一个文件夹,并且选择这个文件夹,不然之后提取出来的文件是散的,会很乱。示例路径为 /Assets/FBX/Materials
材质导出路径-by.北溟瞬息.png

然后将提取的材质保存到刚创建的 Materials 文件夹中。如果在On Demand Remap(按需重映射)部分已经为每个材质分配了引用,则可以跳过这一步骤。

英文文档中提到:
另一种设置材质的方法是将 Location 为 Use External Materials (Legacy)。但官方文档只关注前一种方法。

进入材质文件夹-by.北溟瞬息.png

进入这个文件夹,把里面的所有材质的 Shader 改成 VRM/Mtoon

将材质地shader改成VRM-Mtoon-by.北溟瞬息.png

补充:可以在文件夹内同时选中所有材质,然后在查看器中同时修改。


Shade Color 切换为白色:

将shader的颜色改成白色-by.北溟瞬息.png

正确设置后的预览效果如下图所示:

正确设置着色器后的效果-by.北溟瞬息.png

关于如何设置 MToon 着色器的更多细节,请参考MToon设置

因为是步骤说明,所以我们先继续往后。

将 fbx 设置为 humanoid

fbx 的 Animation Type 默认设置是 generic。

fbx 的 Animation Type 默认设置是 generic-by.北溟瞬息.png

将它切换为 Humanoid。

将它切换为 Humanoid-by.北溟瞬息.png

并且点击 Apply 按钮应用设置。

你需要重新选中 Alicia_Solid_Unity 这个资源文件才能找到这个设置。(官方没说,搞得我找半天)
上面两图一个是旧版界面,一个是新版界面,除了颜色,基本没什么区别。

Humanoid
此时,fbx importer(FBX导入器) 会自动推测 Humanoid 骨骼的分配。有时可能会失败,并且,即使程序成功执行,也可能出现最终效果错误的情况。

点击 Configure 以配置你的模型。

将弹出一个消息框,询问您是否要保存当前场景。单击 save 保存它。

点击【Configure】配置模型-by.北溟瞬息.png

补充:我复刻操作但是没看到所说的这个保存当前场景的询问,可能是演示人员修改了其他设置没有保存,所以进入 Configure 界面时弹出了提示。

BoneMapping(骨骼映射)-by.北溟瞬息.png

请检查并确认骨骼分配情况。

上面这个图,在官方文档里就像这样这么圈了划了几下,也没说怎么设置之类的,估计意思就是让你把错误的骨骼重新配置以下,这东西我也不会用,反正设置完以后点右下角的 Done 就可以退出这个界面了。

BONE(骨骼)
下巴骨骼可能被分配到前发际。
眼睛骨骼可能被分配到眼睛高光。
注意这些细节是否符合你需要的效果。


将 prefab(预制件) 放入场景中

将 prefab(预制件) 放入场景中-by.北溟瞬息.png

将预制件从 “Project”(项目) 窗口拖到 “Hierarchy”(层次结构) 窗口。

新版本 Unity 直接把资源从 Poject 窗口拖到 Hierarchy 的层级菜单里,这样的话,角色会被放置在空间原点。如果直接拖动到3D窗口,角色会被放置在鼠标位置。

老版本的 Unity 直接从左边的大纲(文件树状图)里把 FBX 文件拖拽进去(文章开头也有提到两个版本的界面区别),官方文档放的老版本 Unity 的截图太长了这里就不放了。
官网的页面大改过一次(大概24年初),这一改,居然把这个位置的老版本 Unity 的示例截图弄丢了。这官方真就是个草台班子啊。本来还想把老版本的例图放上来对比的。


确认 fbx 的 blendshpae 法线是否混乱


以下是 BlendShape 中出现奇怪阴影时的对策。

检查并确认BlendShape

从菜单中将模型导出为VRM

新版本UniVRM导出-by.北溟瞬息.png

点击“VRM0”->Export to VRM 0.X”,弹出对话框。

旧一点的版本是,点击“VRM0”->“xport UniVRM-0.XX.X”。如下图:
旧版本UniVRM导出-by.北溟瞬息.png
再老一点的版本是,点击“VRM” -> “UniVRM-0.XX.X” -> “Export humanoid” 如下图:
更旧版本UniVRM导出-by.北溟瞬息.png


【Export Root】-by.北溟瞬息.png

点击将 Export Root 栏右边的圈,选中 prefab 展开的 GameObject ,将其设置到 Export Root。

ERROR(错误)
在导出对话框中执行各种错误检查。
    1.必须要解决的错误消息会显示为“红色”
    2.如果要立即导出VRM,则可以忽略警告的消息显示为“黄色”
导出对话框

补充:
如果导出前你没选中角色模型,下面则会提示:
中文:请为模型导出设置 ExprotRoot
日语:ExportRoot をセットしてください
英语:Please set up a ExportRoot for model export
右上角可以切换语言,但是窗口界面可能不会立刻刷新,需要重新打开窗口。
如果你在导出时已经选中了角色模型,则会跳过这个窗口进入下一个阶段

VRM导出时的错误信息-by.北溟瞬息.png

请输入许可证信息。如果没有红色消息,则可以点击 Export(导出) 按钮。为了进行下一步操作,请创建 Assets/models/vrm 文件夹并将其导出到该文件夹中。

导出位置
您可以选择将导出的文件放置在 Unity 中的 Assets 文件夹内或外。如果选择放置在 Assets 文件夹内,导出后会立即进行导入(导入较为耗时)。并且如果选择放置在 Assets 文件夹内,建议创建一个新的、专门的文件夹,以便更清晰地管理。


导出设置

制成T-Pose-by.北溟瞬息.png

Make T-Pose(制成 T-Pose)
如果模型不处于T形姿势,请单击“Make T-Pose ”以制作一个T形站姿姿势。
该功能可以将角色模型自动转换为 T-Pose。如果不使用此选项,自己在场景中手动调整成 T-Pose 的外观也没有问题。

Pose Freeze(姿态冻结选项框)
“Pose Freeze”用于导出过程中的模型规格化。新版本将自动勾选此复选框,以检查将自动检查导出目标是否需要规范化(在设置 ExportRoot 后自动检查是否存在旋转和缩放)。

2.设置VRM模块

VRM模型

上一节中,我们介绍了如何将模型输出为 VRM 格式的 prefab(预制文件)。

只要将 VRM 文件拖拽到 Unity 的 Assets 文件夹中,就会自动生成与 VRM 文件关联的 prefab(预制文件)。

导入VRM后的文件结构官方例图-by.北溟瞬息.png

导入VRM后的文件结构新版例图-by.北溟瞬息.png

只要将 VRM 文件拖拽到 Unity 的 Assets 文件夹中,就会自动生成与 VRM 文件关联的 prefab(预制文件)。

在上一节中,我按照官方文档说明,创建了“/Assets/models/vrm”文件夹并把VRM导出到这个文件夹,但是官方给的图有点对不上。官方的在图例是放在了“/Assets/vrm”。

以防图片看不清,再次特别提醒:在上图中,你选中文件以后,可以在资源管理器窗口底下一栏查看到文件的后缀名(红字标注位置)。


在场景中打开VRM预制件

FileNew Scene

将 Prefab(预制文件) 展开到场景中。

新建场景时会提示你是否保存当前的场景,如果保存了的话,场景文件会存在 Assets\Scenes 文件夹里。

一个场景在没做任何变动的情况下,你切换或者新建一个其他场景时,不会提示你保存,如果是新建且未变更的场景,会直接被丢弃掉,不会保存。

你也可以使用之前导入了 FBX 的场景文件,但是要 Hierarchy(层级) 窗口中把角色模型移除,这个角色模型是之前的 FBX 文件预制件,没有 VRM 预制件的那些脚本组件。不要从 Project 窗口删除,这会直接把文件从你的文件夹丢进回收站,从而导致你的层级窗口的对象找不到文件,导致文件名件变成红色。


编辑VRM独有的设置

在菜单栏点击 【File 】→【New Scene 】创建一个新场景或使用现有场景。

然后将 Prefab(预制文件) 拖到 Hierarchy 窗口(这样的话,角色模型会自动放置在场景中间)。

编辑VRM独有的设定-by.北溟瞬息.png

通过在 Hierarchy(层级) 窗口中点击选中 VRM 预制件,可以在 Inspector(检查器) 窗口中显示出 VRM 模型的信息。请注意,物理骨骼设置在名为 secondary 的游戏对象中。此外,在VRM元数据中,请确保设置了标题、作者和授权信息 特别是许可证信息,这至关重要!(实际上不影响在程序上的使用,这是出于版权的尊重。)

补充:
图里文件右上角的蓝色加号似乎是代表新文件的意思,我之前从Project窗口删过一次文件,从回收站还原文件以后被识别成了新文件。

除此之外,要使VRM模型完全功能正常,请设置以下组件:

请根据需要进行设置。

再次导出VRM文件

所有设置完成后,在 Hierarchy 中选择模型(导入的角色的 Prefab,选中最上层的父级游戏对象,不要选成展开的次级文件),然后再次从 VRM0 -> export UniVRM-0.XX 导出模型。

新版本UniVRM导出-by.北溟瞬息.png

老一点的版本则是 VRM - UniVRM-0.XX - Export humanoid

不同版本的导出菜单稍有不同,上一节中有提过,之后不会再赘述,之后关于导出的文字描述我一般会直接复制官方文档的版本,但是截图我会使用自己截的。所以可能会出现,文字描述和图片的版本不一致的情况.

Pose Freeze (姿态冻结)
“Pose Freeze” 用于在导出过程中对模型进行规范化。
当设置ExportRoot时,会检查层次结构中是否存在旋转和缩放,从而自动设置这个复选框。
即便进行了初次的标准化,但是
        •如果之后添加了附件(如配饰),那么也需要进行姿态冻结。
只需重新设置ExportRoot,系统就会自动进行判断。
        •此外,还支持 BlendShape 烘焙功能。

完成!

VRM 文件已经准备好。尝试将 VRM 文件导入到支持 VRM 的应用程序中!

在播放模式检查你的VRM

官方文档这一节的各种细节严重缺失,我补充了大量细节,并重写了一部分内容。如果对内容有疑问,可以适当参考官方文档。

在本节中,我们假设您已经制作了一个 VRM 模型,并希望在 Play mode(播放模式)下进行测试。

播放模式
如果没进入播放模式,场景就像是游戏被暂停了一样,场景中的东西虽然可以编辑,但不会自发运动。
只有进入播放模式,vrm 相关功能才会开始运作。比如视线跟随、物理骨骼模拟。同时,请确保模型相关功能设置正常。

检查视线追踪效果

在 VRMLookAtHead->target 中设置 AnimationClip/AnimationController(该步骤可忽略):

首先,您可以为模型创建或选择适当的 AnimationClip(动画剪辑) 和 AnimationController(动画控制器),以便控制模型的动作。

其实可以不需要 AnimationClip/AnimationController,这相当于是自己做一套预设动作,以检查模型在运动时的状态。不知道这是什么东西也没关系,因为这不属于VRM的内容, 所以不影响后续工作。因为在后续的操作中,我们可以自己手动去控制视线目标。因此可以不需要这个动作预设。

设置 VRMLookAtHead 的 Target:

接着,您需要在 Hierarchy(层级) 中选中角色模型,随后在软件右边的 Inspector(检查器) 里找到 VRMLookAtHead 组件。在组件中设置目标对象。这个目标对象是角色视线跟踪的焦点

您可以创建一个简单的 GameObject,例如Cube(立方体),作为追踪的目标

创建方法如下图所示,你可以使用其他 GameObject。但此处我们使用Cube作为追踪目标。

创建GameObject-Cube-by.北溟瞬息.png

设置Target-by.北溟瞬息.png

配置Head组件:

在 VRMLookAtHead 组件中找到 Head 部分,并确保已经正确配置了头部组件。设置好这个选项以后,你可以在下面的独立预览窗口中看到,视角所动到了角色的头部。

这个 Head 选项用于定位模型的头部,以便在下面的预览窗口中聚焦显示头部模型,可以在编辑与测试时提供一个预览视角,除此之外暂时不清楚有没有别的作用。

放置摄像机-by.北溟瞬息.png

在Unity中测试动态效果:

点击窗口上方的三角形播放按钮进入播放模式,3D视图会自动切换到 Game 标签。在这个标签中,你无法移动视角或编辑物体。请切回 Scene 标签,然后拖动你所设置的 GameObject 来测试模型的视线追踪效果。

你可以在之前设置 Head 选项后出现的预览窗口中检查视线追踪效果。

或者在进入播放模式前,调整好摄像机的位置。通过 game 标签页查看效果。或直接在 Scene 标签页查看。

在播放模式中测试-by.北溟瞬息.png

如果你发现眼睛没有跟随运动,请检查 【VRM Look At Applyer 】中的设置。如下图所示。

正确设置眼睛高光-by.北溟瞬息.png          区分眼睛左右-by.北溟瞬息.png

将相关组件配置好以后,在场景中检查模型的运动情况。模型的眼睛将在播放模式下追踪目标位置。你可以拖动对象的位置来测试模型的眼睛是否不断追踪对象。您可以在 Inspector 窗口下方的预览窗口查看模型的近距离面部细节。

确认角色表情

为了测试模型的表情,我们提供了两个简单的测试脚本,名为"AIUEO" 和 "Blinker"。在设置好 Blender Shape 后,在角色模型的 Inspector(检查器) 窗口底部点击 Add Component(添加组件),然后添加 AIUEO 脚本,或者直接将脚本拖放到 Inspector(检查器) 中。

设置 AIUEO 脚本后,可以在场景中创建依次切换aa、ih、ou、E、oh的嘴唇动画。同样,如果设置 Blinker,则可以创建自动定期播放的眨眼动画。有关如何使用这些脚本的更多详细信息,请参阅 runtime VRM loader sample(下载UniVRM-RuntimeLoaderSample-0.XX)。”

我找来找去只找到 Blinker 的脚本,根本没有 AIUEO 的脚本,看描述应该是需要另外下载 UniVRM-RuntimeLoaderSample。

双击 BlendShapeAvatar 字段进入 BlenderShape 编辑界面,设定角色的表情。(不是点右边的圆圈,而是直接双击文字)只有将 BlendShape 设置正确,才能实现表情动画。

双击 BlendShapeAvatar 字段进入BlenderShape编辑界面-by.北溟瞬息.png

添加脚本:

添加Blinker脚本-by.北溟瞬息.png

VRM表情测试1.png