关于 ArcScene 中带纹理的 3D 对象
带纹理的 3D 对象的每个显示面同时包含 3D 几何和图像数据。具体示例包括建筑物、飞机、街道设施和车辆。它们通常用于为 3D 视图增加照片真实感。在 ArcGIS 中,带纹理的 3D 对象通常存储为多面体要素。
在 ArcScene 中使用带纹理的多面体要素时,遇到的最常见问题就是 3d 导航性能大大下降。如果多面体要素类中包含了大量带纹理的要素或要素类的纹理过大(例如,某个面上超过了 1,024 像素),此问题会变得更加突出。
在 ArcScene 中,有两种方法可减少带纹理的 3D 对象的内存占用量。方法一是利用显卡硬件来压缩其中原有的纹理。方法二是降低在多面体要素所使用的纹理的分辨率。这两种解决方案的目的都是要减少内存使用,以提升实时导航的性能。
有关如何为带纹理的多面体图层设置显示属性的详细信息,请参见对多面体进行符号化。
纹理和内存
主内存 (RAM) 和显卡的纹理内存都用于渲染纹理。通常,纹理被首先加载到主内存中,然后再发送到将进行渲染的显卡中。当显卡的纹理内存耗尽时,操作系统会自动启动磁盘的内存分页,从而导致性能明显下降。这就表示减少 RAM 和显卡纹理内存的内存占用会改进应用程序的性能,并可加载较大的数据集。
硬件纹理压缩
硬件纹理压缩利用 3D 显卡本身对于压缩纹理的支持来改进对带纹理的 3D 对象的渲染性能。
从 ArcGIS 9 开始,材质纹理以 JPEG 压缩格式存放在磁盘上。加载时,JPEG 压缩纹理自动解压缩,然后发送至将进行渲染的显卡中,从而消耗显卡的纹理内存。但是,由于显卡本身并不支持 JPEG 格式,因此在对纹理执行解压缩时会存在性能开销。此外,与在磁盘上的 JPEG 压缩版本的纹理相比,解压缩后的纹理所占用的内存要大好几倍。
显卡支持一组特定的纹理压缩格式。这些纹理压缩格式当前通过 OpenGL 扩展模块进行显示。扩展模块的标准化需要花费一定的时间,可以期待的是,纹理压缩扩展模块会很快成为标准 OpenGL 的一部分。以支持格式压缩的纹理可直接发送到显卡中。
在 ArcGIS 9.2 中,ArcScene 可使用 OpenGL 支持的 DXT 格式代替 JPEG 压缩来压缩并保存纹理。这可在 RAM 和纹理内存中消除解压缩的开销和膨胀的内存占用。要特别注意的是,JPEG 和 DXT 都是有损压缩格式,因此在使用压缩纹理时图像质量会有所降低。其中,JPEG 压缩纹理的大小取决于质量设置,但是 DXT 具有固定的压缩比(RGB 为 1:6,RGBA 为 1:4)。
在 ArcScene 中,可在图层级别启用硬件纹理压缩。
减少纹理分辨率
通过缩减纹理分辨率,可以减少发送至显卡的纹理像素 (texels) 量。例如,可将 640 x 480 的纹理缩减为 320 x 240 的纹理,从而以 4 倍系数降低所占用的内存大小。
在不明显降低显示质量的情况下,对纹理可以应用的缩减量因纹理的不同而有所差异。例如,与商店招牌相比,反复出现的窗口纹理在分辨率上会出现更大的缩减。
纹理缩减比例被作为一个图层属性并且仅适用于多面体图层。为图层设置纹理缩减比例会减少图层渲染所需的内存需求,从而为其他任务(如导航)释放资源。使用 3D 图层转要素类地理处理工具将图层导出到新要素类时,您可以选择性地确保减少的纹理分辨率。标准的“数据”>“导出数据”功能不会将纹理缩减比例设置合并到输出要素类中。
在所有支持 ArcGIS 的平台上可使用的 OpenGL GLU 库都可用于缩减这些纹理的比例。
- 也可以选择对该图层完全禁用纹理。系统会继续显示几何体,并且会使用简单颜色作为符号。