ThreeJS GLTF Blender Exporter 的法线贴图值

Posted

技术标签:

【中文标题】ThreeJS GLTF Blender Exporter 的法线贴图值【英文标题】:Normal Map Values with ThreeJS GLTF Blender Exporter 【发布时间】:2019-06-14 10:28:36 【问题描述】:

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

我正在使用 ThreeJS R97。

【问题讨论】:

【参考方案1】:

根据您对“几何下的法线滑块”的描述,我猜您是在谈论 Blender 2.79x 或更早版本,Blender 的内置渲染器,材质设置,其中该滑块控制应用的法线贴图的强度。

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

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

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

不过这个计划有个小折痕,看来实力还没有上钩。 Blender 的“法线贴图”节点包含一个“强度”参数,glTF 格式包含一个名为normalTexture.scale 的相应参数,它做同样的事情,但是,看起来导出器没有将值从一个地方复制到另一个地方。我为此提交了issue #241,希望最终会得到解决。

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

【讨论】:

感谢您的广泛回复!我决定只使用材质下的 userData 来导出我想要的正常比例值。当我将它导出到 ThreeJS 时,我可以检索它并应用它。您是说对于从 Blender 导入到 ThreeJS 的任何 GLTF 模型,我需要将 Y 正常比例值设为负值吗?那么,当我在 javascript 中应用它时,我应该将导入的 GLTF 模型的 Y 值设为负数? ThreeJS GLTFLoader 应该会自动为您翻转 Y。切线空间法线贴图有两种不同的约定,一种是绿光似乎照射到向外凸块的顶部,另一种是绿光似乎照射到向外凸块的底部。 glTF 使用前者,我不是 ThreeJS 专家,但我的理解是 ThreeJS 使用后者,因此它需要翻转所有法线向量的 Y 分量。 我现在明白了。从游戏中的模型来看,ThreeJS glTF 导出器似乎正在进行所需的调整,所以当我在 JS 中设置正常值时,我不必否定 Y 值。

以上是关于ThreeJS GLTF Blender Exporter 的法线贴图值的主要内容,如果未能解决你的问题,请参考以下文章

ThreeJS模型展示为黑色,模型出不来

ThreeJS 加载gltf模型过暗问题解决

surfer如何导出三维gltf文件

如何在threejs中移动gltf模型?

Blender 2.79 材料导出到 gltf 失去光泽

如何在 THREEJS 级别添加 GLTF 模型?