学习资料:
为何要用法线贴图
为了提升模型表现细节而又不增加性能消耗,所以不选择提高模型的面数,而是给模型的材质Shader中使用上法线贴图(Normal Map),通过更改模型上的点的法线方向,增加光影凹凸效果,从而提升模型表现细节。使用法线贴图能使一个三角面(平面)表现出凹凸的视觉效果!
法线贴图原理
上面的文章解释了很多问题:
法线被存储在切线空间(Tangent Space Normal)中,切线空间以点的法线方向为Z轴,对应了RGB中的B值,所以法线贴图看上去呈蓝色的。如果存储在世界空间中,则各个方向会表现出不同的颜色值。https://www.zhihu.com/question/23706933/answer/161968056
为何不选择将法线存储在世界空间中(World Space Normal)或是模型空间中(Object Space Normal)。
在使用法线贴图时,可以将光向量转换到Tangent Space里做计算,也可以把法线向量转换到World Space与光向量进行计算,结果是一样的,但为何选择使用前一种方法?因为后者每个点都要进行一次空间坐标变换,而由于光向量是平行光,所以前一种方法只需计算一次。
法线贴图的存储与使用
法线(Normal)每个轴向的取值范围为-1到1,而颜色值(Pixel)的取值范围为0到1。所以在存储(法线方向存储为法线贴图)和使用(在程序中将法线贴图每个点的颜色转变为法线方向)时,存在一个简单的计算转换过程。
存储法线贴图 Pixel = ( Normal + 1 ) / 2
使用法线贴图 Normal = Pixel * 2 - 1