宋小虎,孙琪迦,刘 照
(1.江苏省测绘工程院,江苏 南京 210013;2.宜兴市自然资源和规划局,江苏 宜兴 214200)
随着倾斜三维数据获取与处理技术的逐渐成熟,以及处理设备与应用软件的平民化,倾斜三维应用成为了目前测绘地理信息行业一个很重要的数据来源。几乎每个测绘相关单位都能够具备倾斜数据的生产能力,对应的倾斜三维数据在信息化系统中的使用比重也逐渐提高,国家层面也已经提出启动“实景三维中国建设”计划。倾斜数据最大的特点是真实,但是对于目前主流的可视化应用场景这是优势同样是劣势,本文将探讨目前倾斜三维数据目前存在的问题,以及如何做好倾斜三维数据成果的发布优化与可视化效果。
目前倾斜三维模型成果文件主流采用OSGB格式,本文讨论的数据问题分析与优化方法都是基于OSGB通用格式开展。
倾斜三维模型成果能否实现快速加载和调度,是衡量三维数据成果的一个重要指标。对海量倾斜摄影模型数据如何进行性能优化处理。首先需要研究影响倾斜三维数据成果应用的主要因素。
图形处理器场景帧率只有达到15帧以上,三维场景显示才不卡顿。达到24帧人才能使得眼睛无法看出闪动,场景显示自然流畅。达到30帧,画面将非常流畅。为了提升数据浏览效率,我们在开展数据层面优化之前,必须针对如下3个问题进行分析。
倾斜三维数据成果由于分块存储的特性以及生产数据的机器性能等原因,导致倾斜三维数据量非常大,且数据成果的Tile文件夹也很多,成果数据不光数据总量大,文件数据也是海量的,这就导致系统在进行数据调度的时候会比较慢,造成浏览应用加载不流畅,实际使用场景中经常会出现加载速度太慢、数据从不清晰到清晰要等待时间过长等问题。
倾斜摄影OSGB格式自带多级分辨率的LOD数据,这个LOD是在模型的生产过程中创建的,是根据密集点云逐级抽稀后构建的三角网模型,在三维场景的浏览过程中,不同层级之间的过度很平滑,没有突跳感,但是这样的处理也导致数据体量变大、浏览时崩溃概率变大、低级数据不精细等问题。
倾斜三维成果基本都是按照Tile模式组织、调度、加载与渲染的。特别是在终端渲染过程中,都会把每个视野中的Tile全部载入内存,但是对于精度较高的倾斜数据,一个Tile内的数据量都可能上G,纹理解压后再翻10倍左右,导致内存使用资源量过大。为了尽力减小渲染批次,倾斜三维数据成果在发布时,对于原来倾斜中的小数据块(几十K的数据,包含的小于1 024×1 024的纹理)会做合并处理,每个Tile需要完全读入内存后再做处理。 但是这样的处理,纹理渲染对内存的消耗过大,对于终端配置要求较高。
目前倾斜三维数据成果主要采用倾斜三维数据生产软件导出软件终端软件平台可以使用的标准格式,比如ContextCapture中直接可以导出成OSGB、3DTiles等格式,这样已经能够满足了大多数的应用场景,但是一般这种直接导出的对于大场景的支持通常并不是很好,比如缺少必要的优化,无法提升加载效率,还需要要借助商业平台的场景优化能力,比如纹理压缩和合并根节点等方法来优化场景的加载效率,但是无论哪种方法都是在原有OSGB分片的基础上完成,但是从初始级别到最终级别中间的过度级别往往都很差,分级化简非常严重,只有加载到最后一个高精度级别才能够具备实用的价值,中间层级的数据技术过度的价值更高于使用价值,所以这也是一个明显的问题。
倾斜数据获取时的作业参数设置、航飞光影条件、天气条件、数据采集设备、建模软件等主观因素,导致各类型的数据成果存在质量问题。其表现为模型建筑物出现重影、整体拉花、融化、光影严重斑驳、建筑错位、变形、建筑粘连等问题。例如水面、玻璃、大面积单一纹理面的建筑物,无法反映物体真实纹理信息的反光面。因此模型质量差异问题在一定程度上降低了数据成果可视化效果。
针对倾斜三维成果数据的特点,目前行业已经形成了一些普适性的三维模型构建与模型处理优化方法[1-4];其中针对无人机倾斜摄影三维成果数据冗余大的特点,行业专家也提出了一些针对性的建模方法优化[5];同时,为更好基于WEB模式发布倾斜三维数据,应用时必须在数据管理与发布上开展针对性优化研究[6]。
在倾斜三维数据成果生产过程中,需要设置瓦片边长来输出模型成果。最终每个文件夹存储一个瓦片(Tile)数据,模型成果以测区中心区域为Tile-+000-+000开始命名,按照行列号以此类推;每个文件夹中的第一个文件(与文件夹同名),我们称为根节点。
如果根节点数量过多,显卡渲染的批次就比较多,而每个批的调用都会消耗一定的CPU时间,这样会导致CPU负载过重,最终导致场景卡顿。
终端浏览在每批渲染调用(DP)过程中,渲染调用都会消耗一定的CPU时间,对于显卡来说,一个批次的多边形数量远达不到最大绘制数量。因此尽可能将更多的多边形放在一个批里渲染,以此来减少批的数目,最终降低CPU时间。
合并根节点后,根节点引用的二进制的瓦片数据文件可以采用点云或复合模型,目前融合的节点可以具有4种类型文件,如表1所示。
表1 实景三维数据类型
合并根节点的目的就是把单批的尺寸变大,减少批的数目进而提升性能。合并操作后大大减少了3DTiles文件夹的数据,合并倾斜摄影数据,使浏览速度大幅提升。在合并根节点的同时,进一步优化、减少根节点金字塔层级,减少数据渲染调度的数据量,提高渲染调度效率。合并根节点环节比较费时,合并根节点需要采用多线程方式进行,采用分布式数据存储方式,利用在线并发多节点云计算能力,大大提升优化根节点合并速度。
倾斜三维成果中对于模型物体表面细节的表现主要依靠影像贴图来实现的,越是高分辨率的贴图影像自然表现力也是越强,但是同时带来的问题是所需占用的内存会成倍的上升,因此纹理质量是制约倾斜三维成果渲染效率的主要因素,减少三维数据资源消耗,尤其是纹理的资源消耗,能够大大提升终端渲染调度显示效率。
此外,终端设备的显卡并不能直接使用纹理数据的JPG格式去创建资源,需要在CPU和内存里把JPG解压缩,这张图片解压缩后内大量占有内存资源,特别是在视野大范围场景下,需要调取大量的tile格网数据量较大时,大量的纹理载入导致内存效果过大,导致单个渲染批次内耗时过长,导致浏览卡顿等问题的出现。所以各个三维承载平台上在进行纹理压缩的同时,需要考虑纹理贴图在内存占用和显示效果能达到一个尽可能的平衡,充分考虑到纹理的不同设备显卡类型,将纹理压缩成终端显卡直接支持的格式,这样显卡在渲染过程中就不需要花费额外的开销来解析纹理(不同的设备选择不同的纹理压缩方式,需要区分PC设备、安卓设备、IOS设备等情况),压缩完成后数据会更小,加载数据更快捷,资源占用更少。
数据成果通过网络实现在线发布,由于三维成果数据量较大,因此网络终端对网络环境配置要求很多,我们需要通过三角网压缩、纹理压缩等方式进行数据成果压缩,进一步减少网络数据传输压力。
如果数据访问的网络配置较低,可以通过三角网压缩,能够节省带宽50%左右,同时在发布服务器端设置 GZIP压缩模式,能够再节省20%左右的带宽。但如果是在本地局域网中,可以不做压缩,因为压缩为有损压缩,数据质量会降,降低的不明显。
此外,本文采用Draco进行3DTiles模型压缩,Draco是一个用于网格压缩的glTF扩展,用于压缩和解压缩3D网格,能够显著减少3D内容的大小,通过压缩顶点位置、法线、颜色、纹理坐标和任何其他一般的顶点属性,提高3DTiles在WEB传输效率和速度。使用Draco压缩与GZIP的glTF 2.0的tileset的总加载时间可以大大缩减。
为了达到更好的倾斜三维数据成果的快速加载与浏览,必须优化倾斜三维数据成果图层的LOD距离缩放比例参数,优化设置这个参数会在原来的LOD距离基础上缩放对应的倍数,进而在不同的相机距离切换对应的层级数据;最大可见距离同样是在距离范围之外的数据将会不可见,以此来提升浏览性能。
只有不断提升倾斜三维数据成果的加载与浏览效率,才能进一步扩展倾斜三维数据成果的应用范围。我们一方面可以进一步提升终端硬件配置,提升存储、CPU、显卡渲染与计算能力。另一方面,我们在倾斜三维成果的数据结构优化与渲染调度方面,还可以进一步优化策略和方法,使倾斜摄影模型在各种终端设备中能够高效加载与流畅显示。