Unity Shader 凹凸映射 法线纹理 切线空间下计算光照模型

 

凹凸映射的目的:是使用纹理来修改模型表面的法线,用于为模型提供更多细节。

凹凸映射的方式:

高度纹理(height map):用于模拟表面位移(displacement),也称作高度映射(height mapping)
法线纹理(normal map):用于直接存储表面法线,又称为法线映射(normal mapping)。
 

(1)使用高度纹理

高度图中存储的强度值,它用于表示模型表面局部的海拔高度。因此,颜色越浅表明该位置的表面越向外凸起,而颜色越深表明该位置越向里凹。这种方法的好处就是非常的直观,我们可以从高度图中明确的知道一个模型表面的凹凸情况,但缺点是计算更加复杂,在实时计算时不能直接的得到表面法线,而是需要由像素的灰度值计算而得,因此需要消耗更多的性能。

(2)使用法线纹理

什么是法线纹理?简单的来说就是将一个模型的法线信息(xyz)映射成纹理的颜色(rgb)值,并保存成一张纹理,那么这个纹理就是法线纹理。

需要使用如下公式将,法线方向的分量[-1,1]映射到像素分量[0,1]: 

                                                                                             pixel = \frac{normal + 1}{2}

当在Shader中对法线纹理进行采样后,需要对结果使用公式进行一次反映射,用于得到原先的法线方向: 

                                                                                             normal = pixel * 2 - 1

对于模型的每个顶点,它都有一个属于自己的切线空间,这个切线空间的原点就是该顶点本身,而Z轴是顶点的法线方向(n),X轴是顶点的切线方向(t),而Y轴可由法线和切线的叉积而得,而被称为副切线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值