09 着色-补充(纹理应用)
纹理应用
纹理在现代的GPU的理解:Texture = 一块内存+滤波/范围查询
纹理不必只存储颜色,还可以是高度等等。
可以“伪造”详细的几何。
Environment Map环境光映射
Environment Maps,将环境光存储在一个贴图上。
因为几乎只有观察方向对环境光起到影响,所以各个方向的光源可以用一个球体进行存储,即任意一个3D方向,都标志着一个texel。
类比地球仪,把它展开,就可以把球面信息转换到平面上,从而得到环境texture。
类比地球仪,在极点存在拉伸和扭曲问题
解决方法:Cube Map,天空盒。
即用六幅texure表示一个天空盒,再进行一次方向面的计算。
简单来说就是利用方向计算出与对应平面上的交点坐标,剔除平面所对应的一维,剩下来的两维坐标转换到(0,1)范围之内即为(u,v)坐标。
Bump Mapping凹凸贴图
- 记录逻辑上的相对高度(可为负值),表现物体表面凹凸不平的性质。
- 对每个pixel做一个“扰动”
- 利用高度差重新计算法线
计算法线的方法:
在平面上:
c:影响大小系数
在三维空间:
Displacement Mapping位移贴图
-
Displacement Mapping,与Bump Mapping类似
-
物理上的高度改变,即改变了三角形顶点位置
-
可以通过物体阴影的边缘发现与Bump Mapping区别
-
代价:要求模型精度高
-
- DirectX 中的动态曲面细分:开始先用粗糙的三角形,应用Texture的过程中检测是否需要把三角形拆分的更细
三维纹理
三维纹理,定义空间中任意一点的纹理。
并没有真正生成纹理的图,而是定义一个三维空间的噪声函数经过各种处理,变成需要的样子。
阴影纹理
阴影可以计算好,直接写在Texture里。