孙侨 朱凌玉 曹亚亮 刘君熙
(云基智慧工程股份有限公司,深圳 518000)
2021 年,国务院印发了《国家综合立体交通网规划纲要》,明确指出到2035 年交通基础设施数字化率达到90%[1]。交通行业因其自身特点数据量大、数据类型异构等相关特点,对交通行业信息数据存储和管理的平台性能提出了更高的要求[2]。交通行业数字化项目从设计、施工到运维均需要对数据模型进行管理和应用。为了保证模型信息的准确性,项目实施过程中多采用倾斜摄影、三维点云及BIM 建模等手段来完成数据采集和存储。总的来说,交通行业多源异构数据根据其数据类型和存储格式基本可以概括为以下几类:
(1)GIS 数 据(shp、dbf、shx、TAB、SHP、EOD、ADF、POS 等);
(2)BIM 数 据(rvt、dgn、dwg、IFC、pbims、rdw、pla、pln、nwf、nwc、nwd 等);
(3)点云数据(LAS、TXT、XYZ);
(4)IoT 数据(摄像头、风向仪、健康监测传感器等)。
交通行业相关业务的开展需要对大地域范围内的空间数据进行管理和展示,并满足大体量几何模型、纹理材质及相关属性信息数据的承载。通用的空间数据管理和展示方式无法解决交通行业数据来源广泛、数据类型异构、数据存储量巨大以及数据展示效果差等问题。
基于上述政策背景的依托支持以及交通行业自身的需求,本文基于三维GIS、物联网、大数据等新一代信息技术,提出适用于交通工程行业大体量三维空间数据的管理方法,对大体量三维空间数据进行轻量化、web GL 渲染以及交通边缘数据处理,有效解决了模型渲染瓶颈并提高了渲染效率。
交通工程BIM 模型普遍体量巨大,且呈现带状分布,这就对计算机的性能提出了严峻的挑战[3]。Web端用户加载大体量三维模型时,模型轻量化至关重要。为了有效缓解了渲染效率和渲染瓶颈等问题,采用了以下几种技术手段。
(1)减面
通过算法,适当减少三角面,可以生成多个连续的细节层次,方便控制简化的面数,同时,简化后顶点和对应的纹理不变,保证简化模型的一致性[4]。利用原模型减面和拓扑减面梁两种,从数据源头减小模型顶点数量。其中,原模型减面是通过底层算法快速有效地进行模型减面,在对原始模型保留完整轮廓的同时减掉多余的面。而拓扑减面是通过底层算法快速有效的,对原模型保留完整的轮廓重构新模型,形成一键式减面操作。
(2)提取外壳
提取外壳是基于可视域分析功能,实现对BIM 模型的可见部分与不可见部分,即外壳与内部模型的分离。将模型的整体外壳提取出来,当相机距离模型较远时,只显示模型外壳,减少模型加载数据。
(3)多重lod 分层
根据常识,人眼所能感知的细节与观察对象距离远近、运动快慢,以及视野位置关系有关。因此可在不影响显示效果的情况下,根据不同的距离,显示不同层级的精细度,防止数据同时加载,导致内存飙升,引发浏览器崩溃。
(4)网格压缩
将三角网格转化为一种二进制数据,显著缩小模型文件的大小,大大减少网络传输的数据量,同时,对用户来说又不会严重影响视觉效果,可使网页中的三维模型加载更快,提升用户的体验感。
(5)纹理压缩
把纹理源文件压缩为对应指定纹理压缩格式的过程就是纹理压缩。不同于通常理解上的图片压缩,纹理压缩是服务于在3D 图像渲染系统的纹理图片存储技术,因此要充分满足随机访问的特性。对于3D物体表面细节的表现最重要的还是靠贴图来实现,也就是说,越是高分辨率越是真彩色的贴图自然表现能力越强,但同时占用内存也会上升,会导致传输时带宽开销变大。通过纹理压缩能有效降低设备的显存占用,提高运行效率和稳定性,纹理压缩效果展示如图1 所示。
图1 纹理压缩效果展示
(6)实例共享
实例共享即为相同构件和贴图,可以采用同一实例,引用共享网格数据,在不同的位置和姿态去绘制,如图2 所示。
图2 实例贡献流程图
交通行业数据因其行业特殊性存在以下特点:产生速度快,动态性强;数据种类多,关联性强;数据规模大,异构性强;数据存储格式多等[5]。在实际项目开发中,某些高精度的BIM 模型其构件数量高达数十万之多。传统图形加速渲染通常使用客户端渲染,且网页图形渲染大体量三维场景的计算很少。多源异构数据展示使用硬件图形加速渲染技术,使用WebGL 技术在网页上进行绘制和渲染三维图形,能够有效提高渲染效率,从而进一步提升视觉效果。
WebGL 技术标准允许把JavaScript 和OpenGL ES2.0 结合在一起,通过增加OpenGL ES2.0 的一个JavaScript 绑定,WebGL 可以为HTML5Canvas 提供硬件3D 加速渲染。这样Web 开发人员就可以借助系统显卡在浏览器中更流畅的展示3D 场景和模型,并且能够创建复杂的导航和数据视觉化。WebGL 技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D 结构的网站网页。
(1)通过HTML 脚本本身实现Web 交互式三维动画的制作,无需任何浏览器插件支持[5];
(2)利用底层的图形硬件加速功能进行图形渲染,是通过统一的、标准的、跨平台的OpenGL 接口实现的[6]。
在网页上绘制渲染三维模型时,需要进行大量坐标处理计算,直接使用JavaScript 这一脚本语言效率很低。因此,本文通过技术手段对JavaScript 和WebGL进行优化,加快渲染速度,提高性能,WebGL 技术层级展示如图3 所示。
图3 WebGL 技术层级图
在实践中,不难发现数据加载的效率与能否流畅操作的关键都在于CPU、内存、GPU、网络等几个方面。本文通过边缘服务解决了网络过慢、不稳定的问题。下面主要从CPU、GPU、内存着手阐述大体量数据的渲染原理和过程。
在WebGL 中要完成一帧的渲染,首先需要从CPU开始,CPU 通过从内存中读取各种信息,计算出当前一帧所需要的顶点、索引、材质、贴图等信息,并将这些信息进行组合封装,绑定到GPU 缓存中,由GPU 进行图元装配、栅格化完成绘制任务。由此可见,渲染帧率一般由CPU 与GPU 共同影响。但在测试中,更多是由CPU 决定,实际上GPU 指令相对简单纯粹,且可以进行并行计算。所以,在图形处理方面,GPU 的处理速度是比CPU 快的,但由于GPU 顶点与纹素处理需要大量的算力及其显存的局限性,CPU 需要通过有效的计算来避免将过多的数据提交到GPU,即可有效避免因为顶点、纹理等数据量过大导致GPU 绘制效率降低,从而直接影响帧率,甚至导致浏览器崩溃的情况。
将海量数据,从请求到计算,再到封装成为GPU可直接读取的数据,工作量极其庞大。而且忽略顶点数据的封装,将数十万的构件数独立的拾取、着色、显示、隐藏也会影响到帧率[7]。因此,如何减少CPU与GPU 的计算量成为了三维实时渲染是否能够快速响应、快速渲染的关键因素。
因此,本文提出一种分层次的HLOD,可批量渲染的BATCH RENDER,以及能为GPU 直接读取的分片数据格式(GLTF)。首先需要将客户端CPU 的数据计算工作预先完成,避免在实时渲染中消耗过多的CPU 资源,而前端需要对请求过来的瓦片树扁平化处理,并进行分片的包围盒计算,屏幕空间误差计算、视锥体剔除、遮挡剔除并缓存,以最大限度的降低当前帧所需要的数据量和计算量。针对上述研究技术路线进行详细阐述如下。
Application of surfactants in new energy and energy-efficient technologies 2 52
(1)批量渲染
批量处理三维模型。它将多个小模型转换成单个绘制请求,然后在尽量少的DrawCall 下完成渲染,同时通过索引BathId 这个变量,区分每一个独立构件,使批量的模型渲染也能够拾取单个构件。
(2)屏幕空间误差计算
式中:geometricError 为当前瓦片设置好的几何误差;height 为浏览器运行的像素高度;distance 是当前状态下摄像机的世界坐标位置到瓦片中心位置的距离。
通过几何误差geometricError,相机与包围体的直线距离distance 等参数可计算出当前分片的屏幕空间误差,这个误差可以衡量当前分片在指定相机距离下的像素差,通过设置最大的偏差阈值,可计算出当前视角下,在阈值范围内有限的分片集,从而减少帧的DrawCall 数量。
(3)视锥体剔除
基于Frustum 视锥体与DrawCall 包围体,通过计算包围体与相机视锥体的六个剪裁平面的关系来判断对象是否在视锥体中,计算视锥体和包围体是否相交,如图4 所示。如果属于包含或相交关系,则设置为待执行的DrawCall,反之则忽略该DrawCall。如此,利用开销不大的CPU 计算即可节省大量的GPU 资源。
图4 视锥体剔除
(4)遮挡剔除
在GIS 应用中,地球可以作为遮挡剔除的遮挡体。当DrawCall 处于地平线视野范围外时,便可以剔除DrawCall,使其不进入当前的渲染队列中,从而降低GPU 的渲染压力[8]。
(5)分片缓存
结合最大可缓存的数据量阈值,引擎中对已经渲染过的分片数据,通过双向链表缓存到内存中,避免二次加载时重新请求服务器上的数据,减少网络IO。其中,每一帧引擎都会检索之前缓存的节点并判断其在当前帧中是否可以重复利用,如果是,则会将该节点从哨兵的左边移动到哨兵的右边,当前帧处理完成后,哨兵节点会重置到链表的尾部,并进行新一轮的哨兵移动。当缓存的瓦片超过指定的阈值,则清理哨兵左边的节点,并释放内存。
(6)使用多线程
JS 作为脚本语言,它的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来复杂的同步问题。
前端引擎在渲染空间数据时,会将某些繁重的计算由WebWorker 完成,通过Message 消息把结果返回给主线程,再由主线程进行处理,这极大地缓解了在大体量数据渲染下,主线程的压力,通过并计算与异步处理的方式,保证了渲染的实时性,提升了引擎的用户体验。
边缘服务可以用于缓存大体量的云端BIM 和GIS数据[9]。同时,也可以支持复杂三维计算的本地化,如遮挡剔除计算。降低了对网络和云端服务器资源的依赖,大幅提高了大并发场景下的响应时间。因此,通过边缘服务可以快速加载大体量高精度模型,实现大场景高性能渲染。
面对交通行业庞大且冗杂的数据量,为解决网络带宽小、用户访问量大、网点分布不均而产生的用户访问网站响应速度慢等弊端[10],研究并推出边缘服务技术,原理如图5 所示。这个服务技术解决了Internet网络拥塞状况,可加快三维数据传输的速度,提高用户访问网站的响应速度。
图5 边缘数据服务
在现有的Internet 中增加一层新的网络架构,将热点数据分发到最接近用户的网络“边缘”即缓存服务节点。当用户发起访问时,利用全局负载均衡技术将用户的访问指向离用户最近的缓存节点,使得用户可以就近取得所需的数据。如果缓存节点中没有用户要访问的内容,会根据配置自动从资源站抓取相应的内容提供给用户。
本文结合交通行业数据来源广、数据类型异构等方面的特性以及交通行业三维大体量空间数据的管理现状,从数据转换接入、数据融合以及大体量数据模型的轻量化、渲染等角度探讨了交通行业大体量三维空间数据管理的方法。提出一种分层次的HLOD,可批量渲染的BATCH RENDER,并且能为GPU 直接读取的分片数据格式。减少了CPU 与GPU 的计算量,三维实时渲染能够快速响应,实现了三维快速渲染。三维大体量多源异构数据的转换、融合及展示等技术的落地与应用将有效带动传统土木行业及交通市政行业的数字化转型,实现多平台、多格式、多维度的数据信息融合汇聚及使用。