shader 获取法线_【Unity Shader】六、使用法线贴图(Normal Map)的Shader

本文介绍了为何使用法线贴图提升模型细节而不增加性能消耗,详细解析了法线贴图原理,包括存储和使用法线贴图的转换过程。并提供了一个使用法线贴图的Shader实例,讲解了TANGENT_SPACE_ROTATION宏、ObjSpaceLightDir()方法以及法线贴图计算的注意事项,展示了不同凹凸参数的效果。
摘要由CSDN通过智能技术生成

学习资料:

为何要用法线贴图

为了提升模型表现细节而又不增加性能消耗,所以不选择提高模型的面数,而是给模型的材质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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值