Shader笔记
2017-05-10 本文已影响0人
此年此景
切线空间是由模型中该顶点处的法线、切线和副切线组成的,就算没有法线纹理,模型的每个顶点也是有自己的切线空间的。因为我们要在fragment shader里构建变换矩阵,所以到了像素级别的时候你可以认为此时每个像素的切线空间的三个坐标轴是由顶点处的三个向量插值过来的。
你所说的“每个像素点的法线应该都是和它自己的切线空间的z轴重合的”,准确说来是每个像素点的插值法线应该都是和它自己的z轴重合的,因为我们就是使用了这个值肯定是一致的……法线贴图里存储的是在这个切线空间里面的某个方向,是我们希望高模中该处的法线方向。
你会有这样的问题应该是把模型法线和我们期望的法线弄混了。法线贴图一般是由高精度模型得来的,而我们真正使用的模型是由高模简化而来的,它包含了的顶点数和面片数都大大小于高模,这就意味着法线精度一定会缺失。所以我们就需要使用一张像素精度级别的纹理来存储高模的法线信息,这就是法线纹理。
顶点坐标和正切线为什么是float4,这有点意思,因为这里它表示是齐次坐标,比如我们这样表示一个float4(x,y,z,w),当w = 1的时候它表示点(x,y,z),当w= 0的时候它表示一个向量(x,y,z)。区别就在这里,当W为1时表示点,当W为0时表示向量。