# VRM官方文档-汉化加强版 -【UniVRM】 # Install(安装) # Unity 的版本 ### **UniVRM-0.80.0 ~**[​](https://vrm.dev/univrm/install/unity_version/#univrm-0800- "UniVRM-0.80.0 ~ への直接リンク") 结束了对 Unity-2018.4LTS 的支持,开发版本更新为 `Unity-2019.4LTS` 。
**Unity 版本****备注**
Unity-2019.4 LTS用于开发 UniVRM 的版本
Unity-2020.4 LTS用于发布时进行 UPM 测试的版本
Unity-2021如果发生了问题,请到 [github](https://github.com/vrm-c/UniVRM/issues) 报告
### **UniVRM-0.56.0 ~ 0.79.0**[​](https://vrm.dev/univrm/install/unity_version/#univrm-0560--0790 "UniVRM-0.56.0 ~ 0.79.0 への直接リンク")
Unity 版本兼容性Scripting Runtime VersionUPM备注
Unity-2017×-
Unity-2018.1×-
Unity-2018.2×-
Unity-2018.3.Net4.X equivalent C#7.3。可能可以工作,但未经验证
Unity-2018.4 LTS.Net4.X equivalent 用于当前的 UniVRM 开发
Unity-2019.1.Net4.X equivalent
Unity-2019.2- 由于不再支持 .Net3.5,因此不需要设置 Scripting Runtime Version 版本
Unity-2019.3- 从 2019.3.4f1 开始, UPM(github的子文件夹)可正常运行
Unity-2019.4 LTS-用于发布时进行 UPM 的测试
Unity-2020-Editor機能(Prefabなど)が一部動作せず。`UniVRM-0.69.0` で修正
### **~ UniVRM-0.55**[​](https://vrm.dev/univrm/install/unity_version/#-univrm-055 "~ UniVRM-0.55 への直接リンク") - 支持Unity-5.6及以上版本 # .unitypackage 文件 请从 [ ](https://github.com/vrm-c/UniVRM/releases)[https://github.com/vrm-c/UniVRM/releases](https://github.com/vrm-c/UniVRM/releases) 下载 `unitypackage`。然后,请按照顺序安装两个包,首先是`UniGLTF_VRMShaders`,然后是`UniVRM`。
UniGLTF\_VRMShadersUniVRMVRM
for GLTFinstall
for VRMinstallinstall
for VRM1install install
- `Sample` 包已被废弃,但仍然包含在内。 - 可以通过`UPM` 的 `Sample` 功能进行安装。 ### **获取.unitypackage**[​](https://vrm.dev/univrm/install/univrm_install/#unitypackage-%E3%81%AE%E5%85%A5%E6%89%8B "unitypackage の入手 への直接リンク") [https://github.com/vrm-c/UniVRM/releases](https://github.com/vrm-c/UniVRM/releases) `UniVRM-0.XX.X_XXXX.unitypackage` ### **安装前的准备** - 创建一个新的 Unity 项目 - 将 `prejectsetings` - `player` - `other sheets` - `rendering` - 将 `colorspace` 设置为 `Linear`(推荐) [![安装UniVRM前的准备1-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/WAJP8wOhcIC80ZVm-univrm1-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/WAJP8wOhcIC80ZVm-univrm1-by.png)

**如果你的Unity版本是(Unity-2018.3, Unity-2018.4, Unity-2019.1)** 请将 `ProjectSettings` - `Player` - `Other Settings` - `Scripting Runtime Version` 设置为 `.Net4.X equivalent`。

**现有项目** 如果存在旧 UniVRM 版本,请在安装前删除 `Assets/VRM`、`Assets/UniGLTF` (如果存在)、`Assets/VRMShaders` (如果存在) 和 `Assets/Meshutility` (如果存在)。有关更多信息,请参阅[卸载UniVRM](https://vrm.dev/en/univrm/install/univrm_uninstall/)

### **导入 unitypackage** 在菜单栏找到 `Assets` - `Import Package` - Custom Package...,并选择 `UniVRM-0.XX.X_XXXX.unitypackage`。 `Assets/VRM`、`Assets/UniGLTF` 和 `Assets/VRMShaders` 三个文件夹将会被导入到Unity项目中。 [![安装UniVRM前的准备1-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/WAJP8wOhcIC80ZVm-univrm1-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/WAJP8wOhcIC80ZVm-univrm1-by.png) ### **检查UniVRM是否导入成功** 如果UniVRM导入成功,菜单栏显示“VRM”菜单。 [![新版本UniVRM导出-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/GB8Udiqy07Hrhk8P-univrm-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/GB8Udiqy07Hrhk8P-univrm-by.png) 旧版本的菜单: [![旧版本UniVRM导出-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/Z8t5uOxgSIyk4YQB-univrm-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/Z8t5uOxgSIyk4YQB-univrm-by.png) 如果菜单未显示: - 打开 Console:点击 Console 窗口左上角的clear 按钮,查看是否出现任何错误(红色消息) [![打开Console-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/hvHlUxBORpLLl8pJ-console-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/hvHlUxBORpLLl8pJ-console-by.png)[![检查Console是否有报错-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/xOiZAte4Cf2yVTR1-console-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/xOiZAte4Cf2yVTR1-console-by.png) ### **相关章节** [如何制作VRM文件](https://docs.vrcd.org.cn/books/vrm-vrm/chapter/vrm) [导入VRM](https://docs.vrcd.org.cn/books/vrm-univrm/page/vrm-rCZ) # UPM [upm](https://vrm.dev/en/api/upm/)

这种安装方式涉及 Git 以及其他相关知识。如果不想学,那直接用 [.unitypackage](https://vrm.dev/en/univrm/install/univrm_install/) 安装就行。

# 卸载UniVRM 请删除以下文件夹:
文件夹版本备注
Assets/VRM UniVRM-0.XX.0.unitypackage
Assets/UniGLTFv0.63.0 及以上UniVRM-0.XX.0.unitypackage
Assets/VRMShadersv0.56.0 及以上UniVRM-0.XX.0.unitypackage
Assets/MeshUtilityv0.59.0 至 v0.63.0UniVRM-0.XX.0.unitypackage
文件夹版本备注
Assets/VRM.Samples UniVRM-samples-0.XX.0.unitypackage
Assets/StreamingAssets/VRM.Samples UniVRM-samples-0.XX.0.unitypackage
如果你想在 Unity 项目中将 UniVRM 升级到最新版本,建议删除上面提到的所有文件夹,因为不同版本之间文件/文件夹的位置可能会发生变化。 - 要删除 Unity Package Window(包管理器窗口)安装的软件包,请点击 UPM 窗口软件包界面右下方的 remove 按钮。 # Export(导出) # VRM导出对话框
术语含义
Root对象的最顶层父级
Hierarchy包含 Root 及其子项
## v0.58~ [![VRM-export062_dialog.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/D55oeRTRVxYwkgvL-vrm-export062-dialog.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/D55oeRTRVxYwkgvL-vrm-export062-dialog.png) 导出对话框基于 Unity 的 [EditorWindow](https://docs.unity3d.com/ScriptReference/EditorWindow.html) #### **如何使用** **VRM导出窗口** 通过VRM窗口打开“VRM0 -> Export UniVRM-0.XX” [![新版本UniVRM导出-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/GB8Udiqy07Hrhk8P-univrm-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/GB8Udiqy07Hrhk8P-univrm-by.png) 旧版本的窗口: [![更旧版本UniVRM导出-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/UCuyc8MI4BtL49SK-univrm-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/UCuyc8MI4BtL49SK-univrm-by.png) 可以直接在“Project 窗口”中选取可导出的目标。不一定要先把预制件放在场景中。 **设置导出目标** - 拖拽 [![设置导出目标-Drag.gif](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/3Pg38tvT49DAeBKH-drag.gif)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/3Pg38tvT49DAeBKH-drag.gif) - 选择 [![设置导出目标-Selector.gif](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/Be9F6U4OjVptKGii-selector.gif)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/Be9F6U4OjVptKGii-selector.gif) **有效的 ExportRoot 条件** 如果满足以下条件,将显示ExportRoot的设置屏幕: - 必须是层级关系中最顶层对象(没有父级对象) - Root 的旋转和缩放为默认值(允许更改平移) - 是人形(添加了 Animator 组件并且设置了 Humanoid.Avatar) - 面朝Z+方向(由左右脚的骨骼位置判定) - 在层次结构中包含活动(可识别)网格 **导出设置界面** 请设置`元数据(Meta)`和`导出选项`。如果有警告,请自行决定是否需要进行更正,如果没有错误信息显示,请直接点击对话框右下角的`export`按钮。有关VRM模型文件大小的详细信息,请参考[这里](https://docs.vrcd.org.cn/books/vrm-univrm/page/vrm-XiV)。 #### **导出选项** 如果选中以下导出选项,将在导出之前执行额外的处理步骤。

以下这些选项可能和新版本的选项有细微的差别

##### **Force T Pose(强制 T-Pose )** 在导出之前强制将模型调整为 T-Pose。如果您已经手动将模型调整为了大致的 T-Pose,那么无需勾选此项。 ##### **Pose Freeze(姿势冻结 )** 对模型进行规范化处理。如果模型已经被规范化处理过,则不需要再次进行处理,但如果添加了未经规范化处理的部件,则需要进行处理。判断模型是否已经被规范化的方法是检查所有GameObject的旋转是否为0,缩放是否为1。

在 v0.58 版本中,系统可以自动识别导出目标是否需要 PoseFreeze。

##### **UseExperimentalExporter(使用实验性导出器)** 这是导出器的序列化程序版本。无论是否选择此选项,都不会影响输出。 ##### **UseSparseAccessor (使用稀疏访问器)** 如果有很多 BlendeShape,则可以减小文件大小。 ##### **OnlyBlendshapePosition (仅导出BlendShape位置)** 仅导出 BlendShape 的位置信息,不包括法线和切线。可以缩小文件大小。请注意,如果导出目标是由 UniVRM-0.53 或更早版本创建的,则在导入时可能会出现错误。 ##### **ReduceBlendshape (减少BlendShape)** 不导出未被 BlendShapeClip 设置所引用的 BlendShape。可以减小文件大小。 ##### **ReduceBlendshapeClip(减少BlendShapeClip)** 不导出预设为 Unknown的BlendShapeClip。与 ReduceBlendshap 配合使用。 ##### **RemoveVertexColor(移除顶点颜色)** 不导出顶点颜色。在GLTF中,并没有禁用顶点色的设置。在UniVRM中,只有unlit材质支持顶点色。 #### **错误项** 每个版本的判定
message0.560.570.58
The Root translation, rotation and scale will be dropped. Root 的平移、旋转、缩放将被删除errorwarnerror(移動は可) (允许有位移)
Jaw bone 下巴骨骼 warnwarnwarn
Same name bone 同名骨骼 errorwarn(自動リネーム) (会自动重命名) warn
Vertex color 顶点颜色 warnwarnwarn
Unknown shader 为止着色器 warnwarnwarn
Require source 需要源文件 errorerrorerror
Require no parent 不需要父级 okokerror(NEW)
Require Z+ forward 需要 Z+ 朝向 okokerror(NEW)
Require animator 需要动画器 errorerrorerror
Require humanoid avatar 需要人形虚拟形象 errorerrorerror
Require Title/Version/Author 需要标题/版本/作者(缺少必要的元数据) errorerrorerror
No active mesh 没看有活动网格 errorerrorerror
Prefab export 预制体导出 errorerrorok(NO\_ACTIVE\_MESHだった) (无活动网格)
Springbone validation 弹簧骨骼验证 okokwarn

有Error提示会阻止导出,有Warn提示依然能导出,且一部分情况程序会自动修正。

##### **Require source【需要源文件】** 请在场景中选择一个可以导出为 VRM 文件的有效对象 ##### **Require animator.【需要动画器】** Root 的 Animator 没有 Avatar(非人形化身/non-humanoid)。 ##### **Require animator.avatar【需要 Animator.avatar 】** Root的Animator中找不到avatar(非人形化身/non-humanoid)。 ##### **Animator.avatar is not valid.【Animator.avatar 无效】** Root的Animator.avatar不正常(非人形化身/non-humanoid)。 ##### **Animator.avatar is not humanoid. Please change model's AnimationType to humanoid.** **【Animator.avatar 不是人型化身。请将模型的 AnimationType (动画类型)更改为 humanoid】** Root 的 Animator 的 avatar 不是 `humanoid`。请在 FBX 的 import 设置中的 rig 中改为 `humanoid`。 从检查器(Inspector)面板更改设置:`FBX Import` -> `rig` -> `AnimationType` ##### **Require Title【需要标题信息】** 请在对话框中输入此模型的标题。 ##### **Require Version【需要版本信息】** 请在对话框中输入此模型的版本。 ##### **Require Author【需要作者信息】** 请在对话框中输入此模型的作者。 ##### **No active mesh【无活动网格】** 层级中没有活动网格。 ##### **FileName ‘{0}’ is too long.【文件名“{0}”太长】** 材质、纹理和网格的名称太长。 请重命名。 ##### **The Root translation, rotation and scale will be dropped【根平移、旋转和缩放将被删除】** Root 中设置了移动、旋转和缩放值。如果直接导出,Root 的 TRS 将会被移除。关于移动,可能大部分情况下没有问题,但是对于旋转和缩放,可能不会按照预期进行,请注意。

TRS 指 Translation(平移)、Rotation(旋转)和Scale(缩放)

##### **Jaw bone is included. It may not what you intended. Please check the humanoid avatar setting screen【包含下巴骨骼。这可能不是你想要的。请查看 humanoid.avatar 设置界面】** humanoid设置中包括了下巴。在导入FBX文件时,有可能会自动分配下巴骨骼。因此,面部的部分(例如刘海)可能会被错误地识别为下巴并分配给下巴骨骼。如果错误地将前发等部位分配给下巴,并且下巴的姿势进行变化,刘海可能会出现异常的运动。请在检查器中的 Inspector FBX Importer -> rig 中移除这个设置。 ##### **There are bones with the same name in the hierarchy. They will be automatically renamed after export【在层级结构中存在相同名称的骨骼。它们将在导出后自动重命名】** 如果模型中存在相同名称的骨骼,允许导出该模型。在导出对话框中只会给出警告消息,这些骨骼将被自动重命名。 ##### **This model contains vertex color【此模型包含顶点色】** 如果看到此消息,则表示层次结构中存在包含顶点颜色的网格。
顶点色处理方式行为
UniVRM-0.53以前不支持忽略顶点色效果
UniVRM-0.54~应用显示顶点色效果
如果使用了 Unlit 材质,则没有可以禁用顶点颜色使用的设置。如果不需要顶点颜色,可以选择"Remove Vertex Color"(删除顶点颜色)选项来直接从模型中删除顶点颜色数据。 ##### **unknown material '{0}' is used. this will export as Standard fallback 【使用了未知材质'{0}'。此材质导出为Standard(标准材质)备用】** standard、unlit和 MToon 之外的材质将会变成standard。 ### **v0.57** [![VRM-v0.57export_dialog.jpg](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/0gDG0PM5lzWo0hBu-vrm-v0-57export-dialog.jpg)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/0gDG0PM5lzWo0hBu-vrm-v0-57export-dialog.jpg) 使用 Unity 的 [ScriptableWizard](https://docs.unity3d.com/ScriptReference/ScriptableWizard.html) 创建屏幕。将在 v0.58 或更高版本上改进对话框。 #### **新版本的导出对话框** **[![新版本VRM的导出窗口-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/85m4rUtWeTEjzdk5-vrm-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/85m4rUtWeTEjzdk5-vrm-by.png)** --- # VRM文件大小 由于 VRM 是基于 GLB 的格式, `导出的VRM文件大小` => `glb 的大小` `glb` =>` json + binary` json 是文本格式,通常不会超过1MB。 其中,二进制文件中主要包括: `image` 和 `mesh`。 以一个包含5万个顶点和5万个三角形的模型为例,我们来计算其大致容量。 #### **Image** Image 数据包含`Texture(纹理)`(材质中使用的贴图)和`缩略图`(在 VRM 元数据中,用于提供预览的图片)。这些图像以 PNG(JPG)的形式存储。

在 v0.56 中,模型中的大纹理(例如 4096x4096)无法导出为较小的纹理(例如通过纹理导入器设置将其设置为 1024x1024 -> MaxSize)。我们已在 v0.58 中修复了此问题。

[https://github.com/vrm-c/UniVRM/issues/502](https://github.com/vrm-c/UniVRM/issues/502) #### **Mesh** 包括索引缓冲区(Index Buffer)和顶点缓冲区(Vertex Buffer)。 索引缓冲区(Index Buffer) 索引缓冲区使用整数(Int)数组。 对于一个含有5万个三角形的模型, `50000 x 4(Int = 4字节) x 3(三角形的3个顶点)=> 使用0.6MB 的容量。`

虽然GLTF规范中也支持无符号短整数(unsigned short),但UniVRM的导出器目前不支持。由于最多只能存储65536个顶点,因此无法存储50000个三角形。

#### **顶点缓冲区(Vertex Buffer)** 一个顶点包括以下内容: ``` { float3 Position; // 頂点位置 4(floatサイズ) x 3(xyz) => 12byte float3 Normal; // 頂点法線 4(floatサイズ) x 3(xyz) => 12byte float2 TEXCOORD_0; // 頂点UV 4(floatサイズ) x 2(xy) => 8byte short4 JOINTS_0; // 頂点BoneIndex 2(shortサイズ) x 4(4boneまで) => 8byte float4 WEIGHTS_0; // 頂点Weight 4(floatサイズ) x 4(4boneまで) => 16byte } ```

某些模型可能包含顶点颜色或辅助 UV(不支持),因此所需大小可能会有所变化。

在 UniVRM 中,切线(float4)可以在 Unity 中计算,而不是存储在 GLTF 中。通过给定顶点法线和 UV,可以使用 MIKK T Space 算法获取切线。

对于一个含有5万个顶点的模型 `50000 x (12 + 12 + 8 + 8 + 16) => 2.8MB` 的使用容量。 #### **基本大小** 如上所述,模型的基本大小是 `总图像大小 + 索引缓冲区 + 顶点缓冲区`。具有 50k 个顶点和 50k 个三角形的模型的基本大小为 `3.4MB + 总图像大小`。接下来,我们将介绍 BlendShape 的大小计算,它在某些情况下可能导致总大小爆炸。 #### **BlendShape(MorphTarget)的容量** ``` // ブレンドシェイプ頂点 { float3 Position; // 頂点位置 4 x 3 => 12byte. 必須 float3 Normal; // 頂点法線 4 x 3 => 12byte. オプション float3 Tangent; // 頂点Tangent 4 x 3 => 12byte. 記録しない } ``` 每个BlendShape使用的容量为 `50000 x (12 + 12) => 1.2MB`。 假设有20个BlendShape,则使用的容量为 `50000 x (12 + 12) x 20 => 24MB`。 假设有60个BlendShape,则使用的容量为 `50000 x (12 + 12) x 60 => 72MB`。 注意,在以下情况 - 当存在大量 BlendShape - BlendShape 所在的位置与非 BlendShape 所在的位置未分割时 容量会变得很大。接下来是关于减少BlendShape容量的方法。

译者补充: 曾经看过小K直播姬官方提供的一个规范文档,里面就有提到过要把面部网格单独分开(不予其他网格合并在一起),虽然不分开也能使用,且不会有任何问题,但依然为了省资源做了规范。

##### **减少BlendShape容量的方法** 在[导出对话框](https://docs.vrcd.org.cn/books/vrm-univrm/page/vrm)中,有几个与BlendShape大小优化相关的选项。 **导出选项** 为了减小 BlendShape 的大小,前两个选项 `ReduceBlen dshape` 和 `ReduceBlendshapeClip` 是最安全的方法(no errors)。我们正在使用 `UseSparseAccessor` 来解决一些 VRM loaders的导入问题(UniVRM loader 没有问题)。如果模型是由UniVRM-0.53或更早版本制作的,则 `OnlyBlendshapePosition` 会导致导入错误。 **ReduceBlendshape(减少BlendeShape)** 未被BlendShapeClips引用的BlendShapes将不会被导出。可以减小文件大小。 **ReduceBlendshapeClip(减少BlendeShapeClip)** 属于Preset.Unknown的BlendShapeClip将不会被导出。与ReduceBlendshape结合使用。 **UseSparseAccessor(使用稀疏访问器)** 在GLTF中使用稀疏访问器功能:仅记录具有非零值的BlendShape顶点。 如果模型包含多个BlendShape,启用此选项可以帮助减小文件大小。

正在修复中:存在GLTF的兼容性问题,会导致非UniVRM的加载器出现错误。

``` // ブレンドシェイプ頂点 { int Index; // 有効なブレンドシェイプの index => 4 float3 Position; // 頂点位置 4 x 3 => 12byte. 必須 float3 Normal; // 頂点法線 4 x 3 => 12byte. オプション float3 Tangent; // 頂点Tangent 4 x 3 => 12byte. 記録しない } ``` `BlendShape的有效顶点数 x (12 + 12 + 4) => ?MB` - 只是保存方式有所变化 **OnlyBlendshapePosition(仅导出BlendeShape Position)** 不导出 BlendShape 的 Normal 和 Tangent。可减小文件大小。

请注意,UniVRM-0.53 之前的版本在导入时会出现错误。

**MESHUTILITY:拆分带/不带BlendShape的网格** 例如,一个模型的网格包含50k个顶点。其中有10k个(带有BlendShape)在面部,40k个(不带BlendShape)在身体上。 分割后设置一个BlendShape只需要:`10000 x (12 + 12) => 0.24MB` 分割前设置一个BlendShape需要:`50000 x (12 + 12) => 1.2MB`

运行时性能也将受益于这种网格分割。但是由于渲染网格的数量增加,Draw调用可能会增加。

[Mesh Utility(面向开发,无翻译)](https://vrm.dev/gltf/mesh_utility/) #### **总结** 如果你的 VRM 文件体积过大,首先请检查 BlendShape,其次是纹理图像和预览图。 # Import(导入) # VRM导入 ### **在编辑器模式下导入VRM文件** ##### **1.在Unity中创建一个空项目** **[![创建Unity项目-by.北溟瞬息](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/veTLf5QZgSRzDhvA-a1ae387d7a8b2080d45798f3f2b71194140465531.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/veTLf5QZgSRzDhvA-a1ae387d7a8b2080d45798f3f2b71194140465531.png)** ##### **2.将UniVRM包导入到新建的工程中** 从[UniVRM/releases](https://github.com/vrm-c/UniVRM/releases)下载最新的`unitypackage`并安装,会生成路径为 `Assets/VRM`、`Assets/UniGLTF`和`Assets/VRMShaders` 的文件夹。如果要替换新版本的 UniVRM,建议在导入包之前删除现有的 `VRM`、`UniGLTF`、`VRMShaders` 和 `MeshUtility` 文件夹(如果有的话)。 [![导入unitypackage-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/jEs6kwp792XtoakM-unitypackage-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/jEs6kwp792XtoakM-unitypackage-by.png) ##### **3.导入 VRM 文件到 Unity** **只要将VRM文件拖拽到Unity的Assets中,会自动生成与VRM文件关联的预置文件(prefab)。** [![导入VRM-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/wvrF6aOiOPW3oIdO-vrm-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/wvrF6aOiOPW3oIdO-vrm-by.png) 通过 `File` - `New Scene` 创建一个新的场景,或者使用一个现有的场景,然后将 VRM 生成的 Prefab 放置在场景中。将资源拖到层级窗口,就可以看到模型,如下图所示: [![将生成的Prefab放置在场景,中拖到层次窗口-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/CQDCfjYc8P5fvgho-prefab-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/CQDCfjYc8P5fvgho-prefab-by.png) 在左边的层级窗口(Hierarchy)中选择读取的模型数据,就会在右边的监测器(Inspector)中显示各种信息。 [![vrm_settings.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/ImeaWu35lwDzudz0-vrm-settings.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/ImeaWu35lwDzudz0-vrm-settings.png) #### **相关部分** - [VRM的设置](https://docs.vrcd.org.cn/books/vrm-vrm/page/2vrm) - [VRM导出 ](https://docs.vrcd.org.cn/books/vrm-univrm/page/vrm) # Prefab导入和覆盖问题的注意事项 ### **0.49:** 当使用 Unity 编辑器导入 VRM 文件时,如果 `Assets` 文件夹中已存在 Material 和 BlendShapeAvatar,则不会进行覆盖。在这种情况下,Prefab 中的 Material 和 BlendShapeAvatar 的引用将设置为引用现有文件。 ### **0.46:** 当使用 Unity 编辑器导入 VRM 文件时,如果 `Assets` 文件夹中已存在 Material、BlendShapeAvatar 和 BlendShapeClip,则不会进行覆盖。但是,Mesh、Texture 和 Prefab 将被覆盖。 考虑到用户可能对 Material、BlendShapeAvatar 和 BlendShapeClip 进行了自定义设置,已存在的 Material、BlendShapeAvatar 和 BlendShapeClip 文件不会被覆盖。如果要进行覆盖,请在导入之前将它们删除。 ### **0.45 及之前版本:** 当使用 Unity 编辑器导入 VRM 文件时,Material、Mesh、Texture、BlendShape 和 Prefab 将被覆盖。 # BlendShape(混合形状) # BlendShape的设置 UniVRM v0.45 引入的新特性 - [在检查器中设置BlendShape](https://docs.vrcd.org.cn/books/vrm-univrm/page/blendshape-v045) - [BlendShape 状态](https://docs.vrcd.org.cn/books/vrm-univrm/page/blendshape-pIb) 在检查器中设置 BlendShape 的状态。 ### **VRMBlendShapeProxy(VRM混合形态代理)** **[![VRMBlendShapeProxy列表-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/5rXxif23ZwSr9lHR-vrmblendshapeproxy-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/5rXxif23ZwSr9lHR-vrmblendshapeproxy-by.png)**

VRMBlendShapeProxy 列表需要在播放模式才会在检查器中显示。

使用方法如下: - 在 BlendShapeAvatar 的检查器中进行设置(Editor 选项卡)。 - 将 BlendShapeClip 的值更改为0~1之间的值(在运行时)。

**译者补充:** 这里新手可能难以理解,你第一次调这些滑块的时候,角色的表情可能是没有发生任何变化,这是因为目前这些 BlendShape 里面的内容是空的,你需要在别的地方先进行设置。这一个滑块实际同时控制着多个不同的面部动作(一个表情是由多个 BlendShape 混合而成的)。 **设置方法如下:** 双击图上的 BlendShapeAvatra 字段(直接双击圆点左边的文字,会给你跳转到 BlendShapeAvata 的检查器界面),然后会有一个按钮列表一样的界面一一对应刚才这个滑块列表,这个界面就是给你设置每个表情的地方,具体看后面的图,每个表情下面还能下拉出很多滑块,这个时候你就需要根据你目前制作的表情调整这一堆的滑块,然后你再回之前的滑块列表就会发现你设置过的表情就有变化了。这一部分初学者可能搞不明白。

### **BlendShapeAvatar** 可以在角色资源的检查器中创建表情 [![在角色资源的检查器中创建表情1-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/WUMiYR091rxw9dx7-1-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/WUMiYR091rxw9dx7-1-by.png) 双击“Blend Shape Avatar”字段 或者 [![BlendShapeEditor的检查器-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/qY7rPb3yzqcPSgJQ-blendshapeeditor-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/qY7rPb3yzqcPSgJQ-blendshapeeditor-by.png) 选择你想调整的表情的名称来切换显示。接下来以 Fun 为例子。 [![VRM-以FUN为例子-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/xRxcN1pw7de2D7AP-vrm-fun-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/xRxcN1pw7de2D7AP-vrm-fun-by.png) 将mouth\_smile、eye\_smile和eyeblow\_smile设为100

译者补充:实测要完成做出官方演示的表情还需要叠加75左右的 mouth\_a 这个模型只调整 mouth\_smile 的话只会让嘴角上抬,不会让嘴张开。

可以将眉毛、眼睛和嘴巴等各个 BlendShape(混合形状) 合并成一个表情,并指定创建的 BlendShape 名称,如上图所示。 在更改滑块并创建 BlendShape 之后,请按“Apply”以记录参数。

新版本似乎取消了这个地方的“Apply”按钮,不需要手动应用,老版本在滑块列表上面可以找到两个按钮。

### **BlendShape的预设** [![Blendshape的预设-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/EkmVj4EUR92tSJ3b-blendshape-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/EkmVj4EUR92tSJ3b-blendshape-by.png) 这是给BlendShapeClip预设的一些名字。下面是可用的预设: ##### **NEUTRAL(中性/常态/默认表情)** 作为标准的面部表情,一般是待机状态的表情。

所有表情都是在这个表情的基础上进行变化,如果这个表情发生变化,为基底的其他表情全都会收到影响。

##### **A, I, U, E, O** 对应对口型同步的 あ・い・う・え・お(aa·ih·ou·E·oh)的嘴型。

因为 VRM 是由日本发起的,所以这几个发音是五十音的韵母发音(啊,一,呜,欸,哦),不是英语字母或拼音的发音。但在 VRM1.0 中,将(A・I・U・E・O)替换成了国际音标(aa·ih·ou·E·oh),但发音基本是一样的。

##### **Blink** 双眼眨眼。 ##### **Blink\_L, Blink\_R** 分别是左右眼单独眨眼。 ##### **Joy, Angry, Sorrow, Fun** 喜,怒,哀,乐。 ##### **LookUp, LookDown, LookLeft, LookRight** 当使用 BlendShape 控制视线时,需要使用这些预设。

也就是说如果你不用 BlendShape 控制视线,那么可以不用设置这几个 BlendShape。

##### **Unknown(未定义)** 其他非 VRM 预设的表情。

如果你要制作其他表情,则需要使用这个分类。比如ARkit

### **改变 BlendShapeProxy 的值(在运行时/run time)** [![改变 BlendShapeProxy 的值-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/BoNO3RdTYs8tb3vX-blendshapeproxy-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/BoNO3RdTYs8tb3vX-blendshapeproxy-by.png) 可以通过 Inspector(检查器) 进行操作。 ### **\[可选\] 追加表情** **[![VRMBlendShapeProxyRuntime.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/7YEQAOh2T900UiBI-vrmblendshapeproxyruntime.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/7YEQAOh2T900UiBI-vrmblendshapeproxyruntime.png)** 确定保存文件。请选择最后面的按钮,输入名称来创建设置。 **[![BlendShapeClipOption.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/d2mfA194mra6e1uG-blendshapeclipoption.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/d2mfA194mra6e1uG-blendshapeclipoption.png)** 你可以使用下面的代码调用它(非开发人员用不到这个): ``` // unknownなのでstringで呼び出し proxy.ImmediatelySetValue("びっくり", 1.0f); // 0から1で指定 ```

官方文档演示用的 UniVRM 是旧版,我用的新版,UI不一样,官方文档就只有这么一句话和两张图,完全没讲清楚。新版追加新表情是点底下的“+”号,旧版应该是点那个“Add BlendShapeClip”按钮。我这里演示一下新版本的操作。

[![新版本UniVRM追加表情-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/X5QS3O5pb8EwtKh2-univrm-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/X5QS3O5pb8EwtKh2-univrm-by.png) ### **\[可选\] 变换材质颜色** **[![变换材质的颜色-by.北溟瞬息.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/scaled-1680-/oEUGMDv0IK1vvJou-by.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/oEUGMDv0IK1vvJou-by.png)** 要设置材质变换,需要切换到 Material List 选项卡,或者在 Project 视图中选择 BlendShape 文件进行编辑。(例如预设的 BlendShape.XXX 之类的,或你自己创建的名称)。材质变换的相关细节后面会讲。 # BlendShape 的设置(v0.45) ### **BlendShape 关联的资源**
导入VRM后,会创建一个名称为“`模型名称+BlendShapes`”的文件夹,Perset 的 BlendShapeClips 会存储在这个文件夹里。
[![blendshapeclip_assets.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/2jSFUI7AGSCyWSpW-blendshapeclip-assets.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/2jSFUI7AGSCyWSpW-blendshapeclip-assets.png)
BlendShapeAvatar 资产
[![blendshapeavatar.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/rmqCMN1hc5OwV3PX-blendshapeavatar.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/rmqCMN1hc5OwV3PX-blendshapeavatar.png)
### **设置界面**
这些资源有以下设置界面。
#### **BlendShapeAvatar资产的检查器视图。**
**Editor 选项卡**
BlendShapeClip 的 选择/创建 的设置
[![select_blendshapeavatar.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/q5bxdIzT2ZMFbatH-select-blendshapeavatar.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/q5bxdIzT2ZMFbatH-select-blendshapeavatar.png)
**List 选项卡(v0.45开始)**
BlendShapeClip 列表
[![list.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/yb2e61kusgnhoqSx-list.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/yb2e61kusgnhoqSx-list.png)
#### **BlendShapeClip 资产的检查器**
**BlendShape 选项卡**
创建 BlendShape 设置:
[![alicia_binary.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/TvIX7tiNO2vU8hYk-alicia-binary.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/TvIX7tiNO2vU8hYk-alicia-binary.png)
**BlendeShape List 选项卡**
您可以在 BlendShape 选项卡中查看创建的值。这个东西不太常用。
[![blendshape_angry.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/gpcqAyC3a37Nx5VZ-blendshape-angry.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/gpcqAyC3a37Nx5VZ-blendshape-angry.png)
**Materia List 选项卡**
可以通过BlendShape控制 [LookAt](https://docs.vrcd.org.cn/books/vrm-univrm/page/lookatblendshape)(后面会讲),或使用BlendShape来更改颜色的设置。
[![material_color.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/sONERS2Trp3fToZN-material-color.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/sONERS2Trp3fToZN-material-color.png)
#### **各个 BlendShapeClip 的设置**
为BlendShapeClip创建一个表情(不限于脸部)。
##### **1.选择BlendShapeClip**
从 BlendShapeAvatar 的检查器中选择一个 BlendShapeClip
[![select_blendshapeavatar.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/q5bxdIzT2ZMFbatH-select-blendshapeavatar.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/q5bxdIzT2ZMFbatH-select-blendshapeavatar.png)
或者直接在项目(project)窗口中单击 BlendShapeClip 资源
**旧版UI:**
[![select_blendshapeclip.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/cYfhLRmX0POPrAHZ-select-blendshapeclip.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/cYfhLRmX0POPrAHZ-select-blendshapeclip.png)
**新版UI:**
[![新版BlendShape界面.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/YrwVJDg5nW235eyF-blendshape.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/YrwVJDg5nW235eyF-blendshape.png)
##### **2. 调整滑块制作表情**
当你点击 BlendShape 选项卡,现有 skinnedMeshRenderers 的名称将在 Inspector 窗口中列出。单击列出的任何名称,然后可以调整 BlendShape 值。更改值会立即反映出来。(apply按钮从v0.45开始被删除)
##### **3.在预览中检查模型的BlendShape**
使用`权重预览滑块`来测试0~1之间的效果。结果将显示在下方的预览窗口中。 在预览窗口按住`左键或右键拖动`来旋转视角。
在预览窗口按住`中键拖动`来移动视角。
##### **BlenderShape 的 Binary(二值化) 设置(v0.45)**
[![不允许中间值的设置-旧版.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/OX5vKmzwyWzi0UNV-hT2XTPBlcK.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/OX5vKmzwyWzi0UNV-hT2XTPBlcK.png)
在 v0.45 版本中,BlendShape 设置中添加了二值化选项。这是为了不想显示 BlendShape 的中间过渡状态的用户而设计的。目标值将自动四舍五入。
当加载的应用程序版本为v0.45或更高时,此功能将生效。
[![不允许中间值的设置2-旧版.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/CJFDQ76r858wl5wt-2.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/CJFDQ76r858wl5wt-2.png)
# 导出时烘焙 BlendShape 的状态 使用 UniVRM 进行导出时,可在 `SkinnedMeshRenderer` 中修改当前 BlendShape 值,并将其设置为基本状态。 例如,点击 BlendShapes 并调整 bs\_face.Eye\_blink 滑块将值从 0 更改为 57.8。 [![blendshape_value-87.8.jpg](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/XiGGxRde6e2zgP1U-blendshape-value-87-8.jpg)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/XiGGxRde6e2zgP1U-blendshape-value-87-8.jpg) 需要启用 `Pose Freeze` 复选框。 [![check_freeze.jpg](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/4BtbsvQgGMrDLVuS-check-freeze.jpg)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/4BtbsvQgGMrDLVuS-check-freeze.jpg) 导出之后的效果:[![bake_blink.gif](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/SXLSmvWLBXLoiwk5-bake-blink.gif)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/SXLSmvWLBXLoiwk5-bake-blink.gif) 基本状态(BlendShape value = 0)发生了改变 (因为基本状态改变,因此在没有任何表情的情况下,眼睛也是没有完全睁开的)。 # 检查 BlendShape 的法线 自Unity 2018以来,当将fbx导入Unity时,会自动重新计算BlendShape的法线,并将原始的法线替换为重新计算的法线,导致模型表面出现意外的变化。

**详细信息** 如果BlendShape的法线为(0, 0, 0),则表面的法线将不会发生变化。但看起来重新计算的法线取代了原来的BlendShape法线,导致模型出现了意外的变化。当基础网格的法线被改变时,在镜像之后左右分界处等位置会更明显。

#### **您可以使用 MToon 的法线调试显示来检查法线。** 您可以执行 fbx 文件中 `Materials` 标签下的 `Extract Materials...` 操作,以提取材质。 将FBX文件拖动到 Hierarchy(层级) 窗口并选中它。 在 Inspector(检查器) 中,点击`Select(选择)`->`Materials(材质)`->`Extract Materials(提取材质)`,然后选择一个文件夹来保存这些材质。 接下来,选择所有材质 将 Shader 更改为 `VRM/MToon`。(前面的章节有详细提到这些操作)

**确认法线** 因为只是为了确认法线而暂时 MToon 化,所以不需要纹理等的设定。

在 MToon 的 `Options(选项)` 中,选择 `Debugging Options`,然后将 `Visualize` 设置为 `Normal`。 [![mtoon_normal.gif](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/XZuiqGGLRYMADfl4-mtoon-normal.gif)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/XZuiqGGLRYMADfl4-mtoon-normal.gif) 回到 SkinnedMeshRenderer 。 拖动 BlendShape 滑块,检查法线。 [![broken_normal.jpg](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/Y5yDKodTxw1eGJRC-broken-normal.jpg)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/Y5yDKodTxw1eGJRC-broken-normal.jpg) 示例中,**鼻尖** 和 **下唇** 的法线出现了明显的错误。

**译者补充:** 此处示例模型不是之前使用的艾莉西亚的模型,因为艾莉西亚的模型各方面都比较正常,这里为了演示错误情况另外使用了其他模型,如果你用艾莉西亚的模型测试这些操作可能不够直观,本人用艾莉西亚的模型测试的时候,只在眼部周围和耳朵上发现了法线的变化。

> **模型信息** > 这个模型是 > > - 将 Vroid 的 VRM 导入到 Blender > - 再从 Blender 导出为 FBX > - 最后将 FBX 导入到 Unity > > 得到的结果 #### **修复 BlenderShape 的法线** 用上述方法发现 BlendShape 有问题时,修复的方法。 选择 fbx 的 `Model` 标签。 检查并应用 `Legacy Blend Shape Normal`。 [![legacy_normal_fixed.jpg](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/WIrupg2atc5jx5Yb-legacy-normal-fixed.jpg)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/WIrupg2atc5jx5Yb-legacy-normal-fixed.jpg) 确保 BlendShape 是正确的。

**与修正前的区别** 除了鼻尖和下唇外,舌头的法线也变得完全不同。

# Material(材质) # Material ## **Material** VRM 支持的 材质(着色器) 有三种,`unlit`, `standard`, `MToon`。 UniGLTF 支持 `unlit` 和 `standard` 两种版本。 ### **export / import 对应表**[​](https://vrm.dev/univrm/shaders/#export--import-%E3%81%AE%E5%AF%BE%E5%BF%9C%E8%A1%A8 "export / import の対応表 への直接リンク")
supportexportgltfimport
Standard(Unity标准)PBRStandard
❌v0.xx.0UniGLTF/StandardVColor UniUnlit 支持顶点色
Unlit/Color(Unity标准)KHR\_materials\_unlitUniGLTF/UniUnlit
Unlit/Texture(Unity标准)KHR\_materials\_unlitUniGLTF/UniUnlit
Unlit/Transparent(Unity标准)KHR\_materials\_unlitUniGLTF/UniUnlit
Unlit/Transparent Cutout(Unity标准)KHR\_materials\_unlitUniGLTF/UniUnlit
UniGLTF/UniUnlit(VRMShaders)KHR\_materials\_unlitUniGLTF/UniUnlit
❌v0.76.0VRM/UnlitTexture(UniVRM)KHR\_materials\_unlitUniGLTF/UniUnlit请使用 UniUnlit
❌v0.76.0VRM/UnlitTransparent(UniVRM)KHR\_materials\_unlitUniGLTF/UniUnlit请使用 UniUnlit
❌v0.76.0VRM/UnlitCutout(UniVRM)KHR\_materials\_unlitUniGLTF/UniUnlit请使用 UniUnlit
❌v0.76.0VRM/UnlitTransparentZWrite(UniVRM)无法在 gltf 中表现 在MToon 中 有TransparentZWrite 功能
VRM/MToonextensions.VRM.materialPropertiesVRM/MToon
🚧VRM10/MToon10VRMC\_materials\_mtoonVRM10/MToon10
# UniUnlit ### **UniUnlit** 大概是 `UnLighting` 的缩写,即 `Unlit`。 #### **U​nlit** 将以 glTF 的 [KHR\_materials\_unlit](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_unlit) 扩展形式保存。 #### **可以在 Unity 中导出为 Unlit 着色器**
功能colortexturevertex\_coloralpha/cutoutno culling
glTF
UniGLTF/UniUnlit
Unlit/Color
Unlit/Texture
Unlit/Transparent blend
Unlit/Transparent Cutout cutout
> **顶点颜色** > 只有 `UniGLTF/UniUnlit` 支持顶点颜色。 > > - 如果 Mesh 包含顶点颜色 > - 并且 Material 被判定为 `Unlit`, > > 在导入时将应用顶点颜色。如果在不需要顶点颜色的模型上应用 Unity 的 `Unlit `系列材质并导出,那么在下次导入时,颜色可能会意外改变。在这种情况下,通过在导出时启用 `RemoveVertexColor`,可以导出不包含顶点颜色的 `Mesh`。 # Standard ### **Standard** `Physically Based Rendering`(基于物理的渲染/PBR ) ### **Standard Shader** `UniVRM` 不会专门创建针对物理基础渲染(PBR)的着色器,而是使用 Unity 的标准 Standard 着色器。

⚠反射太强 闪闪发光 Shader 类型为 `Standard`(Unity 标准),且 `metallic` 和 `smooth` 值较高。将材质的着色器更改为 `Unlit/UniUnlit`,可以直接显示纹理。

### **Metallic, Roughness, Occlusion 对应表**
用途glTF material Unity Standard Shader
OcclusionocclusionTextureRG\_MetallicGlossMap
RoughnesspbrMetallicRoughness.metallicRoughnessTextureGA\_MetallicGlossMap (smoothness = 1 - roughness)
MetallicpbrMetallicRoughness.metallicRoughnessTextureBR\_OcclusionMap
> **将 Metallic Smoothness Occlusion 合并为一张纹理 V0.69.0** > 从 `v0.69.0` 版本开始,将纹理合并为一张。 > > - import:将 glTF 的 metallicRoughnessTexture 和 occlusionTexture 合并为一张(参见上表) > - export:将 Standard 的 \_MetallicGlossMap 和 \_OcclusionMap 合并为一张(参见上表) > > `v0.68.0` 及之前 > > - import:将用于 \_MetallicGlossMap 和 \_OcclusionMap 的两张纹理转换并导入 > - export:将 Standard 的 \_MetallicGlossMap 和 \_OcclusionMap 转换为两张纹理并导出 # MToon
[Mtoon 的使用方法](https://www.bilibili.com/read/cv35352597/?from=readlist&jump_opus=1)
### **MToon 简介** MToon 旨在实现日本动漫风格的表现。它通过根据 光照参数 和 光源环境 混合 Lit Color(主色) 和 Shade Color(阴影色) 这两种颜色来实现这一目标。 [![mtoon_about.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/FRj6LjXzQNtN6t1A-mtoon-about.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/FRj6LjXzQNtN6t1A-mtoon-about.png) 来自ニコニ立体的使用了MToon的3D角色模型。 ### **快速设置** #### **基本步骤** - 选择目标材质并将着色器更改为 `VRM/MToon` - 点击着色器面板 - `Color -> Lit Color, Alpha` 和 `Color->Shade Color` 设置相同的纹理 - `Color -> Lit Color, Alpha` 设置为白色,`Color->Shade Color` 设置为想要的阴影颜色 - `Shading -> Toony` 选择所需的值。如果需要使主色和影色区分更加明显,可以调整为`1` - `Rim -> Additive` 设置纹理(相当于 Spheremap 和 Matcap ) - `Outline -> Width -> Mode` 如果需要轮廓线,则选择`WorldCoordinates`,否则选择`None` - `Outline -> Width -> Width` 根据外观选择适当的值 #### **普通的材质** - `Shading Shift` 设置为 `0` - `Shading Toony -> Shadow Receive Multiplier` 设置为 `1` #### **如果不希望角色面部或之类的材质有太多阴影** - `Shading Shift `设为负值 - 将 `Shading Toony -> Shadow Receive Multiplier` 设为 0 ### **设置项目** #### **准备** 选择要进行修改的材质(Material) 并将着色器(Shader) 更改为 `VRM/MToon` [![set_mtoon.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/RxLu1kwLoFbZRyel-set-mtoon.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/RxLu1kwLoFbZRyel-set-mtoon.png) 将材质的着色器更改为 VRM/MToon #### **Rendering** [![download.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/scaled-1680-/XfxaDYiBxVDrgHRa-download.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/XfxaDYiBxVDrgHRa-download.png) Rendering Inspector(检查器) 中包含的项目。 在 Rendering 中,设置主颜色和阴影颜色以及 Cull Mode(剔除模式)。 ##### **渲染类型 (RENDERING TYPE)** 这里可以设置材质是不透明还是半透明。 - 不透明 (Opaque) - 为了渲染性能。通常建议将其设置为 Opaque。 - 裁切 (Cutout) - 虽然是不透明的,但会根据 `Color -> Lit Color, Alpha` 中的 Alpha 数值来决定是否绘制小于 `Color -> Alpha -> Cutoff` 的部分。(根据 alpha 值进行绘制,透明度小于设定的值的部分会被裁切) - 透明 (Transparent) - 这是半透明的。将会根据 `Color -> Lit Color ,  Alpha` 中的 Alpha 数值来确定不透明度。 - 缺点是描边绘制可能不正确。 ##### **剔除模式 (CULL MODE)** 这里可以设置是否渲染多边形的法线反面。 - Back (背面) - 剔除背面,绘制正面。通常选择此项。 - Front (正面) - 剔除正面,绘制反面。 - None (无) - 绘制两面,因此会增加计算量。 ##### **Alpha (阿尔法)** 只有当 `Rendering Type(渲染类型)` 是 `Cutout` 时才需要设置。 - Cutoff (`Color->Alpha`) - 设置渲染阈值。 #### **Color(颜色)** 设置渲染颜色。纹理和颜色将进行乘法计算。将主色`Lit Color, Alpha`为受光照影响的颜色,影色`Shade Color`为未受光照的颜色。此外,设置不透明度信息`Lit Color, Alpha`的alpha值。另外,在`Lit Color, Alpha`的 Alpha 值中设置不透明度信息。 #### **Lighting(照明)** ##### **Shading Shift(阴影偏移)** 调整主色和影色的阈值,以适应光线照射物体的方式。当数值为`0`时,为正常的光照效果。当数值为负时,会呈现类似动漫般、范围广泛的主色光照效果。需要根据显示的警告信息将`Shadow Receive Multiplier`设置为`0`,以禁用自身阴影。 ##### **Shading Toony(阴影风格)** 这个设置决定上面介绍的 `Shading Toony(阴影偏移)` 的明暗交界线过渡的平滑程度,当数值为0时,它(阴影过渡)会变得像一般的Lambert(兰伯特) 模型一样写实且平滑。当数值为`1`时,受光面和阴影面会在交界处产生明显的分割,呈现出动画风格的照明效果。(类似二分阴影) ##### **Shadow Receive Multiplier(阴影强度)** 设定自我投影和阴影的影响程度。`0`的时候不受影响。`1`的时候会受到影响。 ##### **LightColor Attenuation(灯光颜色衰减)** 设置光源颜色的影响程度。设置为`0`时,受光源颜色的影响。设置为`1`时,不受光源颜色的影响,只反映光源的亮度。 ##### **Rim Additive(边缘光追加)** 根据相机和法线之间的关系显示额外的光源。通常被称为 sphere map(球形贴图) 或 MatCap。 ##### **Emission(自发光)** 设置与光源环境无关的恒定颜色。 ##### **Normal Map(法线贴图)** 设置法线贴图。右侧值设置法线贴图的强度。 #### **Outline(轮廓线)** 轮廓线的设置 ##### **Width Mode(宽度模式)** - None(无) - 不渲染轮廓 - WorldCoordinates(世界空间坐标系) - 以世界坐标为基准,渲染出相对于世界空间固定宽度的轮廓线。 - ScreenCoordinates(屏幕空间坐标系) - 以屏幕空间为基准,渲染出相对于屏幕空间固定宽度的轮廓线。 ##### **Width(宽度)** 设置轮廓的宽度。当宽度模式是世界坐标系时,宽度单位为米。 ##### **Color Mode(颜色模式)** - FixedColor(固定颜色) - 使用固定的颜色进行渲染。 - MixedLighting(混合光照) - 增加光照颜色进行相乘运算。(简单来说就是轮廓线颜色会受光照颜色影响)。 ##### **Color(颜色)** 设置轮廓线颜色。 ##### **Color Lighting Mix(色彩灯光混合)** 当轮廓线的 `Color Mode(颜色模式)` 设置为 `MixedLinghting(混合光照)` 时生效,该设置可以调整轮廓颜色与光照颜色混合的乘法系数。 # LookAt(视线) # LookAt 在VRM中,可以通过计算头部与目标(注视点)之间的相对旋转(偏航角Yaw,俯仰角Pitch),并将这些旋转应用到眼睛上。 - 通过 VRMLookAtHead + VRMLookAtBoneApplyer 或 VRMLookAtBlendShapeApplyer 两个组件来设置。 ### **LookAt 的类型[​](https://vrm.dev/univrm/lookat/univrm_lookat/#lookat%E3%81%AE%E7%A8%AE%E9%A1%9E "LookAtの種類 への直接リンク")** 有三种方法可以将注视点的 Yaw 和 Pitch角度应用于模型上。请根据您模型的情况选择其中一种。 #### **Bone[​](https://vrm.dev/univrm/lookat/univrm_lookat/#bone "Bone への直接リンク")** [靠眼睛骨骼旋转控制眼睛的运动。](https://docs.vrcd.org.cn/books/vrm-univrm/page/lookatbone) #### **BlendShape[​](https://vrm.dev/univrm/lookat/univrm_lookat/#blendshape "BlendShape への直接リンク")** [靠BlenderShape的顶点移动控制眼睛的运动。](https://docs.vrcd.org.cn/books/vrm-univrm/page/lookatblendshape) #### **TextureUV[​](https://vrm.dev/univrm/lookat/univrm_lookat/#textureuv "TextureUV への直接リンク")** [靠眼睛纹理的 `UV offset(UV 偏移)` 控制眼睛的运动。](https://docs.vrcd.org.cn/books/vrm-univrm/page/lookatuv) ### **VRMLookAtHead[​](https://vrm.dev/univrm/lookat/univrm_lookat/#vrmlookathead "VRMLookAtHead への直接リンク")**
[![VRMLookAtHead.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/HORWNuJREVRKd9JB-vrmlookathead.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/HORWNuJREVRKd9JB-vrmlookathead.png)
该组件计算从模型头部看向目标(target)的方向。
#### **Target[​](https://vrm.dev/univrm/lookat/univrm_lookat/#target "Target への直接リンク")**

这是 Application(应用程序) 的设置,而不是针对 VRM 模型设置的。

这是模型眼睛要追踪的目标。如果设置为摄像头,模型将始终注视着摄像头。 ### **视线计算的基准位置** 在 VRMFirstPerson 的 FirstPersonOffset 中,您可以设置相对于 head 骨骼的基准位置。 [![firstperson.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/kvMPf7UjahzHuog0-firstperson.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/kvMPf7UjahzHuog0-firstperson.png)
# LookAt(Bone) LookAlt Bone 需要 VRMLookAltHead 和 VRMLookAtBoneApplyer 两个组件组合。 ### **骨骼控制的视线:VRMLookAtBoneApplyer** [![VRMLookAtBoneApplyer.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/jym0ajbp5V89hfrf-vrmlookatboneapplyer.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/jym0ajbp5V89hfrf-vrmlookatboneapplyer.png) 将 VRMLookAtHead 计算出的视线方向参数应用到 EyeBone上。 #### **DegreeMapping(角度映射)** 如果将相对于目标物的 yaw, pitch 角度直接赋值给眼睛骨骼的旋转角度,眼睛可能会动得过于夸张。 - yaw, pitch 最大角度 => Curve X Range Degree - yaw, pitch 达到上限时 eye bone 的旋转角度 => Curve Y Range Degree 请设置以下4个方向的角度映射: - VerticalDown - VerticalUp - HorizontalOuter - HorizontalInner 注意横向设置的不是左右而是内外。 # LookAt(Blendshape) LookAt Blendshape 需要 VRMLookAtHead 和 VRMLookAtBlendShapeApplyer 这两个组件。在默认设置中,请删除 `VRMLookAtBoneApplyer` 并在VRM模型的检查器窗口中添加 `VRMLookAtBlendShapeApplyer`。 请在 `Inspector(检查器)` 面板中点击 `Add Component -> VRMLookAtBlendShapeApplyer`。 [![dd_vrm_lookat_blendshape.jpg](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/bT48zOobaJXCxirC-dd-vrm-lookat-blendshape.jpg)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/bT48zOobaJXCxirC-dd-vrm-lookat-blendshape.jpg) ### **形变控制视线:VRMLookAtBlendShapeApplyer** [![blendshape_applye.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/RbH4XqGBHVUxxBBB-blendshape-applye.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/RbH4XqGBHVUxxBBB-blendshape-applye.png) 这是用于使用 BlendShape 控制视线的模型的组件。请预先设置好 `LookUp`、`LookDown`、`LookLeft` 和 `LookRight` 这四种 BlendShape。 #### **DegreeMapping(角度映射)** 以下的设置可以让您调整目标物体的相对角度 yaw 和 pitch 的应用程度。 - yaw 和 pitch 角度的上限值 => Curve X Range Degree - yaw 和 pitch 达到上限时的 blendShape 应用比例(0~1)。请将其设置为1 => Curve Y Range Degree 请设置以下三个方向的角度映射: - VerticalDown - VerticalUp - Horizontal # LookAt(UV)
LookAt UV 需要 VRMLookAtHead 和 VRMLookAtBlendShapeApplyer 这两个组件。在默认设置中,请删除 `VRMLookAtBoneApplyer` 并在 VRM 模型的检查器窗口中添加 `VRMLookAtBlendShapeApplyer`。
请在 `Inspector(检查器)` 面板中点击 `Add Component -> VRMLookAtBlendShapeApplyer`。
[![dd_vrm_lookat_blendshape.jpg](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/bT48zOobaJXCxirC-dd-vrm-lookat-blendshape.jpg)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/bT48zOobaJXCxirC-dd-vrm-lookat-blendshape.jpg)
### **用纹理的UV来控制视线** [![blendshape_applye.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/RbH4XqGBHVUxxBBB-blendshape-applye.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/RbH4XqGBHVUxxBBB-blendshape-applye.png)
这种方式通过上下左右移动 Texture(纹理)来移动模型眼睛。Unity Chan(Unity酱) 就属于这种类型。

译者补充:Unity酱是一个由Unity官方开发的虚拟角色模型,用于展示Unity引擎的功能和潜力。

#### **找到眼睛材质**
在项目窗口中搜索眼睛材质,注意显示在检查器窗口中的 `Tiling(平铺) 和 Offset(偏移)` 设置。
[![material_tiling_offset.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/H3GLlxSXE3FSItUO-material-tiling-offset.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/H3GLlxSXE3FSItUO-material-tiling-offset.png)
这些值应该是 `1,1,0,0`(如果值不同,说明情况特殊,可以参考以下内容)
现在,您可以尝试更改 `Offset` X 和 Y 的值。X 值控制眼睛的左右移动,Y 值控制眼睛的上下移动。找到所需的设置以后,将 X 和 Y 值恢复为0,并继续进行下一步。
#### **BlenderShap 的准备**
在下面的示例中,我们将基于材质 eye_L1 的 UV 值来设置眼睛的运动(请参考上面的图像)。
LookUp, LookDown, LookLeft, LookRight 用于操作目标材质的颜色材质的UV坐标。在这个例子中,我们使用的是 unlit/transparent cutout 材质。
##### **以 LookLeft 为例**
请在 Project窗口 中,进入【文件名】.BlenderShapes 文件夹选择 `LookLeft` 资源。
[![lookleft.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/3Kvqc3nicK5erLSR-lookleft.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/3Kvqc3nicK5erLSR-lookleft.png)
在检查器中切换到 `Material List` 标签
点击 Serialized Property 一栏右下角的 “`+`”
选择`eye_L1`(眼睛的贴图) - `_MainTex_ST`(控制平铺和偏移的效果)
设置`Tliling = 1, 1`, `Offset = 0, 0 `

译者补充: \_MainTex\_ST\_S只控制水平效果,Y轴设置的数值不会产生影响 \_MainTex\_ST\_T只控制垂直效果,X轴设置的数值不会产生影响

[![tiling_offset.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/eSArNTGQvpflmtJa-tiling-offset.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/eSArNTGQvpflmtJa-tiling-offset.png)
- 调整 LookLeft 设置中的 Offset(偏移值) - 对 `eye_R1(另一只眼睛的贴图)` 也进行相应的设置
[![look_left.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/11J3XOEaODphvQjF-look-left.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/11J3XOEaODphvQjF-look-left.png)
[© UTJ/UCL](http://unity-chan.com/)
##### **DegreeMapping(角度映射)** 以下的设置可以让您调整目标物体的相对角度 yaw 和 pitch 的应用程度。
- yaw 和 pitch 角度的上限值 => Curve X Range Degree - yaw 和 pitch 达到上限时的 blendShape 应用比例(0~1)。请将其设置为1 => Curve Y Range Degree
请设置以下三个方向的角度映射:
- VerticalDown - VerticalUp - Horizontal
# SpringBone(弹簧骨骼) # VRMSpringBone ### **概要** 关于 摆动物体设置 的相关组件群 ### **VRMSpringBone(VRM弹簧骨骼)** 如果希望 尾巴、头发、服装 等部位可以随动作而摆动。 请将要摆动的部位的最上层骨骼指定为 RootBones。 这样一来,指定为 RootBones 的部位的子骨骼也会随着动作而摆动。 [![VRMSpringBone.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/FGoVd3PIID9A5FP5-vrmspringbone.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/FGoVd3PIID9A5FP5-vrmspringbone.png) #### **防止在移动时摆动** VRMSpringBone 通常以世界原点为基准进行摆动计算。 另一方面,通过利用 VRMSpringBone 的 Center 功能,可以将摆动计算的基准点更改为骨骼等对象。 在下面这种的情况下,使用 Center(中心) 会非常有用。 - 当模型因为行走等原因进行平行移动时,SpringBone 可能会过度摇晃。 - 希望只在头部活动时,头发和头饰这些头上的 SpringBone 才会晃动。 [在VRM 1.0中,可以设置为Center节点的限制已经确定](https://github.com/vrm-c/vrm-specification/blob/master/specification/VRMC_springBone-1.0/README.ja.md),但在VRM 0.X版本中,可以设置为Center节点的限制尚未确定。

Center 节点必须是其 SpringChain(骨骼链) 的第0个 Joint(关节) 或者其上层节点。此外,Center 节点不能指定为其他 SpringChain的 Joint 节点及其次级。

### ### **VRMSpringBoneColliderGroup(VRM弹簧骨骼碰撞组)** 为了防止 摇摆物 穿透特定部位,可以为骨骼添加碰撞检测。 在单个骨骼上添加的 VRMSpringBoneColliderGroup(弹簧骨骼碰撞组) 可以同时拥有多个碰撞目标。 [![collider.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/RqsiajOlFpt4KNmD-collider.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/RqsiajOlFpt4KNmD-collider.png) 在头上添加碰撞检测(VRMSpringBoneColliderGroup) 在添加了 VRMSpringBoneColliderGroup之后,请将其注册到 VRMSpringBone 的 ColliderGroups 中。 例如,点击 `Add Component` 为 `head`添加 VRMSpringBoneColliderGroup 脚本,并将`head`拖拽到 `Collider Groups` 中的 `Element 0` 字段。你可以通过双击 `Collider Groups`中的 `Element 0`字段来更改其偏移量和半径值。 [![set_collider.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/nAwOGU47OSSD0MzL-set-collider.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/nAwOGU47OSSD0MzL-set-collider.png) 在头部添加VRMSpringBoneColliderGroup,并将其指定给VRMSpringBone的ColliderGroups。 [![spring_gizmo.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/4YFSGqMgaAPVOVeb-spring-gizmo.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/4YFSGqMgaAPVOVeb-spring-gizmo.png) 活动时的Gizmo ### ### **添加组件的位置** #### **VRMSpringBone[​](https://vrm.dev/univrm/springbone/univrm_secondary/#vrmspringbone-2 "VRMSpringBone への直接リンク")** 在导入 VRM 模型时,会自动生成一个名为 `secondary` 的 GameObject(游戏对象) ,VRMSpringBone 组件会被添加到这个对象中。 请注意,与导出时不同,有时可能找不到 VRMSpringBone 组件。 #### **VRMSpringBoneColliderGroup[​](https://vrm.dev/univrm/springbone/univrm_secondary/#vrmspringbonecollidergroup-1 "VRMSpringBoneColliderGroup への直接リンク")** 在导入VRM时,VRMSpringBoneColliderGroup 将被添加到导出时添加的 GameObject(游戏对象) 中。 [![vrm_settings.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/H3FLDdTFD7wYR38c-vrm-settings.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/H3FLDdTFD7wYR38c-vrm-settings.png) # Humanoid(人形) # 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](https://docs.unity3d.com/Manual/AvatarCreationandSetup.html) 此外,为了简化程序处理,VRM 的 Humanoid 规范增加了以下内容 - 所有的 Gltf Node (Unity GameObject) 的旋转设置为0时,就会变成初始姿势。 - 缩放值不变

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

### ### **T-Pose** **[![T_pose.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/PeYMqOnKhUpkTm7E-t-pose.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/PeYMqOnKhUpkTm7E-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](https://docs.vrcd.org.cn/books/vrm-univrm/page/humanoidcomponent) ### **与 BVH 的兼容性** 与初始姿势为 `T-Pose` 的 BVH 文件兼容。 - 将位移数据赋予 hips。 - 以 hips 为起始,逐级为子节点设置局部旋转值。 ### **详情** 骨骼列表与 [Unity 文档中的 HumanBodyBones](https://docs.unity3d.com/cn/2019.4/ScriptReference/HumanBodyBones.html) 相同。 - 对象节点的选择,与蒙皮(例如 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](https://github.com/vrm-c/vrm-specification/issues/87) ### **参考** - [Mecanim Humanoids](https://unity.com/cn/blog/engine-platform/mecanim-humanoids) - [从 Blender 导出与 Unity 的 Humanoid 兼容的 fbx 文件](https://qiita.com/ousttrue/items/aead1c943855561b62e7) # BaseModel(基础模型) 满足以下条件的 GameObject 可以导出为 VRM 格式: - 附加了 Animator 组件。 - Animator 组件设置了 HumanoidAvatar ### **FBX** 要满足上述条件,请在 `fbx importer` 的 `rig` 设置中将模型设置为 `humanoid`。fbx 的 prefab 在设置为 humanoid 后,会附加Animator 组件,并且会设置 HumanoidAvatar。 要让 fbx 转化为 Humanoid,需要满足以下2个条件 - 需要有必要的骨骼 - 确保骨骼父子关系正确 此外 - 骨骼的名称可以自由设定。 参考 [从 Blender 导出与 Unity 的 Humanoid 兼容的 fbx 文件](https://qiita.com/ousttrue/items/aead1c943855561b62e7) ### **在场景中加工 FBX** 不会产生问题的: - 在 FBX Prefab 内添加子 GameObject - 在 FBX Prefab 内禁用某些 GameObject 有时可能会遇到问题: - 删除 FBX Prefab 内的 GameObject - 移动 FBX Prefab 内的 GameObject(包括移动、旋转、缩放、改变父对象) 出现问题的原因 - HumanoidAvatar 与 GameObject 层级结构不一致。 HumanoidAvatar 记录了以下信息: - 原始姿态 - Human Bone(如 hips 等)与 GameObject 的对应关系 如果对这此进行了更改,则需要重新创建。可以在下面的 HumanoidComponent 中来创建。 ### **从 GameObject 手动创建 HumanoidAvatar** 可以不依赖 `fbx importer` 来创建 HumanoidAvatar。 [HumanoidComponent](https://docs.vrcd.org.cn/books/vrm-univrm/page/humanoidcomponent) 使用这个的话, - 人型 GLTF - 在场景上用立方体堆成的人形 对于像这样的 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](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](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/WAm9YNOU2a8vcecz-bone-required.jpg) 正确配置骨骼。 [![create_avatar.jpg](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/gTbU6f0rTEFZuKOH-create-avatar.jpg)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/gTbU6f0rTEFZuKOH-create-avatar.jpg) 按下 `Create UnityEngine.Avatar` 按钮 [![humanoid_animator.jpg](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/HDlrodeMaGzUnN1S-humanoid-animator.jpg)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/HDlrodeMaGzUnN1S-humanoid-animator.jpg) 将创建一个新的 humanoid avatar。 保持这样,可以将其设置为 T-Pose 并进行 VRM 化。 # UniHumanoid Unity humanoid 工具与 BVH 导入器。 ### **BVH runtime loader**[​](https://vrm.dev/unihumanoid/#bvh-runtime-loader "BVH runtime loader への直接リンク") ``` var context = new BvhImporterContext(); context.Parse(path); context.Load(); // create Skeleton hierarchy and mesh for visualize GameObject root = context.Root; ``` ### **RuntimeLoader[​](https://vrm.dev/unihumanoid/#runtimeloader "RuntimeLoader への直接リンク")** - Scenes/RuntimeBvhLoader.unity ### **RuntimeLoader 和 PoseTransfer**[​](https://vrm.dev/unihumanoid/#runtimeloader-and-posetransfer "RuntimeLoader and PoseTransfer への直接リンク") 加载 BVH 文件,并将姿势转移到任何具有人形特征的模型上。 - Scenes/PoseTransfer.unity
[![humanpose_transfer_inspector.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/p6nRebF7KAIGqZuI-humanpose-transfer-inspector.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/p6nRebF7KAIGqZuI-humanpose-transfer-inspector.png) [![humanpose_transfer.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/dm8CjWDRIgUsM2rN-humanpose-transfer.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/dm8CjWDRIgUsM2rN-humanpose-transfer.png)
### **加载 BVH 文件并创建带有 AnimationClip 的预制件** Drop bvh file to Assets folder. Then, AssetPostprocessor import bvh file. 将 BVH 文件拖动到 Assets 文件夹。然后,AssetPostprocessor 将导入 BVH 文件。 - 创建一个 hierarchy(层级)预制件 - 创建一个 humanoid Avatar - 创建一个 legacy 模式的 AnimationClip - 为 preview(预览)创建一个蒙皮网格
[![下载.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/gmr11gs31CId2bQo-TKop3s45hV.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/gmr11gs31CId2bQo-TKop3s45hV.png)
将预制体在场景中实例化。 [![mesh.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/EeKAHLNLXQhjd8OU-mesh.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/EeKAHLNLXQhjd8OU-mesh.png)
这个 object 可以处理了. ## **骨骼映射[​](https://vrm.dev/unihumanoid/#bonemapping "BoneMapping への直接リンク")** 这段 script(脚本)可以帮助你从现有的 GameObject hierarchy(游戏对象层级)中创建一个 human avatar。首先,你需要将这个脚本附加到具有 Animator(动画控制器)的 root GameObject(根游戏对象上)。 然后按照下面进行配置 - 将模型位置设置到原点 - 模型朝向 +Z 轴 - 模型根节点没有旋转 Quaternion.identity - 设置 hips bone 点击Guess bone mapping(猜测骨骼映射)。如果推测骨骼映射失败,你可以手动设置骨骼。 (可选步骤), 按下 Ensure T-Pose。创建 avatar。
[![bvh_bonemapping.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/YBN14pPL61MzapsZ-bvh-bonemapping.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/YBN14pPL61MzapsZ-bvh-bonemapping.png)
这些 humanoid 通过 UniGLTF 导入,并利用 BoneMapping 技术创建了 human avatar。
[![humanoid.gif](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/xOutzuDTw27ewWko-humanoid.gif)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/xOutzuDTw27ewWko-humanoid.gif)
### **下载 BVH 文件**[​](https://vrm.dev/unihumanoid/#download-bvh-files "Download BVH files への直接リンク") - - [https://sites.google.com/a/cgspeed.com/cgspeed/motion-capture](https://sites.google.com/a/cgspeed.com/cgspeed/motion-capture) - [http://mocapdata.com/](http://mocapdata.com/) - [http://www.thetrailerspark.com/download/Mocap/Packed/EYES-JAPAN/BVH/](http://www.thetrailerspark.com/download/Mocap/Packed/EYES-JAPAN/BVH/) # Meta(元数据) # 模型信息 ### **VRMMeta(VRM元数据)[![meta_new.jpg](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/DiNs4uORKiyH0KbZ-meta-new.jpg)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/DiNs4uORKiyH0KbZ-meta-new.jpg)** #### **信息(Information)** ##### **标题(Title)** 设置角色模型的名称。 ##### **作者(Author)** 描述模型作者的名字。 ##### **联系方式(Contact Information)** 描述如何联系模型作者。 ##### **参考(Reference)** 如果有相当于“原作”的内容,请描述参考URL等。 ##### **缩略图(Thumbnail)** 注册角色模型的缩略图。建议使用大约2048x2048的分辨率。 ##### **版本(Version)** 以字符串形式指定模型的版本。可以自由描述。 #### **使用许可・许可证信息(License)** ##### **虚拟形象/角色的各项使用许可【Personation** **/ Characterization Permission**】 **授权的范围/谁可以使用这个形象进行活动-(A person who can perform with this avatar)** - 仅限模型创建者使用 (The avatar may only be manipulated by its creator) - 仅授权给明确指定的人 (Authorized only to explicitly specified person) - 授权给所有人 (Authorized to anyone) **是否允许使用这个形象进行暴力性质演出-(Permission to perform violent acts with this avatar)** - 不许可 (Disallow) - 许可 (Allow) **是否允许使用这个形象进行性行为的表现-(Permission to perform sexual acts with this avatar)** - 不许可 (Disallow) - 许可 (Allow) **是否允许用于商业用途-(For commercial use)** - 不许可 (Disallow) - 许可 (Allow) **其他许可条件-(Other License Url)** 在存在除上述许可条件以外的许可条件的情况下,可以写入外部许可文档的URL。 ##### **再分发或修改的许可范围-(Redistribution** / **Modifications License)** **许可证类型(License Type)** - Redistribution Prohibited(禁止再分发/再配布) - [Copyright wavier (CC0)(放弃著作权)](https://creativecommons.org/publicdomain/zero/1.0/deed.zh-hans) - [Creative Commons CC BY License (CC\_BY)](https://creativecommons.org/licenses/by/4.0/deed.zh-hans) - [Creative Commons CC BY NC License (CC\_BY\_NC)](https://creativecommons.org/licenses/by-nc/4.0/deed.zh-hans) - [Creative Commons CC BY SA License (CC\_BY\_SA)](https://creativecommons.org/licenses/by-sa/4.0/deed.zh-hans) - [Creative Commons CC BY NC SA License (CC\_BY\_NC\_SA)](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans) - [Creative Commons CC BY ND License (CC\_BY\_ND)](https://creativecommons.org/licenses/by-nd/4.0/deed.zh-hans) - [Creative Commons CC BY NC ND License (CC\_BY\_NC\_ND)](https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh-hans) - Other(其他) **其他许可条件(Other License Url)** 如果存在上述许可条件之外的其他许可条件,需要提供那些许可文档的URL链接。

关于许可证类型,可以[【点击此处】](https://creativecommons.org/)查看每种许可证的含义,同时,这个网站内有一个根据需求想你推荐适合你的许可证的程序。 上面括号里的每一个缩写都是一种许可证名称的缩写,是可以根据需求自己组合使用的。 如果选择 CC0 协议,意味着你放弃一切权力并将作品贡献给全球公有领域。

# FirstPerson(第一人称) # VRMFirstPerson ### **概要[​](https://vrm.dev/univrm/firstperson/univrm_firstperson/#%E6%A6%82%E8%A6%81 "概要 への直接リンク")** VRMFirstPerson 有两项设置,分别是头戴设备的位置定位和VR的可视设置。 **只有在程序支持的时候,这个设置才会有效。** ### **设置头戴设备的位置[​](https://vrm.dev/univrm/firstperson/univrm_firstperson/#%E3%83%98%E3%83%83%E3%83%89%E3%82%BB%E3%83%83%E3%83%88%E3%81%AE%E4%BD%8D%E7%BD%AE%E6%8C%87%E5%AE%9A "ヘッドセットの位置指定 への直接リンク")** 在 VRM 模型中设置 VR头戴式显示器(HMD) 的位置。可以调整 HMD 和Avatar头部的跟随。 #### **FirstPersonBone[​](https://vrm.dev/univrm/firstperson/univrm_firstperson/#firstpersonbone "FirstPersonBone への直接リンク")** 第一人称时,追踪 HMD 的骨骼。请指定头部骨骼。 #### **FirstPersonOffset[​](https://vrm.dev/univrm/firstperson/univrm_firstperson/#firstpersonoffset "FirstPersonOffset への直接リンク")** 以 FirstPersonBone 的位置为基准调整跟随位置。请调整到角色的双眼之间。 ### **VR的可见性设定[​](https://vrm.dev/univrm/firstperson/univrm_firstperson/#vr%E3%81%AE%E5%8F%AF%E8%A6%96%E8%A8%AD%E5%AE%9A "VRの可視設定 への直接リンク")** 这是用于VR应用程序的设置,可以为每个网格单独设置相机的可见性。假设 VR 应用程序有两种相机。 为了应对在第一人称视角的相机中看到自己的模型时可能遇到的不便,可以为每个网格设置可见性。 #### **第一人称相机[​](https://vrm.dev/univrm/firstperson/univrm_firstperson/#%E4%B8%80%E4%BA%BA%E7%A7%B0%E3%82%AB%E3%83%A1%E3%83%A9 "一人称カメラ への直接リンク")** 输出到 HMD(头戴式显示器) 的图像。也就是用于获取玩家视角看到的画面的摄像机。 #### **第三人称相机[​](https://vrm.dev/univrm/firstperson/univrm_firstperson/#%E4%B8%89%E4%BA%BA%E7%A7%B0%E3%82%AB%E3%83%A1%E3%83%A9 "三人称カメラ への直接リンク")** 这种视角不通过HMD显示,而是用于其他目的,比如直播、录像、镜子中的反射,或者在多人游戏中显示其他玩家的视角。 #### **可见性设置​**
设定第一人称相机第三人称相机备注
Auto(自动)△(不可见)△(不可见)这是初始设置,后续会有更详细的说明。
Both(两者)〇(可见)〇(可见)通常适用于身体、手、脚等远离头部的部分。
ThirdPersonOnly(仅第三人称) 〇(可见)一般用于头部、头发、帽子等。
FirstPersonOnly(仅第一人称)〇(可见) 通常可能不需要这个设置。
#### **可能遇到的问题的例子​** - 在相机接近模型表面时会看到自己Avatar的轮廓。 - Avatar 的头发碍事,什么都看不见。 - 可以看到牙齿等 Avatar 的内容。 ### **推荐配置[​](https://vrm.dev/univrm/firstperson/univrm_firstperson/#%E6%8E%A8%E5%A5%A8%E3%81%95%E3%82%8C%E3%82%8B%E6%A7%8B%E6%88%90 "推奨される構成 への直接リンク")** 建议在 Avatar 创建阶段将头部和身体分割为互相独立的网格。 - 头部设置为 `ThirdPersonOnly` - 身体设置为 `Both` [![因为示例模型的头部和身体是分开的,所以将身体指定为Both,头部指定为ThirdPersonOnly。.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/ABgiguBBPC7s0rQi-boththirdpersononly.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/ABgiguBBPC7s0rQi-boththirdpersononly.png) 因为示例模型的头部和身体是分开的,所以将身体指定为Both,头部指定为ThirdPersonOnly。 [![操作示例,设置为 ThirdPersonOnly 的网格,在第一人称视角中变得不可见。.png](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/scaled-1680-/J9O6KJAucGaEkkep-thirdpersononly.png)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/J9O6KJAucGaEkkep-thirdpersononly.png) 操作示例,设置为 ThirdPersonOnly 的网格,在第一人称视角中变得不可见。 ### **Auto的可见性设置[​](https://vrm.dev/univrm/firstperson/univrm_firstperson/#auto%E3%81%AE%E5%8F%AF%E8%A6%96%E8%A8%AD%E5%AE%9A "Autoの可視設定 への直接リンク")** 如果可见性设置为 Auto(自动),在导入时会自动将网格分为 `Both` 和 `ThirdPersonOnly`。 如果未进行分割,则所有网格都将设置为 `Both` 或 `ThirdPersonOnly`。 在UniVRM中,将调用 [VRMFirstPerson.Setup()](https://vrm.dev/univrm/firstperson/univrm_firstperson/)。当选择"Auto"进行自动分割时,这将是一个资源消耗较大的处理过程。 #### **分割标准[​](https://vrm.dev/univrm/firstperson/univrm_firstperson/#%E5%88%86%E5%89%B2%E5%9F%BA%E6%BA%96 "分割基準 への直接リンク")** 包含的顶点是否拥有`head` 或`head` 子级骨骼的权重。 ### **设置的重置​** FirstPerson 默认设置为 "Auto",但如果导出失败,可以通过重置 VRMFirstPerson 来重新设置。例如,当 Avatar 的结构发生变化,如网格数量增加或减少,从而导致引用变为 `Missing` 时,可能会导致导出失败。 #### **重置方法[​](https://vrm.dev/univrm/firstperson/univrm_firstperson/#%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E6%96%B9%E6%B3%95 "リセット方法 への直接リンク")**
请在 `VRM First Person (Script)` 的 inspector(检查器) 右上角的 `齿轮图标⚙` 的下拉菜单中选择 `Reset` 进行重置。 [![firstperson_reset.gif](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/yLmi4mlQ8YpbsVqL-firstperson-reset.gif)](https://docs.vrcd.org.cn/uploads/images/gallery/2024-09/yLmi4mlQ8YpbsVqL-firstperson-reset.gif)
# Programming(编程) 已移至 [API](https://vrm.dev/api/)