法线贴图和高光贴图

Posted by QXSoftware on November 11, 2016

之前在项目中经常说起法线贴图高光贴图,这些到底是什么呢?

法线贴图(Normal Map)

首先,法线贴图是一张特殊的纹理,其中每个像素中存储的是法线信息。按照存储的法线信息不同分为两类:模型空间的法线贴图和切空间的法线贴图。

模型空间的法线贴图

如果法线纹理中存储的是模型空间中的法线坐标,则这种纹理称为模型空间的法线贴图

切空间的法线贴图

对于每个顶点,它都有一个切空间,这个切空间由这个顶点的法线(Normal)切线(Tangent)副法线(Binormal)构成。空间的 xyz 坐标轴分别对应于 TBN(Tangent Binormal Normal)。其中,binormal = cross(normal, tangent)

切空间的法线贴图中每个像素中存储的法线信息都是在这个切空间中的。由于大部分的法线方向在切空间中都是 normal = (0,0,1),所以转换为颜色值就是 rgb=(0.5,0.5,1),这也是为什么大多数法线贴图看起来都是那种蓝紫色的。

example-normal-tex

下面的图来自于opengl-tutorial

法线:

normal

切线:

tangent

切线可以有无数多条,但是我们只取延 uv 方向的那一条:

tangent form uvs

加上副法线后构成的完整切空间:

binormal

高光贴图

其实高光贴图的准确说法是高光蒙版贴图。因为高光贴图是用来精确控制模型表面的高光区域的。简单来说就是这样的逻辑:

fixed4 frag(v2f i) : SV_TARGET
{
	fixed specVal = tex2D(_SpecularTex, i.uv);
	fixed3 specular = specVal * calcedSpecular;
	...
}

参考资料:


转载请注明出处:

This work is licensed under a MIT License.