VRM-1.0

传统 VRM 现在将被归类为 VRM 0.x 并在未来将被弃用,而 VRM 1.0 将成为未来的官方标准。

这一部分很多都是面向开发人员的内容,因此对于普通用户来说,很多内容看不懂也无所谓。我翻译的可能也有问题。而且官方文档里,同一个地方,在两种语言的文档里可能意思还是互相冲突的。

vrm-1.0

VRM 1.0 介绍

VRM 1.0 是对2018年发布的3D头像文件格式“VRM”的更新,它修正了使用过程中发现的问题和错误,并增加了预计将来会需要的新功能。

原有的 VRM 将被重新分类为 VRM 0.x 并不再推荐使用,而 VRM 1.0 将成为新的正式标准

VRM 1.0 于2022年9月发布。

VRM 0.x 的结构被重新组织,并按功能进行了分割,包括核心的 humanoid、meta、expression 等在内的 VRMC_vrm-1.0 ,以及用于卡通材质表现的 VRMC_materials_mtoon-1.0,和用于模拟摇晃物体的 VRMC_springBone-1.0

此外,我们新增了 VRMC_node_constraint-1.0

备注
2020年2月VRMC_vrm_animation-1.0 发布。

注释
VRMC_materials_hdr_emissiveMultiplier-1.0 的内容与 KHR_materials_emissive_strength 基本相同,因此决定不再使用前者,转而采用后者。

公开文档

VRM 1.0 规格

使用文档和 SON Schema 定义的 VRM1.0 规范。

https://github.com/vrm-c/vrm-specification/tree/master/specification

示例模型

https://github.com/vrm-c/vrm-specification/tree/master/samples

VRM パブリック・ライセンス文書 1.0

这是,VRM 独自的许可证,特别考虑了 avatar 的人格许可问题。

VRM公共许可证文档1.0(日文)

实装​

