发明内容
为至少在一定程度上克服相关技术中采用的BIM模型的轻量化方法是通过设置BIM模型中各个子模型的LOD显示范围,但本质上并没有减少网格数量,在三维GIS领域使用时仍然会给加载调度、渲染显示造成很大压力,并且,BIM模型中每个子模块LOD的范围难以准确设置,主要依据人工根据具体模型凭经验设置,设置范围的复用程度低,人工干预程度高的问题,本申请提供一种三维BIM模型外壳提取方法、装置及计算机设备。
第一方面,本申请提供一种三维BIM模型外壳提取方法,包括:
读取三维BIM模型中BIM数据,根据所述BIM数据生成具有多种颜色的BIM模型;
对所述具有多种颜色的BIM模型的所有外立面进行渲染,获取所述具有多种颜色的BIM模型的所有外立面的纹理图像;
根据所述纹理对象生成所述三维BIM模型外壳。
进一步的,所述根据所述BIM数据生成具有多种颜色的BIM模型,包括:
根据所述BIM数据生成第一Node节点,所述第一Node节点中包括多个三角形;
对所述多个三角形进行编号;
将所述编号转换成颜色值,并根据所述颜色值对三角形进行着色得到具有多种颜色的BIM模型。
进一步的,所述对所述多个三角形进行编号包括采用等差数列值进行编号。
进一步的,所述对所述具有多种颜色的BIM模型的所有外立面进行渲染,获取所述具有多种颜色的BIM模型的所有外立面的纹理图像,包括:
使用包围盒算法计算得到渲染视图大小和渲染视口大小;
依据渲染视图大小和渲染视口大小对所述具有多种颜色的BIM模型进行正交视图渲染,生成与所述具有多种颜色的BIM模型的所有外立面对应的纹理图像。
进一步的,所述根据所述纹理对象生成所述三维BIM模型外壳,包括:
对所述纹理对象进行解析,获取所述纹理对象对应的三角形编号;
根据所述三角形编号重构第二Node节点,得到所述三维BIM模型外壳。
进一步的,所述对所述纹理对象进行解析,获取所述纹理对象对应的三角形编号,包括:
获取纹理对象中每个像素的RGBA值,
将RGBA值中每一位转换成8个二进制数;
对每一位得到的二进制数进行组合得到32位的二进制数,所述32位的二进制数为所述三角形编号。
进一步的,所述根据所述三角形编号重构第二Node节点包括:
根据所述三角形编号找出对应三角形,所述三角形包含几何纹理信息;
根据所述几何纹理信息重新创建第二Node节点。
进一步的,所述方法还包括:
对所述纹理对象进行大小排序;
设置所述纹理对象拼图阈值,对大小小于所述纹理对象拼图阈值的纹理对象使用二分拼图算法进行拼图。
第二方面,本申请提供一种三维BIM模型外壳提取装置,包括:
具有多种颜色的BIM模型建立模块,用于读取三维BIM模型中BIM数据,根据所述BIM数据生成具有多种颜色的BIM模型;
模型外立面纹理图像获取模块,用于对所述具有多种颜色的BIM模型的所有外立面进行渲染,获取所述具有多种颜色的BIM模型的所有外立面的纹理图像;
模型外壳生成模块,用于根据所述纹理对象生成所述三维BIM模型外壳。
第三方面,本申请提供一种计算机设备,包括:
存储器和处理器,所述存储器存储有计算机程序,所述处理器为GPU,所述计算机程序被所述处理器执行时,使得所述处理器执行上述方法的步骤。
本申请的实施例提供的技术方案可以包括以下有益效果:
本申请中通过生成具有多种颜色的BIM模型,对所述具有多种颜色的BIM模型的所有外立面进行渲染,获取所述具有多种颜色的BIM模型的所有外立面的纹理图像,根据所述纹理对象生成所述三维BIM模型外壳,并不是对BIM模型中所有构件进行渲染,因此,可以大幅降低三维BIM模型中的三角网格数,并且不需要人工干预,进一步的,计算机设备中处理器为GPU,在并行计算能力强,提高大场景中海量数据的处理速度。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
具体实施方式
下面结合附图和实施例对本发明进行详细的描述。
图1是本申请一个实施例提供的三维BIM模型外壳提取方法的流程图。
如图1所示,本实施例的方法用于三维BIM模型外壳提取,包括:
S11:读取三维BIM模型中BIM数据,根据BIM数据生成具有多种颜色的BIM模型;
S12:对具有多种颜色的BIM模型的所有外立面进行渲染,获取具有多种颜色的BIM模型的所有外立面的纹理图像;
S13:根据纹理对象生成所述三维BIM模型外壳。
BIM数据为BIM的几何数据,根据BIM几何数据生成具有不同颜色三角面的模型;三角面包括顶点数据,UV坐标和法线。BIM模型由多个三角面拼接起来,BIM模型的多种纹理颜色是由不同颜色的三角面体现出来。对具有不同颜色三角面的模型进行720度四周环绕渲染所有视角图片,得到的图片都是模型的外立面,从而获取具有多种颜色的BIM模型的所有外立面的纹理图像,只获取外立面纹理图像,内部结构因为被外立面遮挡,所以环绕四周渲染的所有纹理图像都是外立面纹理图像,然后基于外立面纹理图像进行分析,从而得到所有外立面纹理图像对应的外立面三角面,舍弃具有多种颜色的BIM模型中没有渲染出来的内部三角面,从而减少解析出的三角网格数,并且不需要人工干预自动生成所述三维BIM模型外壳,提高方法的重用度,便于用户直接使用。
所述三维BIM模型外壳提取方法应用于城市规划三维辅助决策中、三维地下管线***中和三维城市***中,由于复杂BIM模型直接入库三维***中,会导致***不能正常运转或者非常卡顿,因此BIM模型在入库前需要进行模型简化,使用所述三维BIM模型外壳提取方法可以降低三维模型中的三角网格数,简化的速度,并且,对多个纹理对象进行解析,重新获取所述三角形编号,由于三角形编号携带信息没有改变,因此,可以使外壳提取数据更加准确,从而提高简化后模型的质量,使三维模型在大场景中显示更加流畅。
本实施例中,通过生成具有多种颜色的BIM模型,对所述具有多种颜色的BIM模型的所有外立面进行渲染,获取所述具有多种颜色的BIM模型的所有外立面的纹理图像,根据所述纹理对象生成所述三维BIM模型外壳,并不是对BIM模型中所有构件进行渲染,因此,可以大幅降低三维BIM模型中的三角网格数,减小加载调度、渲染显示给处理***带来的压力,并且不需要人工干预,提高了方法的重用度。
参见图2,作为上述方法的一种改进,本发明实施例提供另一三维BIM模型外壳提取方法方法。
如图2所示,在上一实施例基础上,本实施例的方法包括:
S11:读取三维BIM模型中BIM数据,根据BIM数据生成具有多种颜色的BIM模型;
作为本发明可选的一种实现方式,所述根据所述BIM数据生成具有多种颜色的BIM模型,包括:
S111:根据BIM数据生成第一Node节点,第一Node节点中包括多个三角形;
S112:对多个三角形进行编号;
S113:将编号转换成颜色值,并根据颜色值对三角形进行着色得到具有多种颜色的BIM模型。
根据BIM数据标准序列化格式,反序列化读取BIM数据中的顶点坐标、法线、UV坐标、Matrial(材质)、纹理图片等几何纹理信息,转成Geometry(几何体),并根据Geometry生成能够在三维场景中显示的第一Node节点。
将编号转换成颜色值包括:
将编号先转换成二进制数;
将二进制数再转成RGBA颜色值,RGBA每一个颜色值占用8个二进制位,因此需要把二进制数转成8位一组,再分别计算每8位的十进制数值,比如“00000000 0010001001001000 10100000”转成“0,34,72,160”,然后再把每一位除以255,得到RGBA(0,0.13333333,0.28235294,0.62745098);
为每个三角形的顶点创建一个顶点属性;
将一个顶点属性赋值为RGBA颜色值。
通过将编号与三角形顶点绑定,可以保证在渲染后找出每个三角形顶点对应的编号,从而保证重构时使用的数据准确。
作为本发明可选的一种实现方式,所述对所述多个三角形进行编号包括采用等差数列值进行编号。
根据生成的第一Node节点的几何信息中包含的三角形进行重新编号,从1开始进行序列编号,编号数值可以支持到约42亿,由于解析BIM模型时已经知道了当前三角型面数,如果面数在亿以下,所述方法会根据最大编号的具体数值计算出一个合适的等差数列值进行编号,比如按照等差数列10编号,则编号结果为1,11,21,31……等,数字编号之间差别越大,后续计算的准确度越高,从而有利于保证提取的外壳保持原有BIM模型外轮廓的效果不变。
S12:对具有多种颜色的BIM模型的所有外立面进行渲染,获取具有多种颜色的BIM模型的所有外立面的纹理图像;
作为本发明可选的一种实现方式,所述对所述具有多种颜色的BIM模型的所有外立面进行渲染,获取所述具有多种颜色的BIM模型的所有外立面的纹理图像,包括:
S121:使用包围盒算法计算得到渲染视图大小和渲染视口大小;
S122:依据渲染视图大小和渲染视口大小对所述具有多种颜色的BIM模型进行正交视图渲染,生成与所述具有多种颜色的BIM模型的所有外立面对应的纹理图像。
正交视图渲染时颜色值通过顶点着色器和片段着色器写入纹理顶点着色器和片段着色器进行着色过程包括:通过“attribute vec4aColor”的方式读取到每个顶点对应自的颜色值,之后将颜色值传送到片段着色器。片段着色器接收到顶点着色器中的颜色值,并把这个颜色值设置给片段,将片段按照设置的颜色值进行渲染。
采用正交视图进行渲染,在渲染前根据当前场景模型包围盒计算合适的渲染视图大小和渲染视口大小,使用场景中的相机,进行多视角渲染,将具有多种颜色的BIM模型所有外立面都被渲染到,每次对一个视角进行渲染时都会生成一张纹理图像。
S13:根据纹理对象生成所述三维BIM模型外壳。
作为本发明可选的一种实现方式,所述根据所述纹理对象生成所述三维BIM模型外壳,包括:
S131:对所述纹理对象进行解析,获取所述纹理对象对应的三角形编号;
S132:根据所述三角形编号重构第二Node节点,得到所述三维BIM模型外壳。
作为本发明可选的一种实现方式,所述对所述纹理对象进行解析,获取所述纹理对象对应的三角形编号,包括:
获取纹理对象中每个像素的RGBA值,
将RGBA值中每一位转换成8个二进制数;
对每一位得到的二进制数进行组合得到32位的二进制数,所述32位的二进制数为所述三角形编号。
在纹理对象中获取每个像素的RGBA值,此RGBA值是一个0-255的数值,再将RGBA每一位转换成8个二进制数,最后再把RGBA转换的二进制位组合成一个32位的二进制数,从而可以根据三角型的编号找出第一Node节点中三维BIM的外立面几何信息。
作为本发明可选的一种实现方式,所述根据所述三角形编号重构第二Node节点包括:
根据所述三角形编号找出对应三角形,所述三角形包含几何纹理信息;
根据所述几何纹理信息重新创建第二Node节点。
根据三角型的编号找出对应的三角形,以及三角形所对应的别的几何纹理信息,比如法线、uv坐标等信息,根据法线、uv坐标等信息重新创建第二Node节点,第二Node节点即为提取三维BIM模型的外壳。
作为本发明可选的一种实现方式,所述方法还包括:
S141:对所述纹理对象进行大小排序;
S142:设置所述纹理对象拼图阈值,对大小小于所述纹理对象拼图阈值的纹理对象使用二分拼图算法进行拼图。
直接根据根据三角形几何纹理信息重新创建第二Node节点提取的BIM模型外壳,其外表面有很多细碎的面,以及每个面对应的Matrial(材质)或者纹理不完全相同,导致需要很多渲染批次,因此利用二分拼图算法,进行把细小纹理拼接成一张纹理大图,对纹理大图进行渲染,从而保证一张纹理大图利用率最大化。
通过二分拼图算法合并细碎纹理贴图,可以实现在保持原有BIM模型外轮廓的效果不变的情况下降低渲染批次。
将第二Node节点进行导出即为提取的外壳,导出的时候可以生成各种通用的三维模型格式文件,比如fbx,3ds,obj,osg,osgb等。
实验结果表明:所述的方法可用于快速简化复杂BIM模型,一个有50多万三角面的BIM模型,简化后有1万多三角面,并且对简化后的数据进行了渲染批次优化,提升了在大场景的渲染效率。所述方法不仅可以用在三维GIS领域,也可以用在专业领域,比如铁路,桥梁等领域BIM模型的简化。
另外。所述方法可以制作成独立的exe程序或者插件,加载到其他GIS***中,方便用户使用。
本实施例中,在根据所述几何纹理信息重新创建第二Node节点时,可以通过二分拼图算法合并细碎纹理贴图,从而实现在保持原有BIM模型外轮廓的效果不变的情况下降低渲染批次。
图3是本申请一个实施例提供的三维BIM模型外壳提取装置的模块图。
如图3所示,所述装置包括:
具有多种颜色的BIM模型建立模块31,用于读取三维BIM模型中BIM数据,根据所述BIM数据生成具有多种颜色的BIM模型;
模型外立面纹理图像获取模块32,用于对所述具有多种颜色的BIM模型的所有外立面进行渲染,获取所述具有多种颜色的BIM模型的所有外立面的纹理图像;
模型外壳生成模块33,用于根据所述纹理对象生成所述三维BIM模型外壳。
通过具有多种颜色的BIM模型建立模块31读取三维BIM模型中BIM数据,根据所述BIM数据生成具有多种颜色的BIM模型;通过模型外立面纹理图像获取模块32对所述具有多种颜色的BIM模型的所有外立面进行渲染,获取所述具有多种颜色的BIM模型的所有外立面的纹理图像;通过模型外壳生成模块33根据所述纹理对象生成所述三维BIM模型外壳,可以降低提取的三维BIM模型外壳中网格数量,降低在三维GIS领域使用时的加载调度速度,并且不需人工干预,提升方法的复用度。
所述装置还包括:
编号模块,用于对多个三角形进行编号,编号时采用等差数列进行编号,提高了提取外壳时所用数据的准确性;
转换模块,用于将编号转换成颜色值,并将颜色值设置为三角形顶点的属性,通过将编号转换为颜色值,可以将编号通过颜色值加载到BIM模型中;
渲染模块,用于根据颜色值对具有多种颜色BIM模型的所有外立面进行渲染得到多个纹理对象;
解析模块,用于对多个纹理对象进行解析,重新获取三角形编号;
重构模块,用于根据三角形编号重构第二Node节点,根据第二Node节点生成BIM模型外壳。
通过渲染得到纹理对象,再通过解析模块35对纹理对象进行解析,可以重新获取BIM模型所有外立面的三角形编号,通过重构模块36对BIM模型所有外立面的三角形编号重构第二Node节点,根据第二Node节点生成BIM模型外壳,从而减少了外壳中的网格数,减小模型外壳加载、显示时给***带来的压力。
拼图模块,用于对纹理对象使用二分拼图算法进行拼图。
设置所述纹理对象拼图阈值,在拼图模块中对大小小于所述纹理对象拼图阈值的纹理对象使用二分拼图算法进行拼图可以减少渲染显示造成的操作***压力,提升加载速度。
本实施例中,通过渲染模块根据颜色值对BIM模型的所有外立面进行渲染得到多个纹理对象,可以降低提取外壳中的网格数量,进一步的,在拼图模块中对大小小于所述纹理对象拼图阈值的纹理对象使用二分拼图算法进行拼图可以减少渲染显示造成的操作***压力,提升加载速度。
图4为本发明一实施例提供的计算机设备的内部结构图。该计算机设备可以是终端,也可以是服务器。如图3所示,该计算机设备包括通过***总线连接的处理器、存储器和网络接口。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作***,还可存储有计算机程序,处理器为GPU,该计算机程序被处理器执行时,可使得处理器实现上述三维BIM模型外壳提取方法。GPU的并行计算能力比CPU强很多,尤其是对海量数据GPU的优势更加明显。从而提高在提取外壳时的数据处理速度。
该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行上述三维BIM模型外壳提取方法。网络接口用于与外接进行通信。本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的三维BIM模型外壳提取方法可以实现为一种计算机程序的形式,计算机程序可在如图3所示的计算机设备上运行。
另外,本发明还提出了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行如下步骤:读取三维BIM模型中BIM数据,根据所述BIM数据生成具有多种颜色的BIM模型;对所述具有多种颜色的BIM模型的所有外立面进行渲染,获取所述具有多种颜色的BIM模型的所有外立面的纹理图像;根据所述纹理对象生成所述三维BIM模型外壳。
在一个实施例中,所述根据所述BIM数据生成具有多种颜色的BIM模型,包括:
根据所述BIM数据生成第一Node节点,所述第一Node节点中包括多个三角形;
对所述多个三角形进行编号;
将所述编号转换成颜色值,并根据所述颜色值对三角形进行着色得到具有多种颜色的BIM模型。
进一步的,所述对所述多个三角形进行编号包括采用等差数列值进行编号。
在一个实施例中,所述对所述具有多种颜色的BIM模型的所有外立面进行渲染,获取所述具有多种颜色的BIM模型的所有外立面的纹理图像,包括:
使用包围盒算法计算得到渲染视图大小和渲染视口大小;
依据渲染视图大小和渲染视口大小对所述具有多种颜色的BIM模型进行正交视图渲染,生成与所述具有多种颜色的BIM模型的所有外立面对应的纹理图像。
在一个实施例中,所述根据所述纹理对象生成所述三维BIM模型外壳,包括:
对所述纹理对象进行解析,获取所述纹理对象对应的三角形编号;
根据所述三角形编号重构第二Node节点,得到所述三维BIM模型外壳。
进一步的,所述对所述纹理对象进行解析,获取所述纹理对象对应的三角形编号,包括:
获取纹理对象中每个像素的RGBA值,
将RGBA值中每一位转换成8个二进制数;
对每一位得到的二进制数进行组合得到32位的二进制数,所述32位的二进制数为所述三角形编号。
进一步的,所述根据所述三角形编号重构第二Node节点包括:
根据所述三角形编号找出对应三角形,所述三角形包含几何纹理信息;
根据所述几何纹理信息重新创建第二Node节点。
在一个实施例中,所述计算机程序被所述处理器执行时,还用于执行以下步骤:
对所述纹理对象进行大小排序;
设置所述纹理对象拼图阈值,对大小小于所述纹理对象拼图阈值的纹理对象使用二分拼图算法进行拼图。
可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。
需要说明的是,在本申请的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是指至少两个。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行***执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。
需要说明的是,本发明不局限于上述最佳实施方式,本领域技术人员在本发明的启示下都可得出其他各种形式的产品,但不论在其形状或结构上作任何变化,凡是具有与本申请相同或相近似的技术方案,均落在本发明的保护范围之内。