提供支撑BIM模型的可视化服务,并在网页进行显示,功能建设需求包括视图控制、剖切功能、模型树、属性表、抗锯齿效果、X光效果、爆炸视图、太阳光阴影、环境光阴影等等。应提供支撑CAD/PDF等二维图纸的可视化引擎,并在网页进行显示,功能建设需求包括图纸缩放、全视图、图层控制等。支持与二维图纸联动,点击二维图纸的构件可以定位到三维模型的构件并高亮显示,同时点击三维模型的构件也可以定位到二维图纸的构件并高亮显示。
模型可视化服务前端的三维显示渲染基于WebGL,作为WEB端的国际标准趋势,绝大部分主流Web浏览器可以直接运行,无需安装额外的软件环境或者插件环境,同时支持跨平台浏览,PC电脑、手机或PAD可以输入同样的链接地址,即可直接打开。针对打开的终端提供自动适应交互操作,适应键盘鼠标操作与触摸操作。

图1.1.3.3.4-1 多端模型可视化
轻量化图形渲染核心采用专为房建类BIM模型特性定制的轻量化技术,根据房建类BIM的数据组织特点、构件类型情况对所展示的三维场景图形部分以及数据内容同时做了深度优化,保证加载的效率与流畅性。在保留所有信息完整性的前提下,保证目前的大部分建筑物BIM模型文件能在普通终端流畅显示,具体功能包括如下。
1)优化后数据的渲染;
2)大批量数据快速高亮与选择;
3)多种主题与快速切换。

图1.1.3.3.4-2 BIM前端可视化案例图
1、前端数据框架
包括多线程及数据调度策略、后台请求与应答、弱网络数据传输容错机制、边加载边显示查看机制、数据交互协议与浏览器本地缓存机制、多文件动态加载机制,为BIM前端的模型查看体验提供数据框架支持,具体功能包括如下。
多线程及数据调度策略;
数据后台请求与应答机制;
弱网络下数据传输容错机制;
加载中查看机制;
数据交互协议与本地缓存机制;
多文件动态加载机制。
2、前端主框架
包括页面性能控制机制、数据管理与控制、数据构件状态管理、数据分类分层管理、内存管理、Style管理、纹理管理以及支持ThreeJS扩展开发的封装策略,具体功能包括如下。
页面性能控制机制;
优化后数据的管理与控制;
数据构件状态管理策略;
数据分类分层管理机制;
内存管理策略;
Style管理策略;
纹理管理策略;
支持ThreeJS扩展开发的封装策略。
BIM引擎支持对CAD二维图纸的解析、前端渲染以及与BIM模型的叠加显示,
主要包括如下:
1)数据解析
分为两部分,针对CAD源文件在服务器端进行AutoCAD解析转换为CAD通用格式,对通用格式文件进行内容解析,在服务器端读取CAD图元内容,并进行存储。
2)数据处理与优化
对CAD数据图元进行处理,识别图元的几何描述信息,转换为可视化渲染所需要的内容格式,并对CAD数据进行优化重组,为前端渲染性能提供技术基础。
3)数据传输与显示
将CAD数据利用BIM数据通道进行服务提供,由BIM前端渲染能力对CAD数据图元进行单独显示,在性能上优势明显,同时,支持CAD数据与BIM模型前端,同时渲染叠加显示。
0.3.4.1 3.4.1 实时渲染技术分析
客户端获取所需的资源文件,对于静态模型建立空间层级化树,让相机视椎体裁剪树状结构,获取可见的树节点,将可见节点送入GPU管线进行渲染。为了进一步降低GPU渲染负载,对树结构的所有终端节点提交GPU遮挡查询请求,并在若干帧后获取遮挡查询结果,根据节点的遮挡情况实时决定终端节点向下划分/向上合并的权重,更新树结构的终端节点集合。为应对在高密度BIM模型渲染时可能出现的性能波动,设置硬性的渲染负载上限,每帧根据负载上限动态决定最优的可渲染节点集合,获得不超过负载上限的最精细模型效果。
对于动态模型则将同面数的模型区段合并为一个三角网插槽,一个三角网插槽对应一个渲染批次。利用GPU驱动的渲染管线决定每帧可见的模型区段集合,并将这些区段集合按所属的插槽ID重新排列,最终以网格插槽为单位绘制所有可见模型,以极少的批次渲染出数量众多、形状不一的模型数据。

