BlendShape(混合形状)
BlendShape的设置
UniVRM v0.45 引入的新特性
在检查器中设置 BlendShape 的状态。
VRMBlendShapeProxy(VRM混合形态代理)
VRMBlendShapeProxy 列表需要在播放模式才会在检查器中显示。
使用方法如下:
- 在 BlendShapeAvatar 的检查器中进行设置(Editor 选项卡)。
- 将 BlendShapeClip 的值更改为0~1之间的值(在运行时)。
译者补充:
这里新手可能难以理解,你第一次调这些滑块的时候,角色的表情可能是没有发生任何变化,这是因为目前这些 BlendShape 里面的内容是空的,你需要在别的地方先进行设置。这一个滑块实际同时控制着多个不同的面部动作(一个表情是由多个 BlendShape 混合而成的)。
设置方法如下:
双击图上的 BlendShapeAvatra 字段(直接双击圆点左边的文字,会给你跳转到 BlendShapeAvata 的检查器界面),然后会有一个按钮列表一样的界面一一对应刚才这个滑块列表,这个界面就是给你设置每个表情的地方,具体看后面的图,每个表情下面还能下拉出很多滑块,这个时候你就需要根据你目前制作的表情调整这一堆的滑块,然后你再回之前的滑块列表就会发现你设置过的表情就有变化了。这一部分初学者可能搞不明白。
BlendShapeAvatar
可以在角色资源的检查器中创建表情
双击“Blend Shape Avatar”字段
或者
选择你想调整的表情的名称来切换显示。接下来以 Fun 为例子。
将mouth_smile、eye_smile和eyeblow_smile设为100
译者补充:实测要完成做出官方演示的表情还需要叠加75左右的 mouth_a
这个模型只调整 mouth_smile 的话只会让嘴角上抬,不会让嘴张开。
可以将眉毛、眼睛和嘴巴等各个 BlendShape(混合形状) 合并成一个表情,并指定创建的 BlendShape 名称,如上图所示。
在更改滑块并创建 BlendShape 之后,请按“Apply”以记录参数。
新版本似乎取消了这个地方的“Apply”按钮,不需要手动应用,老版本在滑块列表上面可以找到两个按钮。
BlendShape的预设
这是给BlendShapeClip预设的一些名字。下面是可用的预设:
NEUTRAL(中性/常态/默认表情)
作为标准的面部表情,一般是待机状态的表情。
所有表情都是在这个表情的基础上进行变化,如果这个表情发生变化,为基底的其他表情全都会收到影响。
A, I, U, E, O
对应对口型同步的 あ・い・う・え・お(aa·ih·ou·E·oh)的嘴型。
因为 VRM 是由日本发起的,所以这几个发音是五十音的韵母发音(啊,一,呜,欸,哦),不是英语字母或拼音的发音。但在 VRM1.0 中,将(A・I・U・E・O)替换成了国际音标(aa·ih·ou·E·oh),但发音基本是一样的。
Blink
双眼眨眼。
Blink_L, Blink_R
分别是左右眼单独眨眼。
Joy, Angry, Sorrow, Fun
喜,怒,哀,乐。
LookUp, LookDown, LookLeft, LookRight
当使用 BlendShape 控制视线时,需要使用这些预设。
也就是说如果你不用 BlendShape 控制视线,那么可以不用设置这几个 BlendShape。
Unknown(未定义)
其他非 VRM 预设的表情。
如果你要制作其他表情,则需要使用这个分类。比如ARkit
改变 BlendShapeProxy 的值(在运行时/run time)
[可选] 追加表情
确定保存文件。请选择最后面的按钮,输入名称来创建设置。
你可以使用下面的代码调用它(非开发人员用不到这个):
// unknownなのでstringで呼び出し
proxy.ImmediatelySetValue("びっくり", 1.0f); // 0から1で指定
官方文档演示用的 UniVRM 是旧版,我用的新版,UI不一样,官方文档就只有这么一句话和两张图,完全没讲清楚。新版追加新表情是点底下的“+”号,旧版应该是点那个“Add BlendShapeClip”按钮。我这里演示一下新版本的操作。
[可选] 变换材质颜色
要设置材质变换,需要切换到 Material List 选项卡,或者在 Project 视图中选择 BlendShape 文件进行编辑。(例如预设的 BlendShape.XXX 之类的,或你自己创建的名称)。材质变换的相关细节后面会讲。
BlendShape 的设置(v0.45)
BlendShape 关联的资源
模型名称+BlendShapes
”的文件夹,Perset 的 BlendShapeClips 会存储在这个文件夹里。设置界面
BlendShapeAvatar资产的检查器视图。
BlendShapeClip 资产的检查器
各个 BlendShapeClip 的设置
1.选择BlendShapeClip
2. 调整滑块制作表情
3.在预览中检查模型的BlendShape
权重预览滑块
来测试0~1之间的效果。结果将显示在下方的预览窗口中。在预览窗口按住
左键或右键拖动
来旋转视角。中键拖动
来移动视角。BlenderShape 的 Binary(二值化) 设置(v0.45)
导出时烘焙 BlendShape 的状态
使用 UniVRM 进行导出时,可在 SkinnedMeshRenderer
中修改当前 BlendShape 值,并将其设置为基本状态。
例如,点击 BlendShapes 并调整 bs_face.Eye_blink 滑块将值从 0 更改为 57.8。
需要启用 Pose Freeze
复选框。
基本状态(BlendShape value = 0)发生了改变
(因为基本状态改变,因此在没有任何表情的情况下,眼睛也是没有完全睁开的)。
检查 BlendShape 的法线
自Unity 2018以来,当将fbx导入Unity时,会自动重新计算BlendShape的法线,并将原始的法线替换为重新计算的法线,导致模型表面出现意外的变化。
详细信息
如果BlendShape的法线为(0, 0, 0),则表面的法线将不会发生变化。但看起来重新计算的法线取代了原来的BlendShape法线,导致模型出现了意外的变化。当基础网格的法线被改变时,在镜像之后左右分界处等位置会更明显。
您可以使用 MToon 的法线调试显示来检查法线。
您可以执行 fbx 文件中 Materials
标签下的 Extract Materials...
操作,以提取材质。
将FBX文件拖动到 Hierarchy(层级) 窗口并选中它。
在 Inspector(检查器) 中,点击Select(选择)
->Materials(材质)
->Extract Materials(提取材质)
,然后选择一个文件夹来保存这些材质。
接下来,选择所有材质
将 Shader 更改为 VRM/MToon
。(前面的章节有详细提到这些操作)
确认法线
因为只是为了确认法线而暂时 MToon 化,所以不需要纹理等的设定。
在 MToon 的 Options(选项)
中,选择 Debugging Options
,然后将 Visualize
设置为 Normal
。
回到 SkinnedMeshRenderer 。
拖动 BlendShape 滑块,检查法线。
示例中,鼻尖 和 下唇 的法线出现了明显的错误。
译者补充:
此处示例模型不是之前使用的艾莉西亚的模型,因为艾莉西亚的模型各方面都比较正常,这里为了演示错误情况另外使用了其他模型,如果你用艾莉西亚的模型测试这些操作可能不够直观,本人用艾莉西亚的模型测试的时候,只在眼部周围和耳朵上发现了法线的变化。
模型信息
这个模型是
- 将 Vroid 的 VRM 导入到 Blender
- 再从 Blender 导出为 FBX
- 最后将 FBX 导入到 Unity
得到的结果
修复 BlenderShape 的法线
用上述方法发现 BlendShape 有问题时,修复的方法。
选择 fbx 的 Model
标签。
检查并应用 Legacy Blend Shape Normal
。
确保 BlendShape 是正确的。
与修正前的区别
除了鼻尖和下唇外,舌头的法线也变得完全不同。