在Unity中,[UniVRM」作为正式的实现方案已经存在。

UniVRM-1.0

API

支持的应用程序

VRM-1.0 的变更点

相对于 VRM0.X 的变更点

gltf 存储细节

警告
进行 import、export 时需要注意。

glTF: z+ forward

模型应存储为 Z轴 正方向朝前。

  VRM0 VRM1
forward z- z+
right x+ x-

在将 vrm-0.x 转换为 vrm-1.0 时,请绕Y轴进行180度的旋转。

Vector3 vrm0;
var vrm1 = new Vector3(-vrm0.x, vrm0.y, -vrm0.z);

glTF: divided vertex buffer

停止共享 bufferView 之间的 primitive。 

  VRM0 VRM1
bufferView shared(共享) divided(分割)

优点

接近游戏引擎内存布局,转换较少 可用一般的 glTF 加载程序加载
缺点 在除UniVRM之外的glTF加载器中,内存使用可能激增(虽然可以加载,但顶点缓冲区中可能会出现未使用区域) 在导出时,可能会增加顶点并改变顺序。在导入时需要费力合并。处理morphTarget较为繁琐。

在将 vrm-0.x 转换为 vrm-1.0 时,请绕Y轴进行180度的旋转。

例:

  prim0 prim1
position 100 100
index 0..100 0..100

👇

  prim0 prim1
position 100 100

バッファーが連結されている

【连接缓冲区】

index 0..100 100..200

実装
不要在Vrm专用的 gltfPrimitive 之间共享缓冲区加载程序,一般的glTF加载程序没有问题。

VRMC_vrm: meta

TODO

VRM 公共许可证文档1.0

VRMC_vrm: humanoid

重新调整了必要的骨骼。

翻译参考   VRM0 VRM1
脖子 neck 必须  
头部 head 必须 必须
臀部 hips 必须 必须
脊椎 spine 必须 必须
胸部 chest 必须  
左/右上臂 left/right UpperArm 必须 必须
左/右下臂 left/right LowerArm 必须 必须
左/右手 left/right Hand 必须 必须
左/右大腿 left/right UpperLeg 必须 必须
左/右小腿 left/right LowerLeg 必须 必须
左/右脚掌 left/right Foot 必须 必须

以下的项目将被废除(虽然曾经记录在VRMHumanoidDescription中,但未被使用)。

VRMC_vrm: expression

将 VRM 中的 BlendShape 更名为 Expression 。

BlendShape
BlendShape 原本是指 Unity 中的 MorphTarget 功能,如果两个东西都叫 BlenderShape 的话会令人很困扰。

重新修订了 Preset(预设)

  VRM0 VRM1
joy(joy 和 fun 难以区分) happy
angry angry
sorrow(书面语) sad
fun(joy 和 fun 难以区分) relaxed
(新规追加) surprised
a(替换为更加通用的国际音标) aa
i(替换为更加通用的国际音标) ih
u(替换为更加通用的国际音标) ou
e(替换为更加通用的国际音标) ee
o(替换为更加通用的国际音标) oh

 

 

 

 

 

 

 

 

 

lookat & firstperson

提示
在 vrm-0.x 中,firstperson 和 lookat 的区分并不明显,但现在已经分开了。

VRMC_vrm: lookat

degreeMap.curve 被废弃了

VRMC_vrm: firstperson


firstPersonBone 被被废弃,并将固定为Head 。

firstPersonBoneOffset 将变为 lookAt.offsetFromHeadBone

提示
在 vrm-0.x 中,没有区分 VR 头盔的参考位置和 look At 的基准位置,二者共用了 firstPersonBone + firstPersonBoneOffset(先是创建了 firstPersonBoneOffset,之后在创建 lookat 功能时被复用了)。

在 vrm-1.0 中,lookAt.offsetFromHeadBone 被用来表示 look At 的基准位置。

vrm-1.0 并不包含 VR 头盔的参考位置信息,这是因为无法确定一个准确的位置。然而,应用开发者可以继续使用 lookAt.offsetFromHeadBone 作为参考,来估算 VR 头盔的参考位置。

VRMC_springBone

  VRM0 VRM1

设置单位

房(应该是指骨骼链) 節(应该是指单段骨骼)
children[0] children 中的任意一个
末端 自动添加到 7cm 的距离 不追加

VRMC_springBone_extended_collider

规范: https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_springBone_extended_collider-1.0

VRMC_springBone_extended_collider 是什么?

VRMC_springBone_extended_collider 是对 VRMC_springBone 的扩展,添加了可用的碰撞器形状。

追加的Collider(碰撞体)扩展

除了 VRMC_springBone 可以使用的 球体碰撞器 和 胶囊碰撞器 之外,还将添加以下碰撞器形状。

内部Collider(碰撞体)

添加了 球形内部碰撞体 和 胶囊形内部碰撞体。与普通的 球形碰撞体 和 胶囊碰撞体 不同,它不是将物体推向外侧,而是将物体推向内侧。

平面Collider(碰撞体)

​添加了一个 平面碰撞体 。平面碰撞体 被定义为无限平面,并且它的作用是限制物体的移动范围,使其只能在平面的一侧移动。


Fall Back​(备用兼容方案)

VRMC_springBone_extended_collider 是对 VRMC_springBone 的一种向前兼容的扩展。因此,使用 VRMC_springBone_extended_collider 扩展创建的模型,即使在只支持现有 VRMC_springBone 规范的应用程序中也可以使用。

以 UniVRM 输出的模型为例,许多情况下,定义了 VRMC_springBone_extended_collider 的模型同时具有按照传统 VRMC_springBone 规范定义的 备用碰撞器 。因此,即使在旧版本的应用程序中也可以使用。但是,请注意,备用碰撞器无法完全再现 VRMC_springBone_extended_collider 定义的 内部碰撞器 和 平面碰撞器 的行为。"

正在推进将其实装

警告
VRMC_springBone_extended_collider 是一个刚刚制定的扩展,因此许多应用程序还没有进行实装与支持。

以下程序实装并支持 VRMC_springBone_extended_collider

emission(自发光)

支持 KHR_materials_emissive_strength。

emission(自发光) 与 glow(辉光)【glTF相关,暂无翻译】

信息
vrm-1.0 可以与 KHR_materials_unlit 一样,同时使用 KHR_materials_emissive_strength。

信息
UniVRM 支持针对 gltf 和 vrm-1 的 KHR_materials_emissive_strength 的读写。

MTOON-0.X
在 vrm-0.x 中,不是使用 KHR_materials_emissive_strength,而是通过 mtoon-0.x 来处理超出常规范围的自发光效果。

VRMC_materials_mtoon

VRMC_materials_mtoon

https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_materials_mtoon-1.0

GLTF 的  MATERIAL 扩展

{
    "materials": [
        {
            "name": "MyUnlitMaterial",
            "pbrMetallicRoughness": {
                "baseColorFactor": [ 0.5, 0.8, 0.0, 1.0 ]
                // texture
            },
            // emission

            "extensions": {
                "VRMC_materials_mtoon": { // 👈
                    "specVersion": "1.0",
                    // ...
                }
            }
        }
    ]
}

TODO

VRMC_node_constraint

https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_node_constraint-1.0