大规模WebBIM场景轻量级在线互动编辑关键技术

2019-03-15 13:31金承泽
电脑知识与技术 2019年2期
关键词:建筑信息模型碰撞检测

金承泽

摘要:近年来,以建筑信息模型为核心的BIM(Building Information Modeling)技术的发展与应用,在建筑行业已蔚然成风。BIM系统的核心功能是提供工程模型的三维可视化。使用Web浏览器作为载体无插件地直接渲染BIM模型方便用户随时随地浏览模型,极大地提高了沟通效率。但基于Web的平台的BIM应用功能和场景承载力较弱。本文针对BIM模型的特点提出LOD的优化策略,提高了平台的承载力。基于着色器实现了大规模WebBIM场景的在线剖切功能,并对场景进行了体素化预处理。运用体素化索引和构件的逆索引实现了高效的在线碰撞检测功能,提高了平台的实用性。

关键词:建筑信息模型(BIM) ;多分辨率网格(LOD); 碰撞检测;剖切

中图分类号:TP311        文献标识码:A        文章编号:1009-3044(2019)02-0234-03

1 引言

BIM系统的核心功能是提供工程模型的三维可视化。但行业软件面向设计且体量庞大,双方要进行交流首先要部署行业软件,这样不方便在用户间进行交互。本文基于WebGL使用three.js渲染引擎通过无插件的网页直接向用户提供模型的浏览与编辑服务。

出于安全角度考虑,浏览器能占用的系统资源较少。必须对动辄几百M的设计文件进行轻量化处理才能在浏览器中用WebGL技术直接渲染。本文对轻量级大规模WebBIM场景在线编辑的关键技术进行研究,力图解决目前WebBIM平台承载力低且实用性不足的痛点问题。

2 多分辨率网格关键技术

LOD(Level Of Detail)技术是根据不同的策略,当视点满足策略规定的条件时,渲染不同精度的LOD模型。LOD技术的核心是只渲染比较重要的模型。一个模型是不是重要的,可以根据这个模型在屏幕上的投影(包围盒)尺寸来确定。距离观察视点近、看得清就认为相对比较重要。一般会综合考虑构件的包围盒尺寸和距离来决定构件的渲染精度。通常可以用组成构件的三角面片数除以包围盒尺寸作为尺寸依据,并用尺寸依据和包围盒与视点的欧式距离的比值来定义模型的渲染精度。

大规模场景的特殊性在于构件数量多且网格拓扑复杂。如果做处理一个构件就会带来一次GPU drawcall。这会显著地降低设备的漫游帧率。对于性能较差的移动端会暴露得更加明显。对于大规模场景,一般会将同材质的网格合并,当作一张网格交给GPU处理。但单纯地合并不能解决场景中三角面片过多的问题。WebBIM应用占用的内存与场景同时渲染的三角面片总数正相关。如果内存占用超过浏览器的限制,浏览器将直接杀掉渲染进程使WebBIM应用崩溃。这是使用多分辨率网格来降低场景同时渲染面片总数的主要原因。因此,最关键的矛盾暴露了:要通过网格合并来保证帧率,又要使用多分辨率网格随着用户的漫游及时地更改场景中的网格。只要更改一个构件的网格,就要把合并后的网格打散重组一次。频繁地更改构件精度同样会引起帧率的明显降低或内存的急剧抖动导致崩溃。

经过对BIM构件的分析,本文认为现在主流框架结构建筑的支承部分主要由柱、梁、板以及剪力墙等构成。这几类构件作为建筑物的骨架,数量多且体积较大、容易被注意。但是这类构件的网格拓扑却比较简单,三角面片数量较少。但对于通风、供暖、电水管以及建筑设备之类的构件,通常体积不大却占用了较多的三角面片。

经过上面的分析,本文不对所有的构件适用多分辨率网格,在场景中合并总量较多但面片简单的柱梁墙板类结构支承构件的网格后直接渲染。对前文提到的尺寸依据较大的,例如根据场景的构件总量设定参考值,设为15%。只对尺寸依据排在前15%的构件适用多分辨率网格。此外,在笔者进行模型处理的过程中发现了一类比较特别的板件,在IFC(Industry Foundation Classes)标准中将其归类为IfcPlate,这类板件外形类似长方体,但内部网格拓扑比较复杂,该类别一般表示室内隔热空心板件或幕墙。对于这类构件,使用OBB方向包围盒来替代Hoppe[1]的基于边折叠的一般网格简化法能够最大限度地保持构件的外形并减少表达构件的三角面片数。本文在场景预处理生成多分辨率网格时会专门处理这类构件。

