Skip to main content

检查 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

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

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


模型信息
这个模型是

  • 将 Vroid 的 VRM 导入到 Blender
  • 再从 Blender 导出为 FBX
  • 最后将 FBX 导入到 Unity

得到的结果

修复 BlenderShape 的法线

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

选择 fbx 的 Model 标签。

检查并应用 Legacy Blend Shape Normal

legacy_normal_fixed.jpg

确保 BlendShape 是正确的。

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