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

#1 楼

由于法线贴图覆盖的是从-1到1的向量,因此将这个范围扩展为0-> 1是有意义的,因此所有范围都可以适合RGB范围。转换法线以将其转换为我们可以看到的东西。

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

)法线,默认(0,0,1)方向指示与三角形法线没有偏差。通常,片段着色器需要在运行时相对于当前的每个像素法线旋转此法线。

评论


$ \ begingroup $
该代码是否为vec3颜色= vec3(0.5)+普通* 0.5;将RGB转换为XYZ吗?
$ \ endgroup $
– Abhinay Singh Negi
18/09/13在13:09



$ \ begingroup $
@AbhinaySInghNegi不,颜色为RGB,法线为XYZ,因此将XYZ转换为RGB。如果要将RGB转换为XYZ,请使用vec3 normal =(color-vec3(0.5))* 2.0;
$ \ endgroup $
–bram0101
18/09/13在15:55

#2 楼

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

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

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

可以在此处进行比较:



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

评论


$ \ begingroup $
切线空间不是唯一地参数化的,但是我发现周围有很多网格+法线贴图切线空间图像。是否有定义切线空间基础的常规方法?
$ \ endgroup $
– Alec Jacobson
19年5月29日在15:34