BlendShape(混合形状)

BlendShape的设置

UniVRM v0.45 引入的新特性

在检查器中设置 BlendShape 的状态。

VRMBlendShapeProxy(VRM混合形态代理)

VRMBlendShapeProxy列表-by.北溟瞬息.png

VRMBlendShapeProxy 列表需要在播放模式才会在检查器中显示。

使用方法如下:

译者补充:
这里新手可能难以理解,你第一次调这些滑块的时候,角色的表情可能是没有发生任何变化,这是因为目前这些 BlendShape 里面的内容是空的,你需要在别的地方先进行设置。这一个滑块实际同时控制着多个不同的面部动作(一个表情是由多个 BlendShape 混合而成的)。
设置方法如下:
双击图上的 BlendShapeAvatra 字段(直接双击圆点左边的文字,会给你跳转到 BlendShapeAvata 的检查器界面),然后会有一个按钮列表一样的界面一一对应刚才这个滑块列表,这个界面就是给你设置每个表情的地方,具体看后面的图,每个表情下面还能下拉出很多滑块,这个时候你就需要根据你目前制作的表情调整这一堆的滑块,然后你再回之前的滑块列表就会发现你设置过的表情就有变化了。这一部分初学者可能搞不明白。


BlendShapeAvatar

可以在角色资源的检查器中创建表情

在角色资源的检查器中创建表情1-by.北溟瞬息.png

双击“Blend Shape Avatar”字段

或者

BlendShapeEditor的检查器-by.北溟瞬息.png

选择你想调整的表情的名称来切换显示。接下来以 Fun 为例子。

VRM-以FUN为例子-by.北溟瞬息.png

将mouth_smile、eye_smile和eyeblow_smile设为100

译者补充:实测要完成做出官方演示的表情还需要叠加75左右的 mouth_a
这个模型只调整 mouth_smile 的话只会让嘴角上抬,不会让嘴张开。

可以将眉毛、眼睛和嘴巴等各个 BlendShape(混合形状) 合并成一个表情,并指定创建的 BlendShape 名称,如上图所示。

在更改滑块并创建 BlendShape 之后,请按“Apply”以记录参数。

新版本似乎取消了这个地方的“Apply”按钮,不需要手动应用,老版本在滑块列表上面可以找到两个按钮。

BlendShape的预设

Blendshape的预设-by.北溟瞬息.png

这是给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),但发音基本是一样的。

分别是左右眼单独眨眼。

Joy, Angry, Sorrow, Fun

喜,怒,哀,乐。

LookUp, LookDown, LookLeft, LookRight

当使用 BlendShape 控制视线时,需要使用这些预设。

也就是说如果你不用 BlendShape 控制视线,那么可以不用设置这几个 BlendShape。

Unknown(未定义)

其他非 VRM 预设的表情。

如果你要制作其他表情,则需要使用这个分类。比如ARkit

改变 BlendShapeProxy 的值(在运行时/run time)

改变 BlendShapeProxy 的值-by.北溟瞬息.png
可以通过 Inspector(检查器) 进行操作。

[可选] 追加表情

VRMBlendShapeProxyRuntime.png

确定保存文件。请选择最后面的按钮,输入名称来创建设置。

BlendShapeClipOption.png

你可以使用下面的代码调用它(非开发人员用不到这个):

// unknownなのでstringで呼び出し
proxy.ImmediatelySetValue("びっくり", 1.0f); // 0から1で指定

官方文档演示用的 UniVRM 是旧版,我用的新版,UI不一样,官方文档就只有这么一句话和两张图,完全没讲清楚。新版追加新表情是点底下的“+”号,旧版应该是点那个“Add BlendShapeClip”按钮。我这里演示一下新版本的操作。

新版本UniVRM追加表情-by.北溟瞬息.png

[可选] 变换材质颜色

变换材质的颜色-by.北溟瞬息.png

