需要 3D Analyst 许可。
带纹理的 3D 对象的每个显示面同时包含 3D 几何和图像数据。具体示例包括建筑物、飞机、街道设施和车辆。它们通常用于为 3D 视图增加照片真实感。在 ArcGIS 中,带纹理的 3D 对象通常存储为多面体要素。
在 ArcScene 中使用带纹理的多面体要素时,遇到的最常见问题就是 3d 导航性能大大下降。如果多面体要素类中包含了大量带纹理的要素或要素类的纹理过大(例如,某个面上超过了 1,024 像素),此问题会变得更加突出。
在 ArcScene 中,有两种方法可减少带纹理的 3D 对象的内存占用量。方法一是利用显卡硬件来压缩其中原有的纹理。方法二是降低在多面体要素所使用的纹理的分辨率。这两种解决方案的目的都是要减少内存使用,以提升实时导航的性能。
有关如何为带纹理的多面体图层设置显示属性的详细信息,请参阅关于对多面体进行符号化。
纹理和内存
主内存 (RAM) 和显卡的纹理内存都用于渲染纹理。通常,纹理被首先加载到主内存中,然后再发送到将进行渲染的显卡中。当显卡的纹理内存耗尽时,操作系统会自动启动磁盘的内存分页,从而导致性能明显下降。这就表示减少 RAM 和显卡纹理内存的内存占用会改进应用程序的性能,并可加载较大的数据集。
硬件纹理压缩
硬件纹理压缩利用 3D 显卡本身对于压缩纹理的支持来改进对带纹理的 3D 对象的渲染性能。
材质纹理以 JPEG 压缩格式存放在磁盘上。加载时,JPEG 压缩纹理自动解压缩,然后发送至将进行渲染的显卡中,从而消耗显卡的纹理内存。但是,由于显卡本身并不支持 JPEG 格式,因此在对纹理执行解压缩时会存在性能开销。此外,与在磁盘上的 JPEG 压缩版本的纹理相比,解压缩后的纹理所占用的内存要大好几倍。
显卡支持一组特定的纹理压缩格式。这些纹理压缩格式当前通过 OpenGL 扩展模块进行显示。扩展模块的标准化需要花费一定的时间,可以期待的是,纹理压缩扩展模块会很快成为标准 OpenGL 的一部分。以支持格式压缩的纹理可直接发送到显卡中。
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 库都可用于缩减这些纹理的比例。