凹凸映射的目的:是使用纹理来修改模型表面的法线,用于为模型提供更多细节。
凹凸映射的方式:
高度纹理(height map):用于模拟表面位移(displacement),也称作高度映射(height mapping)
法线纹理(normal map):用于直接存储表面法线,又称为法线映射(normal mapping)。
(1)使用高度纹理
高度图中存储的强度值,它用于表示模型表面局部的海拔高度。因此,颜色越浅表明该位置的表面越向外凸起,而颜色越深表明该位置越向里凹。这种方法的好处就是非常的直观,我们可以从高度图中明确的知道一个模型表面的凹凸情况,但缺点是计算更加复杂,在实时计算时不能直接的得到表面法线,而是需要由像素的灰度值计算而得,因此需要消耗更多的性能。
(2)使用法线纹理
什么是法线纹理?简单的来说就是将一个模型的法线信息(xyz)映射成纹理的颜色(rgb)值,并保存成一张纹理,那么这个纹理就是法线纹理。
需要使用如下公式将,法线方向的分量[-1,1]映射到像素分量[0,1]:
当在Shader中对法线纹理进行采样后,需要对结果使用公式进行一次反映射,用于得到原先的法线方向:
对于模型的每个顶点,它都有一个属于自己的切线空间,这个切线空间的原点就是该顶点本身,而Z轴是顶点的法线方向(n),X轴是顶点的切线方向(t),而Y轴可由法线和切线的叉积而得,而被称为副切线

238

被折叠的 条评论
为什么被折叠?



