Unity-Shader之法线贴图使用注意事项

本文介绍了Unity中法线贴图在游戏,尤其是手游中的使用,通过低面数模型配合法线贴图模拟高精度模型的效果。讨论了法线贴图在切线空间的重要性,以及如何进行法线向量的存储、映射和反算。在处理光照和动画时,关键在于正确转换切线空间到世界空间的坐标。文章详细阐述了变换矩阵的计算和法线贴图的压缩方法。
摘要由CSDN通过智能技术生成

法线纹理在游戏生产过程中使用的频率非常高,在游戏中,尤其是手游中,模型面数过高是非常吃性能的。

在模型方面,美术在建模时会先创建一个高面数、高精度的精模,用精模渲染出一张法线贴图后,再创建一个低面数的简模,通过给简模附加法线贴图的方法,来达到使简模看起来像精模的目的。

这样就会产生一个问题,但是现在虽然看起来像精模了,但是光照效果怎么处理呢?最终光照上去,不还是会露馅吗?

这就需要我们在处理shader时,将法线贴图的法线方向当成真的法线方向计算进去。这里举例说明下法线贴图处理的常用方式。

法线分为模型空间下的法线和切线空间下的法线两种,一般来说,我们使用切线空间下的法线比较多。切线空间,就是以模型真正顶点的切线(Tangent)、法线(Normal)和副法线(Binormal)组成的坐标空间(TBN)空间,切线空间的XYZ轴方向分别对应TBN三条归一化后的向量。我们在法线贴图中,保存的是相对于该切线空间坐标系下,我们想要模拟的法线方向向量(下图中红线所指方向)。
其中的切线、法线都可以在Shader中的顶点信息中直接访问到,而副法线则需要用切线和法线的叉积算出来。

Binormal = Tangent x Normal
下图中的坐标系就是该顶点的切线空间,模型中每一个顶点都有一个自己的切线空间坐标系。

这里写图片描述

如果法线贴图中不需要模拟这个点的法线方向,该顶点对应的法线方向就是Z轴所指的方向。这样的话法线贴图中该点保存的向量就是(0,0,1),映射到法线贴图上的RGB 就是(0.5,0.5,1)看起来是淡蓝色(下面讲如何映射)。因为模拟精模时绝大部分法线并没有特别明显的变化,所以法线贴图整体看起来都是淡蓝色。
如下图:

(在shader中颜色值范围会映射到 [0,1]之间,(0.5,0.5,1)对应的颜色值就是(12

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值