最后,在设计网格调度策略时本文着重考虑了用户的漫游行为。如果用户漫游速度比较慢,且持续性比较差,一般不持续漫游超过2秒。本文认为此时用户对视点周边构件特别感兴趣。这时提高视点周边构件网格精度的更新频率。如果用户持续漫游超过2秒,则认为用户对周边构件不感兴趣,暂停更新视点周边的构件网格。

3 轻量化网格碰撞检测关键技术

为提高大规模WebBIM平台的实用性,本文的WebBIM平台提供构件之间的干涉碰撞检测功能。WebBIM主要检查模型的现有状态,找出当前场景中所有发生碰撞的构件对并其进行索引,提供便捷的导航功能使得用戶能够快速定位到场景中发生碰撞的构件。在Web端实现的碰撞检测功能能够方便设计单位、业主方、施工单位和监理单位的沟通。

WebBIM是模型的消费者,平台渲染的模型的总体架构已经完成。平台仅承担很少或不承担BIM模型修改工作,这意味着尽管需要处理的构件组数很多,场景中主要构件的位置是确定的。既然大多数构件位置基本确定,就可以在渲染前对场景进行体素化[3]并创建大规模WebBIM场景的体素化索引以及构件的逆索引。

体素化就是把场景的包围盒按照选定的尺度均匀剖分成立方体,每个立方体称为体素。本文希望多数体素中含有的构件数目不超过3个。我们就可以通过构件顶点的位置确定某个体素有哪些构件,并进一步确认一个构件占用了哪些体素。运用这个关系,可以直接确定一个构件的周围有哪些构件。对场景体素化的过程已经在渲染前的预处理阶段完成,因此在WebBIM场景中真正执行碰撞检测的时候可直接筛选出既定构件的邻接构件。从而高效地进行查找。

对场景进行体素化的难点在于难以选取一个合适的体素尺寸。本文受建筑设计的模数理念启发来迭代确定体素的尺寸。模数是建筑设计中常用的基本单位。如100mm,大多数建筑构件的尺寸是100mm的整数倍。设项目中独立构件数目为N,则场景包围盒的初始最长边应当划分U个体素。

确定了最长边体素总量之后,体素的尺寸就用最长边长除以U确定。这时把构件按照顶点坐标填入体素得到表达一个体素中有哪些构件的体素化索引,接着把不包含构件的体素从索引表中剔除。然后对体素尺寸进行初次校验。本文升序排列每个体素中的构件数量,取0.9倍数组长度减1的构件数目进行校验。如果其值为1,则通过校验。这说明有百分之九十的体素中只包含一个构件。如果没有通过,则检查0.8倍数组长度减1,如果为2则通过校验。否则认为校验不通过,将最长边划分体素数加10重新进行校验。如果不是第一次校验,除了检查体素中的构件分布外还要检查总记录条数。本文规定独立构件数为N的场景体素索引长度不能超过。如果不满足该条件,迭代结束,取上次迭代结果作为体素化的尺度。

方才介绍的方法能够取得较好的体素尺寸。本文还要解决一个体素化引起问题:同一体素中会有构件尺寸差异過大的情况。单体素中可能会包含一根柱子和三个消防喷头。消防喷头的面片十分复杂但包围盒体积仅为柱子的几十分之一。在精确地检测两个构件是否干涉前,本文采用AABB包围盒先行测试,直接剔除同一体素中明显不相交的构件对,显著地提升了场景构件的检测效率。

WebBIM是基于WebGL渲染的场景。场景中的构件均由三角形组成。精确的碰撞检测结果是根据构件对的最近三角面片是否碰撞确定的。但JavaScript目前未有成熟的计算几何库,我们需要自行实现三角面片之间的距离算法。笔者通过扩展了平面Voronoi域的概念来找出两个三角形之间的最近点对。此方法涉及较多的空间向量叉积运算。本文在计算性能较差的前端使用拉格朗日恒等式用向量内积简化了叉积计算,提高了计算效率。

4 轻量化场景剖切关键技术

用户希望通过WebBIM平台实现移除视线遮挡物的功能。即希望查看位于部分构件之后的构件。例如,希望拆掉屋顶,看到房屋的平面布置。或是希望看到墙面后的房间布置图。总之,用户希望将精力集中在感兴趣的部分空间。这个需求的本质是在场景中去除不感兴趣的构件。在建筑设计表达中,有剖面图的概念。对于比较复杂的设计,例如室内楼梯的布置,采用传统的平面图、立面图不足以足够明确地表达设计人员的意图,需要在相应的楼梯间位置增加一个剖视图来把设计表达清楚。在我们的场景中也可以类似地运用这样的概念,为用户提供一个灵活操控的平面,我们将隐藏全部平面上侧的构件。

