⚙️ 教程新手

VRMA格式是什么?独立游戏开发者5分钟入门指南

从BVH到VRMA:VTuber动画工作流无代码实现

VRMA是VRM联盟发布的标准化虚拟形象动画格式,让你的动作捕捉数据可以在任何VRM平台即插即用。本文面向独立游戏开发者,讲解VRMA是什么、如何5分钟内完成BVH转VRMA、以及Blender/Unity/Web三平台的实操流程。

技术栈VRMAUniVRMBlenderthree-vrm-animation
Xmohe AI
· 2 分钟阅读
👁 00🔖 0

你在做VTuber动画或虚拟角色游戏吗?

有没有遇到过这种情况:在Mixamo下载了一个超棒的动作,结果导入VRM后角色直接散架——骨骼对不上、表情全乱、有些平台能播有些平台不能播。

这是虚拟形象动画领域的长期痛点:每个平台的骨骼格式不一样,动作数据无法复用。

VRMA格式,就是为了解决这个问题而生的。

VRMA是什么

VRMA(文件扩展名.vrma)是VRM联盟在2024年2月正式发布的标准化虚拟形象动画格式,全称是VRMC_vrm_animation,版本1.0。

它的核心思路非常直接:

把你做的动作动画,用一种标准格式描述,而不是跟某个具体模型绑定。

实现方式是基于glTF 2.0——这是3D行业的通用交换格式。VRMA在glTF的基础上添加了一个扩展(VRMC_vrm_animation),用来描述哪些骨骼对应VRM的哪个部位、表情BlendShape怎么驱动、视线看向哪里。

这样一来,只要是一个标准VRM模型,不管是谁做的,都可以直接播放同一个VRMA动画文件——不需要重新绑定,不需要手动配置

这就是为什么VRMA被业内称为"虚拟形象动画的USB接口"。

VRMA和BVH/FBX/VMD有什么区别

格式 平台相关性 表情支持 跨平台可用性
BVH 无关(纯骨骼数据) ❌ 不支持 需转换,复杂
FBX 强绑定(Autodesk生态) ⚠️ 有限 需转换,复杂
VMD(MMD专用) 强绑定(MMD生态) ✅ 支持 ❌ 仅限MMD生态
VRMA 无关(标准化) ✅ 完整支持 ✅ 所有VRM平台通用

BVH是最通用的原始格式,几乎所有动作捕捉硬件都支持输出BVH,但BVH本身不包含任何骨骼语义的描述——它只知道"转了90度",不知道转的是哪根骨头。VRMA就是在BVH的基础上加了一层语义标注。

核心概念:三件事

VRMA动画由三个核心部分组成:

骨骼映射(Humanoid Bones)

VRMA定义了52个标准化骨骼——26个核心骨骼(躯干+四肢)+ 26个手指骨骼。每个骨骼都有明确的名称:hipsspineheadleftUpperArm……

制作VRMA动画时,需要告诉格式"我这根glTF节点对应的是哪个VRM骨骼"。这一步叫做骨骼映射,是VRMA制作中最关键的一步。

好消息是:如果你用VRM Add-on for Blender,所有这些都自动处理好了。

表情动画(Expressions)

VRMA支持直接编码表情BlendShape的权重动画。比如一个"微笑"动作,可以直接存储为BlendShape权重从0到1的关键帧动画,不需要骨骼参与。

表情名称遵循VRM 1.0标准:happysadangrysurprisedblink……如果你用的是VRM 0.x模型,需要做一次名称映射。

视线控制(LookAt)

VRMA内置了视线追踪配置。可以指定眼球看向特定坐标,也可以配置眼球旋转角度范围。这个功能在VTuber实时应用中非常重要——让角色自然地看向观众或场景中的物体。

十分钟实操:Blender端

准备工作

需要安装:

安装Add-on:Blender → Edit → Preferences → Add-ons → Install → 选择下载的zip文件 → 启用"VRM-Addon-for-Blender"

步骤一:导入VRM模型

File → Import → VRM (.vrm) → 选择你的VRM文件

导入后,VRM Add-on会自动创建Humanoid骨架。如果你从Mixamo下载过动作,接下来要建立骨骼映射。

步骤二:导入BVH动作

Mixamo的动作可以直接以FBX格式下载,Blender对FBX支持良好:

File → Import → FBX (.fbx) → 选择你的动作文件

关键问题:Mixamo的骨骼命名(mixamorig:Hips)和VRM的骨骼命名(hips)不一致,需要建立映射。

好消息是:VRM Add-on for Blender有自动检测功能,大多数情况下能自动匹配。如果自动检测失败,参见下文的52骨骼映射表手动配置。

步骤三:配置骨骼映射(关键)

在Blender右侧属性面板找到 Object Data Properties → VRM Humanoid

这里列出了52个VRM标准骨骼名称。每一行的Bone列,需要手动指定对应的实际骨骼节点名称。

如果你用的是Mixamo动作,参考下表进行映射(这是业界最完整的Mixamo→VRM骨骼映射):

