图形学数字人【免费下载链接】VRM-Addon-for-BlenderVRM Importer, Exporter and Utilities for Blender 2.93 to 5.2项目地址https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender点击查看免费下载本文以 VRM-Addon-for-Blender 的 导出 VRM 官方文档 为骨架系统讲解在 Blender 中通过File → Export → VRM (.vrm)导出当前编辑的骨架Armature为 VRM 文件的全过程并逐项剖析导出对话框中的每个选项从基础的 Export Invisible Objects 到仅适用于 VRM 1.0 的高级选项Sparse Accessors、All Bone Influences、Lights、glTF Animations。同时结合仓库源码导出算子实现 与 VRM 1.0 导出器说明每个选项在底层是如何生效的、各自的兼容性风险与推荐用法帮助你在导出前做出准确的取舍。一、导出入口与基本流程在 Blender 中从顶部菜单选择File→Export→VRM (.vrm)即可打开 VRM 导出对话框。该菜单项由 export_scene.py 中的menu_export()注册它与VRM Animation (.vrma)菜单项并列分别对应两个不同的导出算子菜单项算子bl_idname导出扩展名VRM (.vrm)export_scene.vrm.vrmVRM Animation (.vrma)export_scene.vrma.vrma在对话框中填写文件名并按下Save按钮后插件会把当前正在编辑的骨架armature连同其相关对象一起导出为.vrm文件。实际执行导出的是 EXPORT_SCENE_OT_vrm 算子它继承自 Blender 的ExportHelper默认文件过滤为*.vrm其execute()会将算子参数交由_export_vrm()完成真正的 GLB 字节生成与文件写入# src/io_scene_vrm/exporter/export_scene.py 中的导出核心逻辑 glb_bytes exporter.export() # 生成 GLB 字节流 Path(filepath).write_bytes(glb_bytes) # 写入 .vrm 文件 return {FINISHED}导出前的自动检查链值得说明的是点击Save并非导出的全部流程。在打开导出对话框invoke与真正写出文件之前插件会依次执行一系列自动检查与准备步骤理解这些步骤有助于你判断为什么有时导出会被打断检查 glTF 2.0 导出器是否可用如果场景中缺少官方的io_scene_gltf2插件算子会直接弹出 VRM glTF2 add-on is disabled 警告并中止export_scene.py中if gltf not in dir(bpy.ops.export_scene)分支。收集导出对象并确认骨架唯一性通过_collect_export_objects()收集待导出对象如果场景中存在多个骨架会弹出VRM Export Armature Selection对话框要求你明确指定要导出哪一个对应 WM_OT_vrm_export_armature_selection。Humanoid 骨骼校验与自动分配如果骨架是 VRM 0.0 或 VRM 1.0 扩展类型会先执行fixup_human_bones()修正骨骼再检查必需骨骼是否分配正确若未分配且开启了初始自动骨骼分配则调用assign_vrm0/vrm1_humanoid_human_bones_automatically自动分配分配仍不完整时会弹出 Required VRM Human Bones Assignment 面板 要求手动补齐。VRM 校验器检查通过WM_OT_vrm_validator.detect_errors()检测高影响级错误若存在severity 1的警告则弹出VRM Export Confirmation确认对话框WM_OT_vrm_export_confirmation勾选 Export Anyway 才能继续导出。这套检查-确认-导出链路意味着只有通过校验、骨骼分配完整的模型才能顺利得到 VRM 文件而这正是 VRM 跨应用兼容性的第一道保障。二、基础导出选项适用于所有 VRM 版本导出对话框右侧的选项面板由 draw_export_preferences_layout() 绘制。前两个选项对所有 VRM 版本都可用Export Invisible Objects导出不可见对象勾选后处于隐藏/不可见状态的对象也会被纳入导出。唯一的例外是目标导出骨架armature即使不可见也始终会被导出。该选项直接传递给 editor/search.py 中的export_objects()的对象收集逻辑勾选Export Only Selections时收集context.selected_objects当前选中的对象否则若勾选Export Invisible Objects收集context.blend_data.objects场景中的全部对象包括隐藏对象两者都未勾选时只收集context.selectable_objects可选中对象即未隐藏的对象。此外收集过程中还会自动剔除两类对象相机CAMERA类型以及弹簧骨骼/碰撞体spring bone collider对应的 Blender 对象避免它们污染导出结果search.py 中相关过滤逻辑。Export Only Selections仅导出选中对象勾选后只有当前在 Blender 视口中被选中的对象才会被导出。当场景中存在大量与 VRM 无关的装饰对象、辅助对象时这是最精准的导出范围控制手段。从源码可见Export Only Selections与Export Invisible Objects是互斥的两条分支前者取selected_objects后者取全部blend_data.objectssearch.py 第 254-260 行。实际使用时二选一即可。三、高级选项总开关Enable Advanced Options勾选Enable Advanced Options后面板会展开一个高级选项子区域layout.box()包裹的独立区域显示四个仅适用于VRM 1.0的子选项draw_export_preferences_layout() 第 166-222 行。文档明确提醒修改这些高级选项可能导致 VRM 文件在应用之间的兼容性下降因此它们默认全部关闭只有在你清楚后果时才应启用。在源码层面这四个高级选项还叠加了一层总开关守卫在 Vrm1Exporter 的构造函数 中每个高级选项都会与enable_advanced_preferences做与运算后才真正生效self._export_all_influences ( export_preferences.enable_advanced_preferences and export_preferences.export_all_influences ) self._export_lights ( export_preferences.enable_advanced_preferences and export_preferences.export_lights ) self._export_gltf_animations ( export_preferences.enable_advanced_preferences and export_preferences.export_gltf_animations ) self._export_try_sparse_sk ( export_preferences.enable_advanced_preferences and export_preferences.export_try_sparse_sk )也就是说即使通过脚本或 API 直接传入了某个高级选项的值只要Enable Advanced Options未勾选该选项依然不会生效。界面提示面板仅当目标骨架为 VRM 1.0 类型时才显示高级选项区show_vrm1_options由 VRM_PT_export_file_browser_tool_props 面板 根据骨架扩展类型判定。若导出的是 VRM 0.0 模型则不会出现这四个高级子选项。四、[高级选项] [VRM 1.0 only] Use Sparse Accessors稀疏访问器勾选后导出形变目标shape keys / morph targets时将使用稀疏访问器sparse accessors存储数据。对于大量使用 shape keys 的模型这通常能显著减小文件体积——因为稀疏存储只记录发生变化的顶点数据而非每个顶点的完整数据块。兼容性风险代价是使用 UniVRM 0.115.0 或更早版本的应用将无法读取这样的 VRM 文件参见 issues/381 的说明 关联讨论。因此该选项适合在确认目标运行环境支持新版 UniVRM或完全不需要兼容旧应用时开启。源码佐证在 preferences.py 的选项说明文案 中该选项明确标注了 UniVRM 0.115.0 doesnt supportexport_try_sparse_sk 的提示在 vrm1_exporter.py 第 2870-2893 行 中该开关最终被透传给 glTF 2.0 导出器的export_try_sparse_sk参数由底层 glTF 导出逻辑完成稀疏化处理。五、[高级选项] [VRM 1.0 only] Export All Bone Influences导出全部骨骼权重该选项控制每个顶点导出的骨骼权重数量默认行为关闭出于显示兼容性考虑每个顶点最多只导出4 个骨骼权重。这是绝大多数 VRM 应用约定的读取上限。勾选后解除该限制导出该顶点被分配的所有骨骼权重。根据 VRM 规范单个顶点最多可分配255个骨骼权重但大多数处理 VRM 的应用只解释每顶点 4 个权重。为什么默认限制为 4VRM 本身遵循 glTF 的关节数据模型glTF 对每顶点骨骼影响数有 4 的推荐上限而多数运行时如各类 VRM 查看器、VRChat 类平台在读取时只会取前 4 个权重多余的权重会被直接丢弃。从源码看这一风险甚至被上游 glTF-Blender-IO 明确记录过面板文案引用了 KhronosGroup/glTF-Blender-IO 的说明 Models may appear incorrectly in many viewerspreferences.py 第 186-198 行并在 vrm1_exporter.py 中把该开关透传为 glTF 导出器的export_all_influences参数。使用建议文档明确给出警告请谨慎使用该选项——要么你能精确控制权重分配要么确认导出结果只会在特定应用中使用否则在部分应用中网格可能因为多余权重被截断而产生明显变形jagged meshes。常规角色模型保持默认的 4 权重即可。六、[高级选项] [VRM 1.0 only] Export Lights导出灯光勾选后灯光Light对象也会被包含在导出中。兼容性风险目前 VRM 生态对灯光如何处理尚未形成共识因此导出结果不可预测——某些应用可能完全忽略灯光数据另一些则可能以意外的方式解释它们。文档的建议是仅当目标应用明确支持 VRM 灯光处理时才启用。源码佐证在对象收集层search.py 的export_objects()中有一行if obj.type LIGHT and not export_lights: continue即不导出灯光时LIGHT类型对象会被跳过。在导出层该开关经 vrm1_exporter.py 第 114-117 行 赋值后透传给 glTF 导出器的export_lights参数。面板文案也直接说明了这一不确定性There is no consensus on how to handle lights in VRM, so it is impossible to predict what the outcome will be.preferences.py 第 200-210 行。七、[高级选项] [VRM 1.0 only] Export glTF Animations导出 glTF 动画勾选后场景中的glTF 动画会被一并导出。默认不导出glTF 动画。为什么不默认导出VRM 文件的设计前提是运动将被重定向motion retargeting到不同的人形骨架因此 glTF 动画往往无法被原样直接套用——同一段动画在不同身形的模型上会产生错位、穿模等效果。此外UniVRM 本身也不导出 glTF Animations为保持生态一致性该选项默认关闭preferences.py 第 212-222 行 的说明文案即引用此理由。替代方案如果你需要导出可跨模型重定向的运动数据官方文档推荐改用VRM Animation.vrma格式它针对人形运动重定向专门设计可导出人形骨骼旋转、臀部骨骼位移、表情预览值Expression preview value以及视线Look At预览目标位移等 VRM 语义数据。在导出菜单中通过VRM Animation (.vrma)入口或参见 VRM Animation 文档 了解更多。源码佐证在 vrm1_exporter.py 第 2870-2893 行 的 glTF 导出参数组装中export_animationsself._export_gltf_animations直接决定了 glTF 动画通道是否写入 GLB 文件。八、导出选项与脚本/API 调用这些导出选项不仅是 UI 上的复选框同时也可以通过 Blender Python API 以算子参数形式调用对应自动生成的 src/io_scene_vrm/common/ops/export_scene.pyimport bpy # 通过 bpy.ops.export_scene.vrm 编程式导出 bpy.ops.export_scene.vrm( filepathC:/output/model.vrm, export_invisiblesTrue, # 导出不可见对象 export_only_selectionsFalse, # 不限于选中对象 enable_advanced_preferencesTrue, # 启用高级选项 export_try_sparse_skTrue, # 使用稀疏访问器仅 VRM 1.0 export_all_influencesFalse, # 默认 4 骨骼权重 export_lightsFalse, # 不导出灯光 export_gltf_animationsFalse, # 不导出 glTF 动画 armature_object_nameArmature, # 指定要导出的骨架 )仓库中的自动化测试如 tests/exporter/test_export_scene.py正是通过读取.blend旁的 JSON 附加偏好文件、以use_addon_preferencesTrue的方式注入enable_advanced_preferences等选项来批量验证不同选项组合下的导出结果这也印证了这些选项在导出链路中的真实作用。九、选项速查表与使用建议选项适用版本默认值主要作用风险与注意事项Export Invisible Objects全部关包含隐藏对象目标骨架例外始终导出可能带入无关对象Export Only Selections全部关仅导出当前选中对象与上一个选项互斥分支Enable Advanced Options全部子选项仅 VRM 1.0关展开四个高级子选项可能降低跨应用兼容性Use Sparse AccessorsVRM 1.0关形变目标使用稀疏存储减小体积UniVRM 0.115.0 及更早版本无法读取Export All Bone InfluencesVRM 1.0关导出全部骨骼权重最多 255/顶点多数应用只读 4 权重可能导致网格变形Export LightsVRM 1.0关包含灯光对象生态无共识结果不可预测Export glTF AnimationsVRM 1.0关导出 glTF 动画动画需重定向建议改用 .vrma推荐组合日常导出普通 VRM 1.0 模型时保持默认不启用高级选项即可获得最佳兼容性只有发布到特定平台、且平台明确支持相应特性时才按需开启稀疏访问器、灯光或全骨骼权重。需要跨模型传递动画时优先选择 VRM Animation.vrma而非开启 glTF 动画导出。赞分享图形学数字人【免费下载链接】VRM-Addon-for-BlenderVRM Importer, Exporter and Utilities for Blender 2.93 to 5.2项目地址https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender点击查看免费下载相关推荐Roc 语言容错 UTF-8 解码深入解析Str.from_utf8_lossy 与 REPL 快照测试Roc 语言容错 UTF 8 解码深入解析Str.from_utf8_lossy 与 REPL 快照测试 导读 Str.from_utf8_lossy 是 R图形学数字人VRM-Addon-for-Blender 导出错误分析与解决方案VRM Addon for Blender 导出错误分析与解决方案 问题描述 在使用Blender的VRM插件导出模型时用户遇到了一个关键错误导致导出过程中断图形学数字人VRM-Addon-for-Blender导出问题分析与解决方案VRM Addon for Blender导出问题分析与解决方案 问题现象描述 在使用Blender 4.0配合VRM插件2.3.22版本时用户遇到了VRM图形学数字人上一篇如何用KeyboardChatterBlocker拯救你的机械键盘终极防连击解决方案下一篇Hotkey DetectiveWindows热键冲突诊断神器快速定位热键小偷创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考