1. 项目概述:为什么是VRM与Blender的组合?
如果你最近在折腾3D角色,尤其是想把自己做的模型放到VRChat或者一些支持VRM格式的虚拟直播软件里用,那你大概率已经听说过VRM这个名字了。VRM本质上是一个基于glTF的开放3D角色模型格式,它最大的魅力在于“通用性”——一个模型,可以在支持VRM的多个平台和应用之间流转,解决了过去模型格式五花八门、互不兼容的痛点。但问题来了,我们常用的3D创作软件,比如Blender,原生并不支持导出VRM格式。这时候,一个名为“VRM Add-on for Blender”的开源插件就成了连接创作与应用的桥梁。
这个插件就是今天要聊的核心。它不是一个商业软件,而是一个由社区驱动的开源项目,这意味着你可以免费使用、研究,甚至参与改进。它的目标很纯粹:让你能在Blender这个强大的免费开源3D套件里,完成从建模、绑定骨骼、调整表情到最终导出为合规VRM文件的全流程。对于独立创作者、虚拟主播或者小型工作室来说,这几乎是最经济、最自主的3D角色制作方案。我花了相当长的时间,从零开始摸索这个插件的每一个角落,踩过不少坑,也总结出了一套能稳定走通的工作流。这篇内容,就是把我这段时间的实操经验、核心配置和避坑要点,毫无保留地分享给你。
2. 环境准备与插件安装:打好地基
工欲善其事,必先利其器。在开始用Blender折腾VRM之前,确保你的基础环境是稳固的,这能避免后续一大堆莫名其妙的报错。
2.1 Blender版本选择与安装
插件的兼容性是第一道坎。VRM Add-on for Blender对Blender的版本有明确要求,通常支持最新的几个稳定版(如3.6 LTS, 4.0, 4.1等)。LTS(长期支持版)通常是更稳妥的选择,因为它经过了更长时间的测试,社区资源也更丰富。我强烈建议你从Blender官网下载官方安装包,避免使用来路不明的绿色版或修改版,后者可能导致插件依赖的Python库缺失或冲突。
安装Blender后,第一次启动时,建议在偏好设置里将界面语言设置为英语。这不是崇洋媚外,而是因为绝大多数插件的开发、错误日志和社区讨论都基于英文界面,使用英文能确保你在搜索报错信息时更精准,避免因翻译术语不一致带来的困扰。
2.2 VRM插件的获取与安装
插件的官方仓库通常在GitHub上,搜索“VRM Add-on for Blender”就能找到。不要随便在第三方网站下载,以免下载到捆绑恶意代码或过时的版本。下载到的通常是一个.zip压缩包,注意不要解压。
在Blender中安装插件的路径是:Edit (编辑) -> Preferences (偏好设置) -> Add-ons (插件) -> Install (安装)。点击“Install”按钮,在弹出的文件选择器中找到你下载的.zip文件,选中并打开。此时,插件列表里会出现一个名为“Import-Export: VRM format”的条目,勾选它左侧的复选框以启用插件。
注意:安装后,如果插件旁边有黄色三角警告图标,通常意味着缺少某些Python依赖库。根据提示,你可能需要以管理员身份运行Blender,或者在插件设置中点击“Install Dependencies”按钮。网络环境是这一步骤的关键,因为需要从Python官方源或GitHub下载库文件。
2.3 关键依赖项检查与问题排查
安装并启用插件后,别急着开始建模。先进行一次健康检查。在插件的设置面板中(点击插件名称可以展开详细设置),找到“Check Add-on Status”或类似的按钮。点击它,插件会自检其依赖库(如bpy,numpy,scipy等)是否齐全、版本是否匹配。
我遇到最常见的问题是scipy库安装失败。这是因为Blender内置的Python可能缺少某些编译环境。一个可靠的解决方法是手动安装预编译的轮子(wheel)文件。你需要知道你的Blender内置Python版本(可以在Blender的“Scripting”工作区,打开Python控制台查看)。然后,去一个可靠的Python库镜像网站,下载对应版本和系统(win_amd64等)的scipy的.whl文件。最后,在Blender的Python控制台里,使用pip install /完整路径/下载的.whl文件名来手动安装。
完成这些后,再次运行状态检查,直到所有依赖项都显示为“OK”或绿色对勾。至此,你的创作环境才算真正就绪。
3. Blender基础与VRM规范认知
在动手制作VRM模型前,我们需要统一一下“语言”。Blender有自己的一套对象和数据结构,而VRM规范则定义了一套标准。理解两者如何映射,是后续所有操作不跑偏的前提。
3.1 Blender核心概念速览
对于VRM制作,你需要重点理解这几个Blender对象:
- 网格(Mesh):模型的形状,由顶点、边和面构成。这是模型的肉体。
- 骨架(Armature):一套骨骼系统,用于驱动网格变形(即骨骼动画)。这是模型的骨骼。
- 形态键(Shape Keys):用于记录网格的形态变化,通常用来制作面部表情(如微笑、眨眼)。这是模型的表情肌肉。
- 材质(Material)与纹理(Texture):定义模型表面的颜色、光泽、粗糙度等视觉属性。这是模型的皮肤和妆容。
- 顶点组(Vertex Groups):将网格的顶点进行分组,最常见的用途是指定哪些顶点受哪根骨骼影响(用于蒙皮权重)。
3.2 VRM模型的核心构成要件
一个合规的、能在大多数平台正常使用的VRM模型,必须包含以下要素,你可以把它看作一份“体检清单”:
- 一个根网格:通常就是你的角色身体模型。VRM规范要求模型必须以一个主要的网格对象为根。
- 一套人形骨架:必须符合VRM规范定义的人形骨骼结构(Humanoid)。这意味着骨骼的名称和层级关系需要是标准的(如
hips,spine,head,leftUpperArm,rightLowerLeg等)。插件会帮你检查和转换,但前提是你的骨架结构大体上是人形的。 - 正确的蒙皮信息:即网格顶点与骨骼之间的权重绑定关系。这决定了模型动起来的时候,衣服和肉体是否自然跟随。
- 可选的Spring Bone(弹簧骨):用于模拟头发、尾巴、裙子等部位的物理摆动效果。这不是必须的,但能极大增强生动感。
- 可选的Expression(表情预设):基于形态键(Blender中)定义的一系列表情,如“高兴”、“愤怒”、“眨眼”等。这对于虚拟主播类应用至关重要。
- 第一人称视角设置:指定当这个模型被用户穿戴时,哪些部分在第一人称视角下应该被隐藏(如下巴、胸部),以避免穿模和视觉遮挡。
3.3 插件导入/导出面板初探
安装好插件后,你会在Blender的导入/导出菜单中看到“VRM”格式选项。导入面板相对简单,主要用于将现有的.vrm文件导入Blender进行修改。而导出面板则是我们的主战场,里面包含了大量关于模型压缩、动画、材质导出的选项。先不用被那么多选项吓到,我们后续会逐一拆解。关键是要知道,大部分问题(如模型变大、材质丢失)的解决方案,都藏在这些导出设置里。
4. 从零开始:创建一个合规的VRM角色
现在,让我们从最基础的创建一个简单人形角色开始,走通全流程。我会使用Blender内置的基础网格(Primitive)来快速搭建,重点是理解流程而非雕刻细节。
4.1 基础建模与骨架绑定
首先,删除默认的立方体。通过Shift + A添加一个“Mesh -> Cube”(立方体)。我们将用它粗略地表示躯干。进入编辑模式(Tab键),进行简单的拉伸和缩放,形成一个扁长的长方体作为身体。 接着,添加一个“Armature”(骨架)。同样Shift + A,选择“Armature -> Single Bone”。进入编辑模式,选中骨骼的尾端(小圆球),按E键挤出(Extrude)新的骨骼,来构建一条简单的腿部、手臂和头部的骨骼链。不必追求精确,但层级要清晰:一根脊柱连接臀部、胸部和头部;从胸部伸出左右手臂;从臀部伸出左右腿。
骨骼命名非常重要!虽然插件有人形骨骼识别功能,但良好的命名习惯能避免很多麻烦。建议按照leftUpperArm,rightLowerLeg这样的格式命名。你可以先随意命名,后面用插件的“骨骼映射”功能来批量识别。
接下来是关键一步:蒙皮。选中身体网格,然后按住Shift加选骨架,按Ctrl+P,选择“With Automatic Weights”(自动权重)。Blender会自动计算网格顶点受骨骼影响的权重。在3D视图中移动骨骼(进入姿态模式,按G移动),检查身体网格是否跟随变形。如果变形怪异,说明需要调整权重,但这对于我们的基础验证已经足够。
4.2 配置VRM元数据与首要设置
在导出前,我们必须填写VRM的元数据。在场景属性(Scene Properties)面板,你应该能看到一个新增的“VRM”面板。如果没有,请确保插件已正确启用。
- 基本信息:填写“Title”(模型标题)、“Author”(作者)、“Contact Information”(联系方式)等。这些信息会嵌入VRM文件。
- 许可信息:选择模型的许可协议,如“CC0”(放弃版权)或“CC BY”(署名)。这对于开源分享很重要。
- 人形骨骼映射:这是核心步骤。点击“Bone Mapping”或类似按钮,插件会尝试自动将你的骨骼名称映射到标准VRM人形骨骼。仔细检查映射结果,特别是左右是否反了(比如左臂映射到了右臂标准骨)。你可以手动在下拉列表中为每个未识别的骨骼选择正确的标准骨骼。确保“hips”(臀部)骨骼被正确识别,它通常是整个骨架的根。
4.3 首次导出与结果验证
现在进行第一次导出测试。File -> Export -> VRM,选择一个保存位置。在导出设置中,先保持大部分选项为默认,但请务必注意:
- 导出格式:确认是
.vrm。 - 缩放(Scale):这是解决“模型导入后变得巨大”问题的关键!Blender的单位系统(默认1单位=1米)与其他引擎(如Unity,常以1单位=1厘米计)可能不同。如果你导出的模型在其他软件中变得异常大,尝试在导出时设置“Scale”为0.01。反之,如果模型太小,则尝试设置为100。这是一个需要根据目标平台调整的经验值。
- 材质导出:确保“Export Materials”被勾选。
点击导出。然后,你可以使用一些VRM查看器(如官方提供的“VRM Viewer”)来打开你导出的文件。检查模型是否显示,骨骼是否可以转动,材质是否正常(可能只是简单的颜色)。这个阶段的目标是打通流程,看到模型能正确导出和显示,就是巨大的成功。
5. 材质与纹理的深度处理
基础模型能导出后,我们就要让它好看起来。材质和纹理是模型视觉表现力的核心,也是问题高发区。
5.1 Blender材质到VRM材质的转换原理
Blender的材质系统(基于节点)非常强大,但VRM标准主要支持基于物理的渲染(PBR)工作流,其材质信息被编码在glTF/VRM格式中。插件在导出时,会尝试将Blender的节点材质转换为标准的PBR材质模型,主要包括:
- 基础色(Base Color):模型的固有色。
- 金属度(Metallic):表面是金属还是非金属。
- 粗糙度(Roughness):表面的粗糙程度。
- 法线贴图(Normal Map):模拟表面凹凸细节。
- 自发光(Emissive):表面自己发光的颜色和强度。
- 透明度(Alpha):用于处理半透明材质,如头发、纱裙。
如果你的材质只使用了简单的“原理化BSDF”节点,并且只连接了颜色、粗糙度、法线贴图,那么转换通常会非常顺利。问题往往出在使用了一些Blender特有或更复杂的节点组合上。
5.2 解决“材质丢失”与“贴图不显示”问题
当你把模型导入其他平台,发现模型变成纯白、纯黑或紫色,这就是典型的材质丢失问题。排查思路如下:
- 检查贴图路径:在Blender中,确保所有图像纹理节点使用的贴图文件路径是有效的。最好将贴图文件(.png, .jpg)和.blend文件放在同一个项目文件夹内,并使用相对路径。你可以在文件浏览器中,将纹理文件夹标记为“资产库”(Asset Library),或者更简单点,直接使用“Pack Resources”(打包资源)功能,将贴图打包进.blend文件内部。
- 简化材质节点:对于VRM导出,材质节点网络应尽可能简洁。核心就是“原理化BSDF”节点。避免使用“混合着色器”、“体积吸收”、“次表面散射”等复杂节点,除非你确定目标平台支持。一个安全的做法是,为VRM导出一个专用材质版本。
- 检查导出设置:在VRM导出面板中,确认“Export Materials”和“Export Textures”选项是勾选的。还有一个关键选项是“Image Format”,它决定了贴图以何种格式嵌入VRM文件。选择“Automatic”或“PNG”通常是最兼容的。JPEG虽然文件小,但可能不支持透明度。
- 验证导出的文件:使用文本编辑器(如VS Code)打开.vrm文件(它本质上是二进制格式,但你可以用某些工具或直接将其后缀改为.zip并解压),检查解压后的glTF文件(.gltf)中的“images”和“textures”部分,看贴图路径是否正确,文件是否存在。
5.3 高级材质技巧:透明与双面渲染
制作头发、薄纱时经常需要透明效果。在Blender中,这通常通过“原理化BSDF”节点的“Alpha”输入口连接一个值或贴图来控制,并在材质设置的“Blend Mode”中选择“Alpha Blend”或“Alpha Hashed”。 导出时,插件会处理这些透明度信息。但要注意,在某些实时渲染环境中,复杂的透明叠加可能产生排序错误(Z-fighting)。一个实用的技巧是,尽量减少透明面的重叠,或者将头发分成多个层片来处理。
另一个常见需求是双面渲染(如纸张、旗帜)。在Blender材质设置中,勾选“Backface Culling”(背面剔除)的反选(即显示背面)。在导出设置中,也需要寻找类似“Double Sided”的选项并启用。但请注意,这会增加渲染负担。
6. 骨骼、权重与动画的优化
一个模型动起来是否自然,99%取决于骨骼和权重。
6.1 人形骨骼的规范与调整
虽然插件能自动映射,但一个结构清晰、符合标准的骨架是根本。你可以使用Blender的“Rigify”插件生成一个标准的人形骨架,这比手动创建要规范得多。启用Rigify后,添加一个“Human (Meta-Rig)”,它会生成一个非常详细且符合行业标准的骨架。然后通过Rigify的“Generate Rig”按钮,将其转换为可用的控制骨架。 使用这样的标准骨架,VRM插件的自动映射成功率几乎是100%。你只需要在VRM面板中,将“Meta-Rig”的骨骼(而不是控制骨)指定给对应的人形骨骼槽位即可。
6.2 蒙皮权重的精细雕刻
自动权重是起点,但绝不是终点。对于关节处(如肩部、肘部、膝盖、腰部)的变形,自动权重通常很糟糕,会导致模型扭曲或塌陷。 你需要进入权重绘制模式(在选中网格后,从物体模式切换)。使用“绘制”(Draw)、“模糊”(Blur)、“渐变”(Gradient)等工具,手动调整顶点受骨骼影响的权重。核心原则是:关节弯曲处,权重过渡要平滑;一个顶点通常最多被2-4根骨骼显著影响;避免权重“泄露”到不该影响的区域(如大腿的权重影响到胸腔)。 这是一个需要耐心和经验的体力活。多观察真人运动时肌肉和皮肤的拉伸与挤压,作为参考。
6.3 Spring Bone(弹簧骨)配置详解
Spring Bone是让模型“活”起来的神器。它通过简单的物理模拟,让指定的骨骼末端(如头发、耳朵、尾巴)产生自然的跟随和摆动。 在Blender中配置Spring Bone:
- 首先,你需要一些额外的骨骼作为“弹簧骨”。这些骨骼通常是末端骨骼的子级,并且本身不参与蒙皮,只用于物理计算。
- 在VRM面板的“Spring Bone”部分,点击“Add Spring Bone Group”。
- 在新增的组里,指定“Center”骨骼(物理模拟的中心参考点,通常是臀部或胸部)和“Hit Radius”(碰撞半径)。
- 最关键的是“Bones”列表,将你准备好的那些用于物理模拟的末端骨骼(如
hair_tip.L,tail.002等)添加进去。 - 调整参数:“Stiffness”(刚度,值越大回弹越快)、“Gravity Power”(重力影响)、“Drag Force”(阻力,模拟空气阻力)。这些参数需要反复微调,在VRM查看器中预览效果。
注意:Spring Bone的计算性能消耗与骨骼数量成正比。不要为每一根头发都加弹簧骨,通常用几根主骨骼来驱动一片头发区域即可。
7. 表情(Expression)与视点(Look At)配置
让虚拟角色拥有丰富的表情和自然的眼神,是沉浸感的关键。
7.1 基于形态键(Shape Keys)创建表情
在Blender中,表情通过网格的“形态键”来实现。选中你的角色头部网格,在物体数据属性(Object Data Properties)面板,找到“Shape Keys”选项卡。
- 基础键(Basis):这是模型的原始形态。
- 创建新形态键:点击“+”号,创建一个新的键,例如命名为“Mouth_Smile”。然后进入编辑模式,移动嘴巴周围的顶点,形成一个微笑的形状。退出编辑模式后,你可以通过调整该形态键的数值(0到1)来控制微笑的程度。
- 创建多个表情:重复以上步骤,创建“Eye_Blink_L”(左眨眼)、“Eye_Blink_R”、“Brow_Angry”(皱眉)等。建议左右分开创建,以便制作不对称表情。
7.2 在VRM插件中绑定表情预设
创建好形态键后,需要在VRM插件中将其归类到标准的VRM表情预设中。在VRM面板的“Expression”部分,你会看到一系列预设分类,如“Happy”(高兴)、“Angry”(愤怒)、“Blink”(眨眼)等。
- 展开“Happy”预设,你会看到它可能包含“Mouth_L”和“Mouth_R”等子项。你需要将你在Blender中创建的“Mouth_Smile”形态键,拖拽或选择到对应的“Mouth”插槽中,并设置其影响权重(通常是1.0)。
- 对于“Blink”,你需要分别将“Eye_Blink_L”和“Eye_Blink_R”指定给“Blink_L”和“Blink_R”。 通过这种方式,你将零散的形态键组织成了有语义的表情单元。导出后,在支持VRM表情的应用程序中,就可以通过调用“Happy”、“Blink”等预设来触发复杂的组合表情。
7.3 第一人称视角与视线跟踪设置
为了避免在VR第一人称视角下看到自己的下巴内部或胸部穿模,需要设置哪些部分应该被隐藏。 在VRM面板的“First Person”部分,你可以设置“Mesh Annotations”。为头部网格(或需要隐藏的部分)创建一个注解,并将其“First Person Flag”设置为“ThirdPersonOnly”(仅在第三人称时显示)。这样,当用户佩戴此模型时,这些部分会自动隐藏。 视线跟踪(Look At)则让角色的眼睛能看向一个目标点(通常是摄像机或玩家视线方向)。这需要在骨架中指定左右眼的骨骼。在VRM面板的“Look At”部分,将“LeftEye”和“RightEye”分别指向你骨架中控制眼球转动的骨骼。你还可以设置视线角度的范围限制。这个功能对于实现角色与观众的眼神交流至关重要。
8. 导出全流程与高级参数解析
掌握了所有部件的制作方法后,最后一步就是将它们正确打包导出。导出面板里的每一个选项都关乎最终结果。
8.1 导出面板逐项详解
再次打开File -> Export -> VRM,我们深入看看关键选项:
- Scale(缩放):如前所述,这是调节模型尺寸的万能钥匙。如果目标平台模型尺寸不对,优先调整此项。0.01(米到厘米)和100(厘米到米)是最常用的两个值。
- Apply Modifiers(应用修改器):如果你的模型使用了细分曲面(Subdivision Surface)、阵列(Array)等修改器,务必勾选此项,以确保导出的是修改器计算后的最终几何体。
- Export Materials/Textures(导出材质/贴图):必须勾选。
- Image Format(图像格式):推荐“PNG/JPEG (Automatic)”。插件会根据贴图是否含透明度自动选择。追求最小文件体积可选“JPEG”,但需承担无透明度的风险。
- Mesh Compression(网格压缩):启用“Draco”压缩可以显著减小文件体积,但并非所有VRM运行时都支持Draco解压。如果导出后模型在某些查看器中无法加载,尝试关闭此选项。
- Export Spring Bones(导出弹簧骨):如果你配置了弹簧骨,确保此项勾选。
- Export Expressions(导出表情):如果你配置了表情预设,确保此项勾选。
- Allow Non-Humanoid Rig(允许非人形骨架):如果你的模型不是人形(比如动物、机器人),勾选此项可以绕过人形骨骼检查。但这样导出的模型可能无法使用某些依赖于标准人形骨骼的功能(如动作重定向)。
8.2 模型优化与文件瘦身技巧
VRM文件大小直接影响网络加载速度和平台兼容性。
- 减面:在导出前,使用“Decimate”(精简)修改器,在保持形状的前提下减少网格面数。特别是对于看不到的模型内部和平面区域。
- 压缩贴图:使用工具(如ImageOptim, TinyPNG)在导出前压缩贴图文件大小。在Blender中,也可以将纹理的“Compression”(压缩)选项调高。
- 合并材质:尽可能将使用相同着色器(Shader)的多个材质球合并,减少Draw Call。
- 检查多余数据:在导出前,使用Blender的“Clean Up”(清理)菜单下的“Purge Unused Data Blocks”(清空未使用的数据块),移除场景中未使用的材质、纹理、网格等。
8.3 最终检查清单与发布前测试
在点击最终导出按钮前,运行一遍这个清单:
- [ ] 元数据(作者、许可)已填写。
- [ ] 人形骨骼映射正确,特别是Hips骨。
- [ ] 材质使用了简单的PBR节点,贴图路径正确。
- [ ] 形态键已创建,并正确绑定到VRM表情预设。
- [ ] Spring Bone(如有)参数经过测试,效果自然。
- [ ] 第一人称隐藏部位已设置。
- [ ] 导出设置中,缩放因子已根据目标平台调整。
- [ ] 已使用“应用修改器”和“清空未使用数据”。
导出后,务必使用至少两种不同的VRM查看器(如官方VRM Viewer、一些支持VRM的VR聊天软件的预览功能)进行测试。检查模型显示、材质、骨骼动画、表情、物理是否全部正常。只有通过多环境测试的模型,才能算是一个真正可用的成品。