在第二节中本文已经述及,在轻量化WebBIM场景中不宜频繁更改网格中的构件。因此实现剖切功能不宜在WebBIM场景中真正对网格进行剖分。如果对网格进行在线剖分,不仅要进行繁重的网格重构计算还难以将剖切功能关闭后还原网格的初始形态。

本文利用可编程着色器找到每个复合几何体位于剖面上方的点对应的像素,直接丢弃全部该像素的后续操作。如此我们在场景中就不会看到处在剖切面之上的像素,呈现出来的就自然是剖面后原本被遮挡的构件。

如图1所示,在渲染管线中光栅化形成的片元会逐一传入片元着色器中。着色器将决定每个片元的颜色后将结果送入颜色缓冲区,也就是即将渲染的部分。我们可以通过GLSL来对片元着色器进行编程遴选出我们需要渲染的像素进一步处理,否则将其丢弃。

计算时只需要把确定平面的四个参数组成的向量p=(a,b,c,d)与片元着色器中表示片元所对应场景空间位置的分量vPosVec4=(x,y,z,w)做一个内积。如果则说明片元在平面上侧,应该discard该图元,这就实现了根据平面实现轻量化剖切的目的。

5 实验验证

本实验采用首钢智慧城市项目提供的Revit模型来进行。该Revit模型文件达1.41GB,三角面片数量达2000万余,构件总数达3万5千余。Web端是通过一台配置为Intel(R) Core(TM) i5-2400 CPU @3.10GHz处理器、8.0GB内存、NVIDIA GeForce GTX1060显卡的PC上访问。在没有使用本文叙述的多分辨率网格时,加载该模型时WebBIM平台直接崩溃。笔者部署了本文叙述的大规模场景轻量级在线互动编辑技术后,成功渲染了该模型,并且漫游时的平均帧率大于24。开启轻量化在线剖切后在其中漫游,帧率没有受到显著影响。可见在大规模WebBIM场景中应用可编程着色器实现剖切功能的优越性能。通过应用本文提出的WebBIM轻量级在线互动编辑技术确实提高了平台的承载力并对平台进行了实用功能扩充。

6 结论

本文介绍了在WebBIM平台渲染大规模场景会面临的技术瓶颈——浏览器的资源限制,以及通过多分辨率网格技术来降低场景同时渲染的三角面片总数来提高场景承载力的优化方案,还介绍了在Web平台实现两个BIM系统的实用功能,剖切与碰撞检测的关键技术。纵观全文,有如下一些关键技术优化点:

(1)为了保证平台的渲染帧率,需要对建筑构件进行分类,只对少部分构件复杂的构件应用多分辨率网格。

(2)对于特殊的板类构件,如中的蓝色幕墙,使用OBB包围盒更好的替代边塌陷等通用网格压缩法。

(3)调度不同精度的构件的策略要考虑用户的漫游习惯,用户的持续漫游时间是较好的参考指标。

(4)在线碰撞检测宜做好在线预处理,使用场景体素化索引和构件的逆索引可以快速确定一个构件周围的构件。

(5)对于建筑构件大小差异过大的问题,宜结合使用体素化与AABB包围盒。

(6)通过可编程着色器运用GPU的高性能图形处理能力来控制像素的显示来实现剖切,而不是实际对网格进行剖分。

使用上述关键技术能够显著地提高WebBIM平台的模型承载力并提高平台的实用性。

参考文献:

[1] Hugues Hoppe, Tony DeRose, Tom Duchamp, John McDonald, Werner Stuetzle: "Mesh Optimization". SIGGRAPH '93, the 20th annual conference on Computer graphics and interactive techniques,19-26.

[2] 张东培,谢宁,刘小军, 等. 网上大规模地下空间的轻量级实时绘制系统[J].计算机科学与探索,2015(9):1034-1043,2015.

[3] 刘小军,张东培,谢宁, 等.大规模地下空间在线展示关键技术[J].光学精密工程,2015,23(3).

猜你喜欢
建筑信息模型碰撞检测
全新预测碰撞检测系统
基于BIM的铁路信号室外设备布置与碰撞检测方法
Unity3D中碰撞检测问题的研究
BIM在设计企业的应用经验
BIM技术下的某办公楼项目管线碰撞检测