在Ray里正确使用OpenGL法线贴图
ARonisc
2021年12月13日 06:00

前言

大家好,我是AR。上次写了个法线分辨的专栏,但是没写清楚,所以删掉了。

随后我发现一些朋友在使用法线上还是存在错误。

因此打算重新补充法线贴图相关问题,希望大家能耐心看完,转发给需要了解的人

OpenGL法线与DirectX法线介绍

切线空间的法线是我们最常用的法线。由于在G通道上记录方式不同,

被分成了openGL法线与DirectX法线(下面简称GL法线和DX法线)

但他们本质是一样的,可以互相转换

只是某些软件上用的是GL法线,而某些软件用的是DX法线

因此需要注意法线不可以用错

如何分辨GL法线与DX法线

分辨GL法线和DX法线的方法有两种

第一种方法:肉眼观察

如下图,Bump是指凸起的意思,Hole是指凹下去的意思

在GL法线中,凸起的物体,其法线贴图看上去的感觉也是凸起的

而DX法线刚好相反,凸起的物体,其法线贴图看上去的感觉是凹陷的

第二种方法:顺时针为DX法线,逆时针为GL法线

正如上图的说明所示,当拿到一张法线贴图时,看它某个部位一圈的颜色变化顺序

下面来墙壁材质举例说明一下

这是一张墙壁材质,从观看上来看,墙壁上面的线条是从墙面上凸出来的

网站提供了5种贴图,其中包含了我们需要的法线贴图

下面我们用刚才所说的两种方法来判断该墙壁的法线贴图是GL法线还是DX法线

肉眼判断:上面的横线能看出来是凸出来的,线交叉形成的坑是凹下去的,符合与原贴图的凹凸感,所以是GL法线

旋转方向:将法线上的颜色按 红-黄-绿-蓝 的顺序标出来,是逆时针的方向,是GL法线

一些材质网站很贴心的给你附上了GL与DX法线

比如下面Poly Haven(原Texture Haven)网站,就同时给你准备了GL与DX法线下载

可以看到GL法线上,石头是跟原贴图一样,是凸出来的,与原贴图观感一致

你可以按照软件需要下载对应法线,这里推荐你下载GL法线,因为大部分软件都用GL法线

GL法线与DX法线转换

GL法线与DX法线是可以相互转换的,他们只是G通道上反相而已

因此在PS中,选中G通道,按ctrl+I反相即可转换

下面就是刚才那张墙壁GL法线贴图转为DX法线贴图的样子

肉眼观察,与原贴图凹凸感相反;颜色旋转方向是顺时针,符合DX法线判断标准

Ray渲染使用的是GL法线

这里做个测试,拿刚才墙壁贴图来在Ray中进行渲染

来看看GL法线与DX法线在Ray中观感如何,以及判断Ray用的到底是什么类型法线

首先创建一份Ray的材质FX,将各个贴图附加在对应通道上

然后加载Ray环境,使用Ray自带的Water平面进行测试

附上Wall.fx后在平面上添加一个点光源

首先我们测试GL法线,如下图所示,可以看到灯光把一个凹坑的位置照亮,光感很自然

下面是GL法线动图效果,可以看到光源移动过程中,照亮的区域都很自然

随后我们切换成DX法线,可以看到明明是本该照亮的地方,却出现奇怪的黑影

或者说本该是凹下去的地方,现在看上去却变成了凸起来

因此,Ray使用的是OpenGL法线,所以在Ray渲染中使用法线前确认一下是否为GL法线

举一个错误和一个正确案例

有一些好心人特地为大家制作了Ray的材质包,可惜他给错了法线贴图

比如下面案例的作者CherryBlossom,他配布了很多不错的材质

但是他有一些材质配的是DX法线,有一些材质配的是GL法线

因此拿他的材质来说明一下,大家使用法线的时候要注意区分GL和DX法线

错误案例:Ground材质    -    https://bowlroll.net/file/255598

这个材质,很明显那些黑缝是凹下去的,因此在GL法线观感上,能看出凹下去的缝隙

下载材质包后,可以看到里面有个2K的法线

打开该法线,可以看到缝隙观感上是凸出来的,因此这个是DX法线

需要转换成GL法线后才可以在ray中使用,所以这里他配错了法线

正确案例:Flagstone - https://bowlroll.net/file/255336

这同样是一个很多缝隙的地面,其GL法线上能看出地板的缝隙

包里的内容如下

这张法线凹凸观感跟原图一样,旋转方向也是逆时针,是GL法线,因此法线配正确了

用软件生成法线也要注意其生成的类型

例如在Materialize软件中,使用一个高度贴图来生成准确的法线,他默认会给你生成DX模式的法线,你需要点击“反转法线Y通道”来保存GL模式的法线

又例如在PS中,使用菜单中 滤镜-3D-生成法线 的方式生成法线

他会给你生成DX模式的法线,你需要在调整完合适的参数后,点击“反相高度”来转为GL法线

内容引用

游戏资源中常见的贴图类型https://zhuanlan.zhihu.com/p/260973533

快速判断OpenGL和DirectX法线的技巧https://zhuanlan.zhihu.com/p/341708714

墙壁贴图https://www.textures.com/download/PBR0809/139275

石头贴图https://polyhaven.com/a/cobblestone_floor_08

ARonisc

2021/12/12