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