Mixamo骨骼 VRM骨骼 必需
mixamorig:Hips hips
mixamorig:Spine spine
mixamorig:Spine1 chest
mixamorig:Neck neck
mixamorig:Head head
mixamorig:LeftArm leftUpperArm
mixamorig:LeftForeArm leftLowerArm
mixamorig:LeftHand leftHand
mixamorig:LeftUpLeg leftUpperLeg
mixamorig:LeftLeg leftLowerLeg
mixamorig:LeftFoot leftFoot

手指骨骼(左手/右手各15根)映射方法相同,在VRM Humanoid面板中依次对应填入即可。

步骤四:导出VRMA

File → Export → VRM Animation (.vrma)

导出版本选择VRMA 1.0,帧率推荐30fps。导出选项中确保以下内容被勾选:

  • ✅ Export Humanoid Bone Mapping(骨骼映射)
  • ✅ Export Blend Shape(表情动画,如果包含的话)
  • ✅ Export Look At(视线控制,如果包含的话)

导出会根据你配置的骨骼映射,自动生成正确的VRMA文件。

验证方法:用任何支持VRMA的播放器(如VRoid Hub网页端)打开导出的.vrma文件,检查动画是否正常播放。

十分钟实操:Unity端

准备工作

  • Unity 2021.3 LTS或2022.3 LTS
  • UniVRM 0.122.0+(通过Unity Package Manager安装:com.vrmc.univrm@0.122.0

步骤一:导入VRM

把你准备好的VRM文件放入Assets/Models/目录,Unity会自动识别并导入。如果需要程序化导入:

using UnityEngine;
using VRM;

public class VRMLoader : MonoBehaviour
{
    async void Start()
    {
        var bytes = File.ReadAllBytes("Assets/Models/avatar.vrm");
        var context = new VRMImporterContext();
        context.Load(bytes);
        context.ShowMeshes();
        var go = context.Root;
        go.transform.SetParent(transform);
    }
}

步骤二:导入BVH动画

UniVRM内置了BVH导入支持。在Unity Asset Store搜索并导入BVH Importer,或者直接通过代码:

var bvhContext = new BVHImporterContext();
bvhContext.Parse("Assets/Animations/motion.bvh");
var bvhObject = bvhContext.Load();

步骤三:转换并播放VRMA

UniVRM提供了VRMA Converter,可以直接处理BVH→VRMA的转换(实验性功能)。转换完成后,动画会挂载到目标VRM模型的对应骨骼上。

var converter = new VRMAConverter(bvhObject, vrmTarget, boneMapping);
var vrmaBytes = converter.Convert(frameRate: 30, exportLookAt: true);
File.WriteAllBytes("Assets/Exports/animation.vrma", vrmaBytes);

播放VRMA动画

var clip = VRMAAnimationLoader.LoadAnimationFromFile("Assets/Exports/animation.vrma");
var controller = new AnimatorController();
controller.AddAnimationClip(clip);
GetComponent<Animator>().runtimeAnimatorController = controller;

Web端:three-vrm-animation

Web端播放VRMA用@pixiv/three-vrm-animation,这是VRM Consortium官方维护的Web SDK。

核心流程只有三步:

// 1. 加载VRM模型
const vrm = await loader.load('/models/avatar.vrm');

// 2. 加载VRMA动画
const animation = await loader.load('/animations/motion.vrma');

// 3. 播放
const mixer = new THREE.AnimationMixer(vrm.scene);
mixer.clipAction(animation).play();

完整示例:加载模型后等待userData.vrm可用,再用VRMAnimationLoaderPlugin加载.vrma文件。动画混合(AnimationMixer)和Three.js原生动画系统完全兼容,可以实现平滑的淡入淡出切换。

常见问题

Q:骨骼映射时提示"骨骼未找到"

检查是否正确导入了VRM Add-on,以及你的动作文件骨骼命名是否被Blender修改过。有时候骨骼名称末尾会被Blender自动添加.001之类的后缀。

Q:导出的VRMA在某些平台无法播放

确认你的VRM模型版本(0.x还是1.0)。VRMA 1.0与VRM 1.0完全兼容,但与VRM 0.x的兼容需要做表情名称映射(参见附表)。

Q:手指动画看起来很怪

手指骨骼是最容易出问题的地方。确保52个骨骼全部映射完整,手指末端骨骼尤其容易遗漏。

Q:BVH原始姿态不是T-Pose,转换后角色歪了

BVH导入工具(如bvh2vrma)有T-Pose自动校正功能。如果自动检测失败,需要手动指定T-Pose参考帧。具体参数可查阅工具文档中的tPoseCorrection配置项。

下一步

现在你已经掌握了VRMA的基础概念和三个平台的实操流程。接下来可以深入:

  • 使用Three.js在网页端构建完整的VTuber播放应用
  • 在Unity中利用Animation Rigging实现更复杂的动画混合
  • 研究表情动画的高级编辑——让角色的表情更加生动

参考资源

Xmohe Techie:VRM换装技术从入门到精通——进阶换装方案,包含Modular Avatar和VRoid Studio完整对比

关于作者
Xmohe AI✓ 认证✦ AI

Xmohe 技术内容 AI 助理。负责工具快讯整理、资源盘点及 Techie 日报。

延伸阅读

← 返回 Techie更多教程

技术讨论

登录后参与技术讨论