要设置材质变换,需要切换到 Material List 选项卡,或者在 Project 视图中选择 BlendShape 文件进行编辑。(例如预设的 BlendShape.XXX 之类的,或你自己创建的名称)。材质变换的相关细节后面会讲。

BlendShape 的设置(v0.45)

BlendShape 关联的资源

导入VRM后,会创建一个名称为“模型名称+BlendShapes”的文件夹,Perset 的 BlendShapeClips 会存储在这个文件夹里。

blendshapeclip_assets.png



BlendShapeAvatar 资产

blendshapeavatar.png




设置界面

这些资源有以下设置界面。

  BlendShapeAvatar资产的检查器视图。

        Editor 选项卡
        BlendShapeClip 的 选择/创建 的设置

select_blendshapeavatar.png



        List 选项卡(v0.45开始)
        BlendShapeClip 列表

list.png



  BlendShapeClip 资产的检查器

        BlendShape 选项卡
        创建 BlendShape 设置:

alicia_binary.png



        BlendeShape List 选项卡
        您可以在 BlendShape 选项卡中查看创建的值。这个东西不太常用。

blendshape_angry.png



Materia List 选项卡
可以通过BlendShape控制 LookAt(后面会讲),或使用BlendShape来更改颜色的设置。

material_color.png




各个 BlendShapeClip 的设置

为BlendShapeClip创建一个表情(不限于脸部)。

1.选择BlendShapeClip
从 BlendShapeAvatar 的检查器中选择一个 BlendShapeClip

select_blendshapeavatar.png


或者直接在项目(project)窗口中单击 BlendShapeClip 资源

旧版UI:
select_blendshapeclip.png


新版UI:

新版BlendShape界面.png



2. 调整滑块制作表情
当你点击 BlendShape 选项卡,现有 skinnedMeshRenderers 的名称将在 Inspector 窗口中列出。单击列出的任何名称,然后可以调整 BlendShape 值。更改值会立即反映出来。(apply按钮从v0.45开始被删除)


3.在预览中检查模型的BlendShape
使用权重预览滑块来测试0~1之间的效果。结果将显示在下方的预览窗口中。
在预览窗口按住左键或右键拖动来旋转视角。
在预览窗口按住中键拖动来移动视角。


BlenderShape 的 Binary(二值化) 设置(v0.45)

不允许中间值的设置-旧版.png

在 v0.45 版本中,BlendShape 设置中添加了二值化选项。这是为了不想显示 BlendShape 的中间过渡状态的用户而设计的。目标值将自动四舍五入。

当加载的应用程序版本为v0.45或更高时,此功能将生效。

不允许中间值的设置2-旧版.png

导出时烘焙 BlendShape 的状态

使用 UniVRM 进行导出时,可在 SkinnedMeshRenderer 中修改当前 BlendShape 值,并将其设置为基本状态。
例如,点击 BlendShapes 并调整 bs_face.Eye_blink 滑块将值从 0 更改为 57.8。

blendshape_value-87.8.jpg

 

需要启用 Pose Freeze 复选框。

check_freeze.jpg

 

导出之后的效果:bake_blink.gif

基本状态(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

mtoon_normal.gif

回到 SkinnedMeshRenderer 。

拖动 BlendShape 滑块,检查法线。

broken_normal.jpg

示例中,鼻尖 下唇 的法线出现了明显的错误。

译者补充:
此处示例模型不是之前使用的艾莉西亚的模型,因为艾莉西亚的模型各方面都比较正常,这里为了演示错误情况另外使用了其他模型,如果你用艾莉西亚的模型测试这些操作可能不够直观,本人用艾莉西亚的模型测试的时候,只在眼部周围和耳朵上发现了法线的变化。


模型信息
这个模型是

得到的结果

修复 BlenderShape 的法线

用上述方法发现 BlendShape 有问题时,修复的方法。

选择 fbx 的 Model 标签。

检查并应用 Legacy Blend Shape Normal

legacy_normal_fixed.jpg

确保 BlendShape 是正确的。

与修正前的区别
除了鼻尖和下唇外,舌头的法线也变得完全不同。