图1.1.3.3.4.1-1 相机视椎体裁剪示意图
0.3.4.2 3.4.2 关键技术和难点
1、优化HLOD算法
对于空间密集、海量构件的模型集合,为了达到高效的LOD负载均衡,不能以构件为单位来进行LOD调度,而需要建立以局部性空间块为单元节点的树形结构,根节点覆盖整个场景模型。

图1.1.3.3.4.1-2 HLOD示意图
首先需要生成覆盖全场景的顶级节点,将顶级节点覆盖的模型集合统一计算边塌陷权重,将所有边的权重建立起优先级堆,按权重大小依次塌陷边序列,最终将模型集合总面数减至预设值(如1万面),降解后的模型集合作为顶级节点的最终可渲染三角网。然后将顶级节点覆盖范围细分为更小的空间块,对每个子空间块进行同样的处理,直至空间块的原始模型总面数小于预设值为止,从而将海量模型转换为一个层级化的空间区域树。
在渲染时根据相机方位和空间块在相机视平面上的投影误差,动态调度空间区域树,最终只需渲染O(log(n))级别的树节点,就可以获得各个距离上误差都可容忍的模型渲染精度。
2、基于空间块的遮挡剔除技术
利用GPU异步遮挡查询机制,在当前帧提交空间块节点是否被遮挡的查询请求,在若干帧后异步获取查询结果,利用几帧前的遮挡结果来预测当前帧空间块的被遮挡权重,已决定向下细分或是向上合并节点。

图1.1.3.3.4.1-3 遮挡剔除示意图
引擎对看不见的模型节点会使用多种策略节省对这部分数据的渲染开销。对于相机主视口的空间块集合,引擎采用硬件遮挡查询技术(HOQ)来精确衡量每个空间块渲染到屏幕上后是否绘制了有效像素,若有绘制则空间块节点进行正常的调度渲染,若没有则禁止其向下降解,从而被遮挡住的区域仅用低精度模型来渲染。由于硬件遮挡剔除的开销较大,还需要将所有遮挡查询分摊到多帧进行,避免每帧过多查询造成卡顿。
在阴影系统的阴影图生成时,需要将光源视锥体包含的所有模型数据渲染到阴影图中,代价极大。为了降低阴影图生成代价,采用层级化深度缓冲技术,为每个待渲染的空间块准备一个简化包围体,在GPU中并行分析每个包围体是否被深度缓冲遮挡,以极低的代价在阴影图生成中加入了遮挡剔除,降低阴影渲染负载。
3、海量模型的自动轻量化减面
模型实时渲染时,为调节渲染负载,会将模型LOD层级相对原始精模的几何形状误差,投影到屏幕上,获得该LOD层级的形状误差在屏幕上占用的像素数,并以此驱动模型LOD层级的切换。模型几何空间误差需要计算精模与粗模表面大量采样点到对方的最短距离,计算量巨大,由CPU来负担将不现实,因此需要将这些计算通过CUDA放入GPU高并发计算流程中,由GPU强大的浮点运算能力来加速几何误差的求解。

