使用 ThreeJS GLTF Blender Exporter 的法线贴图值

Normal Map Values with ThreeJS GLTF Blender Exporter

如果我在 "Geometry" 下的 Blender 中将纹理的 "Normal" 滑块值设置为 2.0。当我查看控制台日志中的对象时,我看到 X: 1, Y: -1 的正常值。我错过了什么吗?

我正在使用 ThreeJS R97。

根据你对 "Normal slider under Geometry" 的描述,我猜你说的是 Blender 2.79x 或更早版本,Blender 的内置渲染器,material 设置,其中滑块控制应用的法线贴图。

所以,这里有几件事要谈。首先,glTF 导出器并不正式支持内置的 Blender Render materials,而且这个滑块没有像您已经发现的那样连接起来。出口商的开发工作现在集中在一个名为 glTF-Blender-IO 的插件上,它在 Blender 2.79 中工作,但实际上预装在 Blender 2.80 Beta 中。

此插件使用 "Principled BSDF" 节点与 Cycles 和 Eevee 引擎一起工作,可以选择与一些辅助节点(例如 "Normal Map" 结合使用。因此,glTF 导出器希望找到这样连接的法线贴图:

请记住,glTF 格式本身不包含节点,但是,导出器会理解这种连接并将法线贴图写入 glTF 文件,以及可选的底色、金属色、粗糙度、和发射贴图(通过发射所需的另一个单独节点)。

不过这个方案有点小问题,好像力道还没有挂上。 Blender 的 "Normal Map" 节点包含一个 "strength" 参数,而 glTF 格式包含一个名为 normalTexture.scale 的相应参数,它做同样的事情,但是,看起来导出器没有从一个复制值地方到另一个。我就此提交了 issue #241,希望最终会得到解决。

在 ThreeJS 中,X: 1, Y: -1 的值是有意用于单位强度法线贴图的。 ThreeJS 法线贴图使用与 glTF 格式不同的 Y 约定,因此在从 glTF 加载法线贴图时有意翻转 Y。因此,要使其强度加倍,您可以设置 X:2,Y:-2。目前,在导出器添加功能以复制缺失的强度参数之前,在代码中分配它(或手动编辑 glTF)似乎是唯一的选择。