控制
概述
目前对各类模型的控制操作如下:
Live2D
类型 | 说明 |
---|---|
对象变换 | 包括位置和整体缩放 |
动画播放 | 可添加事件动画 |
参数控制 | 包含 Parameter,Part 可见度的控制,以及一些响应特性 |
动作捕捉 | 提供了面部的捕捉 |
Spine
类型 | 说明 |
---|---|
对象变换 | 包括位置和整体缩放 |
动画播放 | 可添加事件动画 |
MMD
类型 | 说明 |
---|---|
对象变换 | 可以对 3D 场景中的所有对象,包括灯光,相机,模型,骨骼等进行三个维度上的位移,旋转,缩放变换。 考虑到 3D 模型的骨架结构十分复杂,难以选择,提供了树状对象选择和输入预测对象选择两种方式 |
动画播放 | 可添加事件动画 |
参数控制 | 目前主要是控制变形动画,一般来讲变形大多使用于模型的表情的 |
动作捕捉 | 提供了面部捕捉和全身捕捉,目前全身捕捉效果还不太行,性能消耗也比较大 |
VRoid
类型 | 说明 |
---|---|
对象变换 | 可以对 3D 场景中的所有对象,包括灯光,相机,模型,骨骼等进行三个维度上的位移,旋转,缩放变换。 考虑到 3D 模型的骨架结构十分复杂,难以选择,提供了树状对象选择和输入预测对象选择两种方式 |
参数控制 | 目前主要是控制变形动画,一般来讲变形大多使用于模型的表情的 |
动作捕捉 | 提供了面部捕捉和全身捕捉,目前全身捕捉效果还不太行,性能消耗也比较大 |
参数的双向绑定
对于各种参数,例如对象变换参数,变形等,均实现了双向绑定,也就是说该参数若主动发生改变,例如播放动画,参数的值将会实时同步到控制面板。
WARNING
在参数主动发生改变时,可能会覆盖用户对参数的控制。例如播放 MMD 动画时,用户对于有动画轨道的骨骼的旋转控制将会失效,这并不是 bug。
对象变换
2D
对于 2D 没什么好说的,就是位置和缩放。
3D
3D 模型中可以控制的对象,是直接从 Three.js 中的场景对象scene遍历子孙节点构建出来的,除了模型的结构以外,也包含场景的灯光与相机对象,据我所知这些对象应该都是继承自 Three.js 中的Object3D的。
由于一些模型的骨架结构过于复杂~~(点名 MMD)~~,对于 3D 模型的对象选择提供了树状结构选择和列表选择两种方式,列表选择可以通过输入名称来筛选对象。
TIP
对于 VRoid 模型,其变形是 pixiv 通过自定义的方式实现的,在其节点树中会看到一些用于变形控制的辅助对象,这是正常的。
动画播放
Hime Display 目前对 Live2D,Spine,MMD 模型提供了动画播放的支持。其中,Spine 与 Live2D 的动画来源于模型文件自带,MMD 与 VRoid 可以从一个共有的动画数据库中读取外部的动画文件。
2D
对于 Spine 与 Live2D,提供了事件动画的操作,可以设定通过事件(目前支持点击和拖拽)播放特定的动画,来实现一些交互。而对于 3D 模型,目前支持的 3D 动画格式大多都是舞蹈动作,事件动画意义不大,因此并没有做。
TIP
Live2D 的动作数据中,动画是隶属于动作组的,一些模型并没有分组,而是把所有动画全部放到了一个名称为空字符串的动作组中,因此动画列表里面动作组一栏全部都是空的,这时正常现象。
3D
对于 3D 模型的动画支持如下:
动画类型 | MMD 支持状态 | VRoid 支持状态 |
---|---|---|
vmd 动画 | ✅ (THREE 原生支持) | ❌ (待开发) |
mixamo 动画库 | ✅ (原创,重构动画转译) | ❌ (待开发) |
vpd 姿态(好像不算动画?) | ❌ (vpd 太少了,懒得做) | ❌ (MMD 都懒得做,这个更别想了) |
MMD 模型可以原生读取专用的 vmd 文件,相机尚未支持读取 vmd 文件,因为感觉加载后有点诡异。
还有一种专用的 vpd 姿态文件,但是这个文件实在是太少见了,尚未提供支持。
3D 模型动画播放支持可以音频,目前支持 mp3,wav 两种格式。
Mixamo 动画转译
Mixamo是一个由 Adobe 公司推出的免费的 3D 模型动作数据库。
TIP
Mixamo 动画库的转译这件事我其实很早就完成了,但是万万没想到,在应用发布的前夕,Mixamo 动画库的动作文件突然来了个大幅度结构更改,导致之前的适配完全失效,好不容易才赶工完成了重新适配。
通过动画转译,MMD 模型也可以直接播放 Mixamo 动画,并且有两种转换模式,IK 解算以及旋转解算。
其中 IK 解算将把 Mixamo 的腿部的旋转数据根据 Mixamo 的骨架转换成脚踝处的位置数据,通过 MMD 的 IKSolver 计算腿部骨骼旋转。
旋转解算是完全把 IK 运算关闭,在 Mixamo 腿部骨架与 MMD 腿部骨架建立了一个对应关系,直接迁移旋转数据,但由于模型身材的差异(Mixamo 的身材是真人比例,MMD 的大多腿比较长???),可能会导致脚部的着地点显得不是很稳定。
TIP
对于 VRoid 模型,似乎并没有专门的动画格式,本来计划提供 vmd 文件和 mixamo 动画库的转译播放,但目前由于各种问题,尚未提供支持
参数控制
Live2D
Parameter:这个是 Live2D 模型内部的控制参数,模型的动画就是通过调节这些参数实现的。碧蓝航线模型的特殊触控也是靠这个参数实现的,温馨提示,控制这个操作的 Parameter 名称里大多包含单词 touch……
Part 可见度:一个 part 包含了 Live2D 模型的部分结构,通过该参数可以调整这些结构
TIP
Parameter 和 Part 之所以用英语表示,显然不是忘记翻译了,而是不知道是否有统一翻译,防止引发歧义。
对于一些模型,这两个参数的一些项目的命名可能会特别混乱,这不是我的锅,模型内部的结构就是这样的。
3D
变形:对应英语单词为 Morph,大多用于控制模型的表情。当然,用模型的变形做一些奇妙的事情也是可以的
动作捕捉
对动作捕捉的支持如下:
MMD | VRoid | Live2D | Spine | |
---|---|---|---|---|
面部捕捉 | ✅ | ✅ | ✅ | ❌ (无参数规范) |
全身捕捉 | ✅ | ✅ | ❌ (无参数规范) | ❌ (无参数规范) |
对于没有统一控制标准的模型,无法提供统一的动作捕捉方式。
WARNING
目前对全身捕捉的数据解析还存在较大问题,可能效果比较诡异。