图1.1.3.3.4.1-4 自动轻量化减面
静态模型生成层级化LOD数据时,需要对一个空间范围内所有的模型三角网进行统一减面处理,直至将模型的总面数减至预设值。对于顶级空间节点,其范围覆盖很大,涉及模型的总面数可达上亿,在对模型集合应用二次型误差(QEM)边塌陷减面算法时,无法将其全部放入内存中,因此需要采用离核优先级堆方法,将上亿的边塌陷权重缓存到磁盘中,利用内存窗口技术分段处理边塌陷序列,最终使海量三角网格严格按照边塌陷优先级降解为预设面数的粗略模型集合,最大程度的保留了模型集合的整体轮廓形状。
4、动态场景调度策略
在前端渲染模型数据时,为了获得实时的渲染帧率,引擎会根据当前相机的方位以及视场角信息来实时按需获取服务端的资源数据。对模型空间块层级树,采用自上向下的降解策略,当树节点与相机的距离足够接近或节点的几何空间误差在屏幕上的投影像素足够大时,节点会自动向下降解一级,用更精细的空间块节点来替代渲染,经过如此的划分后,不论相机的远近区域,都会显示合适的模型精度,避免了大量高精度模型数据对内存、显存的耗费。
5、延迟渲染以及抗锯齿技术
在对模型进行实时渲染时,诸多渲染特效需要耗费大量的GPU资源,如阴影、环境遮蔽、抗锯齿等,往往需要在效果与效率间作出取舍。例如,渲染管线若要获得良好逼真的渲染效果,需使用延迟渲染和多种后处理技术。G-Buffer是延迟渲染的主要数据载体,它的体积大小直接决定了GPU像素填充率的耗费,引擎采用PBR光照模型,材质参数较少,采用极为紧凑的G-Buffer格式,将材质颜色、光泽度、法线、光照属性等编码到64bit的像素大小,极大降低了GPU像素填充率的耗费。同时采用先进的多帧时域信号滤波的TAA抗锯齿技术,以较低的渲染代价获得了极高的抗锯齿效果。
在相邻若干帧之间待处理的渲染效果变化不明显,可将效果的计算量分摊到相邻多帧,将多帧的子结果通过经验算法合成为当前帧的最终渲染效果,从而不仅降低了每帧的GPU负载,还提高了效果质量。如可将环境遮蔽的采样点分摊到前后16个渲染帧,再通过深度、法线来合成所有历史采样点,高效的获得平滑遮蔽效果。抗锯齿技术中可以将相机在每帧进行轻微亚像素抖动,将多帧抖动的图像合成为最终的边缘平滑的图像,相比传统的多重采样技术极大降低了像素填充率。
6、物理光照模型与高动态颜色模型
引擎采用基于物理的光照模型,基于微平面理论,通过模型基色、金属性、粗糙度等简单的材质参数,真实的表现出模型在不同光照环境下的渲染效果,相比传统的Phone等基于经验的光照模型,更加贴近于物理真实效果。基于物理真实的光照模型,屏幕像素上的颜色光强会出现真实世界的强度范围,将远远大于像素0~255的表达范围,所以引擎加入了对高动态范围光照的处理,需要对屏幕所有像素上的光强进行测定,确定出一个合适的曝光度,然后使用Filmic Tone Mapping技术将高强度颜色信号重映射为显示器可表达的低范围颜色信号用于最终显示。
7、阴影系统和环境遮挡技术
为实现大范围实时软阴影,引擎将场景由近及远分割为若干部分,每个部分被独立的阴影图所覆盖,每个阴影图使用随机扰动点过滤等技术,在所覆盖区域内生成具有半影效果实时阴影,多个引擎区域叠加形成了完整的超远视距的软阴影效果。引擎获取屏幕空间的深度信息和法线信息,重构出当前的场景形状特征数据,通过随机采样技术采样像素对应的世界空间微半球区域内的模型遮挡信息,对遮挡新进行叠加综合,最终获取到每个像素的环境遮挡强度,使用该强度来调节模型受到的环境光强度,使得模型边角处相对变暗,加强对模型棱角形状的感知以及背光区域的空间层次感。
0.3.4.3 3.4.3 测试手段
测试手段主要采用黑盒测试、白盒测试、手工测试和静态测试等四个测试手段,黑盒测试主要是测试是功能上否有不正确或遗漏、接口上是否能正确输入和输出、性能上是否满足要求等;白盒测试主要是研发人员进行编码是否有逻辑错误、路径遗漏和数据泄密等问题;静态测试主要是根据平台需求和公司编码标准检查软件是否符合编程标准等问题;手工测试是由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。