基于细节纹理的地形
场景中地形的形状和着色是由高度图、地形纹理和地形细节纹理共同计算而得的。高度图是一张简单的灰阶图,其中每个像素点代表一个高度值,0代表这个地形的地面,255代表最高点。
一张纹理图伸展开来覆盖整个儿地形。纹理图一般都是棕、绿、白或灰间杂的颜色,对应土地、草地、雪地或者岩石地形。因为地形纹理一般比要覆盖的地形小得多,故而当你距离很近地观察它时,地形一般会看起来比较模糊。为了帮助改善这一点,在近距离观察时,就要用到细节纹理,与地形纹理混合使用。细节纹理并不像地形纹理那样伸展得那么大,仅仅是减弱了近距离观察时产生的地形模糊现象。
一个地形被分割为一小块儿一小块儿的像地砖一样的地形方块儿,由场景管理器按这些地形块儿的拓扑结构和观察者的距离依照不同的细节层次进行显示。
最后,用一个指定了地形维度的世界坐标空间,将完整的地形投影到一个三维空间中。
产生背景
视点距离表面纹理较近的时候,单个的纹理像素在纹理放大器的作用下,会覆盖
多个像素点,这就使图像变得很模糊。
在mipmap 模式下,纹理的每一层所需的信息量都是上一较为粗糙的层的四倍。
这样大大增加了纹理的使用量。在某些情况下,这是值得的,多层信息的纹理可
以为应用提供更多的、更有用信息。但在另一些情况下,这是完全没必要的。大
量的纹理纹理开销会导致整个视景系统实时型的降低。
另一方面,高分辨率影像的确包含较多的表面细节,但这些细节往往都是非常相
似的。举例来说,一块水泥地的纹理会显示出它表面上水泥结晶凹凸不平的细节,
这一块水泥地所表示的细节与视景库中其他水泥地所表示的细节几乎是完全相同
的。在mipmap 模式下提供这样的细节无疑要消耗大量的纹理内存,尽管这能够
给判断高度和动作提供线索,避免表面的模糊,但却造成纹理内存不够,以致很
多真正有用的信息无法及时地、顺利地加载。在这种背景下,细节纹理应运而生。
细节纹理的特性和选取
在高分辨率的影像上截取具有代表性的部分,萃取其中出现频率最高的细节,存
储成一个小纹理文件,就称之为细节纹理。与表面纹理类似,细节纹理一般也采
用RGB 格式。它的大小也应当是 2 的幂次方。当视点距离纹理表面比较近的时
候,细节纹理通过滤波器加载在表面纹理上以提供高分辨率的比较真实的表面细
节。通常细节纹理通都比较小,所以它被重复地加载在整个可见区域内。细节纹
理对没有被放大的纹理是没有任何用处的,因此在使细节纹理的时候,应当小心
地控制它在表面纹理上的淡入淡出,以免造成视觉突变的现象。
提取细节纹理的第一步是选择一块高分辨率的、包含丰富表面细节的、在整个视
景中出现频率高的影像,将其中最能表现表面细节的部分拷贝到一个新的细节纹
理文件内。第二步是确定这个细节纹理的大小,并对这个细节纹理文件进行处理。
可以使用一些图形图像的应用工具,例如PhotoShop等。处理的原则是使得将这
个细节纹理重复粘贴在一起时,边界的界限尽可能不明显,并且视觉上的重复性
也尽可能低。
细节纹理的作用机制
细节纹理加载到表面纹理作用机制是在一个独立的通道中,与表面纹理做α融合。在第一个通道中,表面纹理被显示出来;在第二个通道中,细节纹理叠加到表面纹理之上。细节纹理和表面纹
理处于同一个几何坐标系内,纹理系统将细节纹理作为表面纹理的一个余量放大
系数进行处理。融合的过程如下图所示:
 |
| 融合前后示意图 |
可以看到经过融合之后,影像的细节大大增强,却没有增加额外的纹理开销。
应用示例
细节纹理的大小为256×256,如下图所示:
 |
| 细节纹理 |
使用这个细节纹理前后
 |
| 细节纹理加载前后对比图 |
可以看到,由于细节纹理的颜色较深,使用α融合,所以左侧图像的颜色比右侧的深,而且在近视点位置,左侧的图像能够看到地面凹凸不平的细节,而右侧图像的则模糊不清。
参考
|