1 纹理的名词
- 纹理映射技术:把纹理映射到物体表面
- 纹素(texel)
- 纹理映射坐标(texture-mapping coordinates):定义了该顶点在纹理中对应的2D坐标,也被称为
UV坐标
2 凹凸映射
凹凸映射(bump mapping)
:使用一张纹理来修改模型表面的法线,以便为模型提供更多的细节
不会真的改变模型的的顶点位置
分为2种: 高度映射 和 法线映射
2.1 高度映射
高度映射(height mapping)
:使用一张高度纹理(height map)来模拟表面位移(displacement)
2.2 法线映射
法线映射(normal mapping)
:使用一张法线纹理(normal map)来直接存储表面法线
3计算光照模型
需要计算光照模型中统一各个方向矢量所在的坐标空间。
法线纹理中存储的法线是在切线空间中
计算光照模型 有两种选择:
- a. 在切线空间下进行光照计算,需要把光照方向、视角方向变换到切线空间下
- b. 在世界空间下进行光照计算,把采样得到的法线方向变换到世界坐标下,再和世界空间下的光照方向和视角方向计算
效率:a >b
原因:
方法a可以直接在顶点着色器中就完成对 光照方向、视角方向 的计算
方法b需要对法线纹理进行采样,所以变换过程必须在 片元着色器中实现,也就是需要在片元着色器中进行一次矩阵操作
通用性:b>a
有时需要在世界空间下进行一些计算
例如使用Cubemap进行环境映射,需要使用世界空间下的反射方向对Cubemap进行采样
如果同时需要法线映射,需要将法线方向变换到世界空间下
3.1 在切线空间下计算光照模型
基本思路:在 片元着色器中通过 纹理采样得到 切线空间下,然后再与切线空间下的视角方向 、光照方向进行计算。
顶点着色器中把ViewDir视角方向和LightDir光线方向从objec space模型空间变换到tangent space切线空间
3.2 在世界空间下计算光照模型
基本思路:在顶点着色器中计算从切线空间到世界空间的变换矩阵TBN,并把它传递到片元着色器
注意
:在需要Cubemap进行环境映射的时候需要这种方法
4 纹理
纹理可以用于存储任何表面属性
4.1 渐变纹理
渐变纹理 常见的用法之一:使用渐变纹理来控制漫反射光照的结果
4.2 遮罩纹理mask texture
允许保护某些区域,使它们免于某些修改。
遮罩纹理可以让美术人员更加精确(像素级别)(逐像素)的控制模型表面的各种性质
常见用处
:
● 应用在制作地形材质时,使用遮罩纹理可以控制混合这些纹理
● 使用遮罩纹理控制光照,使得模型的某些区域光照强烈,某些区域光照弱一些
流程:
● 通过采样得到遮罩纹理的纹素texel值
● 使用其中某个(或某几个)通道的值(例如texel.r
)来与某种表面属性进行相乘
● 当通道值为0时,可以保护该表面不受该属性的影响