unity改变intensity_Unity纹理-凹凸映射

上节介绍了许多纹理的导入,使用和属性的知识点。本节将就凹凸映射(bump mapping)进行实践。

凹凸映射是指用一张纹理去修改模型表面的法线信息,从而使模型表面产生看上去“凹凸不平”的效果。这种方法不会真正的改变模型的顶点位置。

目前有两种主要的方法可以用来进行凹凸映射:高度映射(height mapping)法线映射(notmal mapping)。前者是使用高度纹理(height map)模拟表面位移(displacement),得到修改后的法线值。后者则是使用一张法线纹理(normal map)直接存储表面法线。

高度纹理

使用高度图实现凹凸映射时,高度图中存储的是表示模型表面局部的海拔高度的强度值(intensity),颜色越深,位置越深凹,颜色越浅,位置越外凸。该方法很直观的展示了模型表面的凹凸,但是计算偏复杂,实时计算时因需要计算像素灰度值来得到法线信息,所以十分消耗性能。实际应用中,高度图通常和法线映射一起用。用于给出表面凹凸的额外信息。

法线纹理

法线纹理中存储的是表面的法线方向。但法线方向的分量范围在[-1,1],而像素范围为[0,1],因此需要做一个映射:

这就要求我们在Shader中对法线纹理进行采样后,还需对结果进行一次映射逆运算以得到原来的法线方向,即:

模型空间和切线空间的法线纹理

由于方向是相对于坐标空间的,所以必须确认法线纹理存储的法线方向是在哪个坐标空间当中。例如,模型自带的法线是定义在模型空间中的。接下来需要明确两个概念:

  • 模型空间的法线纹理(object-space normal map)

它是指将修改后的模型空间中的表面法线直接地存储在一张纹理中。其所有法线所在的坐标空间是同一个坐标空间,即,模型空间,而每个点存储的法线方向是各异的。

  • 切线空间的法线纹理(tangent-space normal map)

它是指采用模型顶点的切线空间来存储法线,其实模型的每个顶点都有一个属于自己的切线空间,其原点就是该顶点本身,z轴是顶点的法线方向(nn),x轴是顶点的切线方向(tt),,y轴由法线与切线叉积而得,因此也被称为副切线(bitangent, bb)或副法线。其所有法线方向所在的坐标空间是表面每点各自的切线空间,是各异的。所有,这种法线纹理存储的是每个点在各自切线空间中的法线扰动方向,换句话说, 若一个点的法线方向不变,那么在它切线空间中新的法线方向就是z轴方向。

总结一下:

模型空间下的法线纹理具有以下优点:

  • 实现简单,更直观,不需要模型原始的法线和切线信息,所以计算量小。
  • 因为模型空间下的法线纹理存储的是同一坐标系下的法线信息,因此边界处插值平滑,所以在纹理坐标的缝合处和尖锐的边角部分,可见的突变(缝隙)较少,可以提供平滑的边界。

但美术人员更喜欢使用切线空间下的法线纹理,因为使用切线空间具有更多的优势:

  • 由于切线空间记录的法线信息是相对的,所以即使把该纹理用到一个完全不同的网格上也可以得到合理的结果,所以自由度很高。
  • 同理,使用切线空间下的纹理记录可以移动一个纹理的UV坐标来实现动画效果。
  • 由于自由度高,所以一个法线纹理是可以重用在不同的网格上的。
  • 由于切线空间下的法线的z方向总为正,可由x,y方向推导出来,所以可以不存储,实现压缩的效果。

接下来的实践中使用的是切线空间下的法线纹理。

凹凸纹理实践

  • 运行平台:Unity 2018.4.2f1 (64-bit)
  • 项目地址:
    Unity_Shader_GetIn

前言

计算光照模型时,需要将各个方向矢量统一到统一坐标空间下。实践时有两种思路:

  • 在切线空间下进行光照计算。此时需要把光照方向,视角方向变换到切线空间下。
  • 在世界空间下进行光照计算。此时需要把采样得到的法线方向变换到世界空间下,再和世界空间下的光照方向,视角方向进行计算

第一种思路在顶点着色器中就可以完成对光照方向和视角方向的变换,因而效率高于第二种;但是就通用性来看,第二种方法允许我们在世界空间下进行一些计算,比如Cubemap的使用。另外,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值