
Godot 引擎 VRM 导入导出实战V-Sekai VRM Addon 的完整功能与源码解析【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi本指南以仓库内 vendored 的 V-Sekaigodot-vrmAddonaddons/vrm及其日文 READMEREADME.ja.md为核心系统讲解在 Godot Engine 4.x 中如何导入、运行与导出 VRM 1.0 人型 3D 头像从插件安装、导入选项、VRMC 扩展功能清单到导出.vrm/.gltf的注意事项与坑点并结合本仓库stage-tamagotchi-godot引擎的运行时导入落地方式帮助你直接在 Godot 项目中把 VRM 头像跑起来。VRM 是什么「VRM」是面向 VR 应用的人型 3D 头像3D 模型数据文件格式。它以 glTF 2.0 为基础任何人可以自由使用。VRM 将头像的骨骼结构Humanoid、表情Expressions、视线LookAt、眨眼、口型Viseme、物理模拟SpringBone以及使用许可等元数据统一打包进一个.vrm文件中从而让同一个头像可以在不同应用、不同引擎之间流转。本 Addon 对 VRM v1.0 规范 实现了完整的导入与导出兼容 Godot Engine 4.0 stable 及以上版本。除 VRM 导入导出外包内还同捆了一个可独立使用的 Godot 版 MToon 着色器。仓库落地位置本仓库通过 git-subrepo 将 V-Sekai 的 VRM Addon插件版本2.0.1与 MToon 着色器版本3.4.0vendor 到 engines/stage-tamagotchi-godot/addons/vrm 与addons/Godot-MToon-Shader详见 engines/stage-tamagotchi-godot/README.md。当前 Godot 中可用的 VRM 功能全景VRM 1.0 的导入与导出均已支持功能分解如下VRM 0.0 导入✅ 已实现导入时会自动转换为 VRM 1.0 兼容命名。VRM 1.0 导入✅ 已实现。VRM 导出.vrm✅ 已实现导出时全部模型统一输出为 VRM 1.0。带 VRM 1.0 扩展的 glTF 导出.gltf✅ 支持VRMC_node_constraint、VRMC_materials_mtoon。⚠️ 单独的.gltf导出不支持VRMC_springBone仅.vrm支持。⚠️ 导出.gltf时 Godot 不会克隆场景根节点由于部分导出操作具有破坏性导出过程会损坏部分材质请先保存场景导出后立即还原Revert上述扩展在代码中均有对应实现注册于 plugin.gd 的_enter_tree()通过GLTFDocument.register_gltf_document_extension()注册了 5 个 GLTF 文档扩展扩展实现文件状态VRMC_vrm1.0/VRMC_vrm.gd✅ 已实现VRMC_materials_mtoon1.0/VRMC_materials_mtoon.gd✅ 已实现VRMC_materials_hdr_emissiveMultiplier1.0/VRMC_materials_hdr_emissiveMultiplier.gd✅ 已实现VRMC_node_constraint1.0/VRMC_node_constraint.gd⚠️ 有已知 bugVRMC_springBone1.0/VRMC_springBone.gd✅ 已实现建议应用骨骼优化补丁VRMC_vrm_animation1.0/VRMC_vrm_animation.gd❌ 未注册Future work注意 plugin.gd 中虽然 preload 了VRMC_vrm_animation但注册代码被注释掉L210、L228即该扩展尚未启用。VRM 0.0 导入时的骨骼重映射VRM 0.0 与 1.0 的 Humanoid 骨骼命名存在差异Addon 通过 vrm_constants.gd 中的vrm_to_human_bone字典建立映射。当检测到 VRM 0.0 时get_vrm_to_human_bone(true)vrm_constants.gd还会针对拇指链做特殊调整VRM 0.0 中leftThumbIntermediate映射到 Godot 的LeftThumbProximal、leftThumbProximal映射到LeftThumbMetacarpal左右对称从而兼容两代规范在拇指骨骼层级上的差异。VRMC_vrm 核心能力humanoid、表情、视线与元数据VRMC_vrm是 VRM 1.0 的头像核心扩展实现状态如下humanoid✅ 已实现使用%GeneralSkeleton配合SkeletonProfileHumanoid兼容的 retargeting重定向机制完成骨骼绑定。firstPerson头部隐藏✅ 头部隐藏已实现作为导入选项提供实际运行时还需要相机分层camera layers或运行时脚本配合。eyeOffset✅ 已实现通过在Head节点下挂载名为LookOffset的BoneAttachment3D实现。lookAt⚠️ 仅生成 AnimationTrack应用侧需要自行创建BlendSpace2D驱动视线。expressions情绪、口型 Viseme形变morph、BlendShape、绑定✅ 已实现以BlendTreeAdd2/Add3AnimationTrack 形式导入。材质颜色、UV 偏移✅ 已实现同样以BlendTreeAnimationTrack 形式导入。Metadata✅ 已实现包含 License 信息与缩略图。VRM 数据在 Inspector 中的呈现VRM 携带的所有数据都会在导入后被完整保留并显示在 Inspector 中。元数据 Resource 的实现见 vrm_meta.gd包括标题title、版本version、缩略图thumbnail_image、作者与参考信息authors、contact_information、references以及 Permission 许可组allowed_user_name允许表演者OnlyAuthor/ExplicitlyLicensedPerson/Everyoneviolent_usage/sexual_usage暴力 / 性内容许可Disallow/Allowcommercial_usage_type商用许可PersonalNonProfit/PersonalProfit/AllowCorporationpolitical_religious_usage、antisocial_hate_usage政治宗教 / 反社会仇恨内容许可credit_notation署名标注要求Required/Unnecessaryallow_redistribution再分发许可modification修改许可Prohibited/AllowModification/AllowModificationRedistributionother_permission_url、license_url、other_license_url、third_party_licenses许可文档链接与第三方许可值得说明的是 vrm_meta.gd 的注释指出目前丢弃了所有 Unity 专属数据若需再次导出这些数据可能丢失。需要骨骼动画如 retargeting时请自行评估引入其他脚本或 Addon详见 vrm 运行时导入。Head hiding 头部隐藏设置详解在导入.vrm文件时Addon 会提供新的场景导入选项vrm_options_post_import_plugin.gdvrm/head_hiding_method整数枚举对应 vrm_constants.gd 中的HeadHidingSettingThirdPersonOnly 0仅第三人称视角使用删除/修改部分网格以适配第三人称FirstPersonOnly 1仅第一人称视角使用FirstPersonOnlyWithShadow 2第一人称 阴影BothLayers 3双图层使用相机渲染层BothLayersWithShadow 4双图层 阴影IgnoreHeadHiding 5忽略 firstPerson 标志按普通 glTF 导入vrm/only_if_head_hiding_uses_layers/first_person_layers第一人称渲染层默认值2vrm/only_if_head_hiding_uses_layers/third_person_layers第三人称渲染层默认值4运行时头部隐藏模式由GLTFState对象上的附加数据属性决定见 import_vrm.gd 的读取逻辑vrm/head_hiding_methodHeadHidingSetting枚举决定模式BothLayers/BothLayersWithShadow模式下MeshInstance3D的渲染层分别由vrm/first_person_layers与vrm/third_person_layers两个整数决定FirstPersonOnlyWithShadow、FirstPersonOnly、ThirdPersonOnly模式会删除或修改部分网格使角色适配第一/第三人称阴影模式WithShadow会为隐藏的头部额外创建一个ShadowsOnly网格让被隐藏的头部仍能投射阴影——如果你的游戏有第一人称模式并开启了带阴影的光照推荐使用阴影模式。MToon 着色器包内同捆的 Godot 版 MToon Shader 是 VRM 角色渲染的关键它实现了卡通风格的基础色、描边、阴影渐变等表现是 VRM 模型「二次元感」的直接来源。MToon 可以脱离 VRM Addon 单独使用。仓库中将 MToon 作为独立 Addon 安装在addons/Godot-MToon-Shader版本3.4.0与 VRM Addon 配套运行。安装与使用安装 VRM Addon将addons/vrm文件夹安装到addons/vrm。绝对不要重命名该文件夹——生成的 VRM meta 脚本会从该路径引用资源MUST NOT BE RENAMED。安装 MToon Shader将Godot-MToon-Shader安装到addons/Godot-MToon-Shader。同样禁止重命名——生成的材质会从该路径引用。启用插件打开「项目设置」→「插件Plugins」找到「VRM」与「Godot-MToon-Shader」启用 VRM 与 MToon 插件。插件声明位于 plugin.cfg名称VRM描述VRM Importer作者V-Sekai版本2.0.1入口脚本plugin.gd。导入流程源码解析插件通过自定义EditorSceneFormatImporterimport_vrm.gd接管.vrm文件_get_recognized_extensions()返回[vrm]L14-L15。核心流程_import_scene()L28-L50创建GLTFDocument注册vrm_extension.gd文档扩展register_gltf_document_extension(vrm_extension, true)将导入选项写入GLTFState附加数据头部隐藏方法、渲染层设置state.handle_binary_image HANDLE_BINARY_EMBED_AS_UNCOMPRESSED注释说明HANDLE_BINARY_EMBED_AS_BASISU在 Godot 4.0/4.1 会在部分文件上崩溃调用gltf.append_from_file()解析再generate_scene()生成场景节点树。导出流程源码解析插件在 Godot 编辑器的「导出为Export As」菜单中注册了VRM 1.0 Avatar...项快捷键V见 plugin.gd。导出时要求场景根节点或选中节点包含vrm_top_level脚本并携带 VRM meta若 meta 校验失败VRMC_vrm._validate_meta()会在 Inspector 中展开CLICK TO SEE METADATA提示补齐 License 下拉项与基础数据L74-L87。导出实现_export_vrm_dialog_action()L126-L176的关键步骤remove_internals()摘除内部节点后用root.duplicate()深拷贝场景避免破坏源场景若场景缺少secondary节点则自动创建并挂载vrm_secondary脚本创建GLTFDocument并设置root_node_mode ROOT_NODE_MODE_MULTI_ROOT在GLTFState上写入vrm 1.0标记append_from_scene()后先写入临时.tmp.glb再重命名为目标.vrm文件最后通过资源文件系统刷新并触发重新导入。在 stage-tamagotchi 引擎中的落地运行时 VRM 导入本仓库的stage-tamagotchi-godot是一个 Godot 原生桌面舞台运行时详见 engines/stage-tamagotchi-godot/README.md它把 VRM Addon 作为 G1.1 阶段的头像输入基线Electron 主进程选定并物化.vrm文件后把文件的原生路径通过 WebSocket 桥传给 Godot 边车进程由 Godot 在运行时完成导入。由于导出的边车运行时中编辑器导入插件不生效仓库通过scripts/vrm/VrmRuntimeImporter.gd绕过编辑器插件直接调用 vendored 的 vrm_extension.gd 完成运行时导入。当前运行时桥覆盖 VRM 0.x 路径尚未注册 vendored 的 VRM 1.0addons/vrm/1.0/VRMC_*.gd扩展集。角色节点生命周期由 Godot 管理新头像先挂载到AvatarRoot下再移除旧头像并排队释放导入失败时保留上一个头像。日常编辑器预览时可将本地.vrm文件放到engines/stage-tamagotchi-godot/assets/fixtures/vrm/该目录被 git 忽略不要提交模型文件并在scenes/stage-root.tscn的EditorPreviewRoot空节点下实例化模型。运行时启动会自动隐藏EditorPreviewRoot。已知局限与未来工作VRMC_vrm_animation尚未实现。预期用途是 HumanoidAnimationLibrary的导入/导出。VRMC_node_constraint存在已知 bug——与 retargeting骨骼重定向组合使用时有问题。VRMC_springBone已实现但建议应用骨骼操作优化补丁本项目 patches 目录中也保留了mineflayer-pathfinder.patch等外部补丁的 vendoring 先例。Godot 4.3 的SkeletonModifier3D行为变化godot-vrm目前会在Skeleton3D内部创建一个子节点来处理 VRM 弹簧骨骼与节点约束的 skeleton modifier。由于 skeleton modifier 的行为差异例如在 Godot 4.3 上update_secondary_fixed不再受支持改用Skeleton节点自行决定使用物理处理还是 idle 处理实际效果可能存在差异。Godot 3.x 用户如需兼容 Godot 3.2.2 及以上版本请使用该仓库的godot3分支V-Sekai/godot-vrm本仓库内仅包含 Godot 4 版本。小结通过 V-Sekai 的 VRM AddonGodot 4.x 项目可以一站式完成 VRM 0.0/1.0 的导入、运行与 VRM 1.0 导出骨骼humanoid、表情expressions、视线lookAt、弹簧骨骼springBone、头部隐藏firstPerson与许可元数据均可在 Inspector 中查看与配置。结合本仓库stage-tamagotchi-godot的运行时导入路径你可以把 VRM 头像导入流程从编辑器扩展到运行时为桌面舞台应用提供统一的角色资产管线。使用前请务必牢记两条硬性约束addons/vrm与addons/Godot-MToon-Shader路径不可重命名导出.gltf前先保存场景。【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考