凹凸映射

前言

   为了使物体表面产生凹凸细节,除了直接改变模型顶点,还可以使用一张法线纹理更改表面法线坐标,再配合光照形成凹凸表面。本节主要根据冯乐乐shader入门中的凹凸映射撰写,如有问题欢迎指出。

向量存储

   将法线存储在纹理中主要有两种存储方式,存模型空间下的法线向量或切线空间下的法线向量,这两者的区别在入门精要里讲的很清楚,同时因为这些不同,在日常使用中往往将法线向量存储于切线空间中:
模型空间优点:
   1.实现简单且直观
   2.可以提供平滑的边界
切线空间优点:
   1.自由度高(很有用),模型空间记录绝对信息,切线空间记录相对信息
   2.法线纹理可重复使用
   3.可用于UV动画
   4.可以压缩

向量获取

   随便就提一下存储在切线空间中的法线向量要如何使用,在光照计算中法线并不能单独使用,它需要与光照方向以及视角方向进行配合,若我们选择在切线空间中进行运算,那么就需要得出切线空间中各方向的值,而想要得到正确的方向,我们只需要将该点得出的原方向进行一定的旋转,即乘上一个rotation矩阵就可以得到,unity提供了一个内置宏TANGENT_SPACE_ROTATION用以计算rotation矩阵,当然这个宏执行的操作也很简单,在切线空间中一个点除了有法线外,还有切线与次法线,这条宏就是先通过法线与切线方向计算出次法线,然后将切线、次法线、法线组合便形成了变换矩阵,这里所用的法线并不是纹理中的法线,而是原法线。现在有了切线空间中的视角和光线方向,就只需要得到切线空间中的法线,也很简单只需要采样法线纹理,然后在与偏移值做计算,unity也提供了UnpackNormal函数。

纹理颜色

   先看一下法线纹理一般长啥样:(图片是在知末网下载的)
在这里插入图片描述
   可以看出图片大部分都是偏向蓝色的,原因很简单,首先纹理中存储的法线向量是相对的,而一般情况下并不是每个点都需要改变法线,所以大部分都是初始值即(0,0,1),表面指向的是原来的法线方向,法线向量的取值范围是-1 ~ 1,而颜色RGB的存取范围是0 ~ 1,很明显这里需要做一个映射,那么原先为(0,0,1)的值在RGB通道中就会被存储为(0.5,0.5,1)
在这里插入图片描述
这是用画板调处的(0.5,0.5,1)的颜色,可以看出两者非常接近。

总结

   以上就是关于法线纹理的我了解到的全部内容,而凹凸映射就是用所求法线进行光照运算使表面产生凹凸感的东西,也有的凹凸映射会采用高度图,不过正常情况下还是偏向于使用法线纹理。如果有问题欢迎大佬在评论区指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值