为什么法线贴图的颜色是蓝色和紫色?


11

我正在学习法线贴图。我知道RGB值会转换为XYZ,但我的问题是如何转换它,为什么法线贴图的颜色是蓝色和紫色?

Answers:


12

因为法线贴图覆盖的是从-1到1的向量,所以将这个范围扩展为0-> 1是有意义的,因此所有的范围都可以适合RGB的范围。

因此,通常我们对法线进行转换以将其转换为可见的东西。

vec3 colour = vec3(0.5) + normal * 0.5;

蓝色是因为应该使用法线贴图相对于基本图元(三角形/等)法线使用默认的(0,0,1)方向,以指示与三角形法线没有偏差。通常,片段着色器需要在运行时相对于当前的每个像素法线旋转此法线。


该代码vec3 colour = vec3(0.5) + normal * 0.5;将RGB转换为XYZ吗?
Abhinay Singh Negi '18

1
@AbhinaySInghNegi不,颜色是RGB,法线是XYZ,因此将XYZ转换为RGB。如果要将RGB转换为XYZ,请使用vec3 normal = (colour - vec3(0.5)) * 2.0;
bram0101 '18

20

仅切线空间法线贴图主要是蓝色的。这是因为蓝色表示法线(0,0,1),当三角形位于x和y平面(即垂直于表面)中时,法线不变。切线x和双切线y(也称为双法线)在红色和绿色通道中编码,它们的形式为三角形表面上的一个点创建切线空间法线。

如果切线空间法线贴图仅将颜色编码为红色(1.0、0.0、0.0),则将生成平行于三角形表面的切线空间法线。这是从未见过的,因为这意味着三角形只会在与表面和视图矢量成90度的角度被照亮,此时您将始终无法看到该三角形。

世界空间法线贴图对球体上的法线单位进行编码,因此一旦从每个通道的[-1,1]到[0,1]进行编码,就可以成为主要不同的颜色。

可以在此处进行比较:

在此处输入图片说明

实际上,法线贴图通常以2通道格式进行编码,例如BC5,实际上我们仅存储x和y,而z被重构,因为我们知道它是单位矢量。这使您可以在不增加文件大小的情况下使用更多位来保持较高的精度。


切线空间不是唯一地参数化的,但是我发现周围有很多网格+法线贴图在切线空间中。是否有定义切线空间基础的常规方法?
亚历克·雅各布森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.