摘要: 三维点云是 BIM 建模的重要素材,利用其自动构建语义丰富的 BIM 实体模型是实现采集信息有效利用和改善建模效率的有效途径。文章运用 Dynamo 可视化编程平台组合功能节点,构建了三维点云切片轮廓自动生成 BIM 实体模型的节点链,并以斯坦福兔子和莲花石墩为例,通过环视摄像采集的图像重建三维点云并输入 Dynamo,经过点云显示、简化、切片、投影和实体建模 5 个步骤,得到相应的实体模型。结果表明: Dynamo 中构建的节点链能够完成点云到实体模型的自动创建,通过自定义参数驱动和属性节点设置还能得到不同精度和属性的 BIM 模型,同时节点链保存为样板文件后,能在不同项目中实时调用,为异形构件 BIM 自动化建模提供一种有效路径。
缪盾, 山东建筑大学学报 发表时间:2021-08-06
关键词: 建筑信息模型; 三维点云; 网格模型; Dynamo; 实体建模
0 引言
点云数据是通过三维激光扫描仪或机器视觉技术获取的高精度、高密度、全数字化的目标物表征数据[1-2]。依靠逆向建模软件还能将这些空间离散点处理成三维网格模型,已经成熟地应用于基础测绘、古 建 保 护 工 程 中。 建 筑 信 息 模 型 ( Building Information Modeling,BIM) 技术以三维建筑信息模型为核心,通过模型的分析、传递、共享、应用实现建筑的全生命周期管理,是建筑业信息化发展的基础[3]。BIM 的核心建模软件 Revit 设置了点云链接功能,但是 Revit 对点云的处理能力还处于显示阶段,不能直接对其进行编辑和建模。而目前基于点云生成的网格模型是一类表面模型,不是具有结构特性和属性特性的通用 BIM 实体模型,模型可支持的 BIM 应用、分析存在很大的局限性。因此,基于点云数据创建 BIM 模型也成为目前学者研究的热点,大致可以分为 4 个研究方向: ( 1) 通过提取点云特征线,生成二维矢量图,导入 Revit 中进行手动建模。吕凤华等[4]扫描了地铁车站,并提取点云特征线和相关参数进行 BIM 建模。高溪溪等[5]将古建点云 数 据 导 入 计 算 机 辅 助 设 计 软 件 ( Computer Aided Design,CAD) 提取特征线,生成标准图纸,通过图纸进行 BIM 建模。( 2) 通过中间软件人机互动识别点云中的常规构件进行自动建模,并导出 BIM 兼容格式。刘立扬等[6]将点云导入点云处理软件 PointSense for Revit 拟合墙面、梁柱,再导入 Revit 软件; 石力文等[7-8]将古建点云导入用于处理扫描点云的 Revit 插件( Scan for BIM) [9],对一般构件拾取表面特征点进行建模。( 3) 对标准件采集点云,计算全局点云特征直方图描述子( Viewpoint Feature Histogram,VFH) ,建立标准件 VFH 库,通过特征值分类识别构件调用族库模型。苗亚哲等[10]建立了标准化管线的 VFH 库。( 4) 通过二次开发对点云进行建模,陈海涛[11]研究了常规简单构件的点云几何形状参数,利用二次开发工具集( Visual Studio) 实现点云的 BIM 重建。前两个方向是目前采用较多的方式,但是存在大量的人工作业,对模型精度有一定的 干 扰; 方 向 ( 3 ) 使 用 面 较 窄,适 用 于 设 备 ( Mechanical,Electrical & Plumbing,MEP) 建模; 而方向( 4) 可以直接编辑和建模点云,人为干扰少但对编程要求高。文章采用摄影测量的方法获取目标物的密集点云数据,在可视化编程平台 Dynamo 中对预处理后的点云进行分层编辑分段建模,实现点云自动化建模。
1 可视化编程软件 Dynamo
Dynamo 是欧特克 Autodesk 公司推出的功能强大、使用便捷的可视化编程软件。使用者不必一行行写程序代码,甚至不必掌握编程语言,通过简单地链接预定义功能节点,轻松创建自己的算法[12]。 Dynamo 启动与界面如图 1 所示。
Dynamo 拥有强大的功能节点库,包含了分析、图形、操作、运算等 8 大特定功能节点类型,如图 2 所示。节点与节点之间通过输入、输出端口连接,运行结果同步显示在 Revit 中,体现了“所见即所得” 的编程思想。
2 点云 BIM 重建方法
点云解析了物体表面密度极高的离散点空间信息,其中包含了建模所需的特征点信息,还有大量的冗余信息,影响建模效率。同时也存在处于同一局部区域内的点云,而实体属性是不唯一的情况,影响建模的准确性。因此,在建模之前首先需要对原始点云进行分类和分割,以色彩信息和点法矢信息分类后得到属性唯一的构件级点云,通过点云切片分段建模的方式进行模型自动生成,具体建模思想是: ( 1) 求点云三维度的极值分别为 xmin、xmax、ymin、ymax、 zmin 和 zmax ,计算点云包围盒表面积,再根据点云数量计算点云平均面密度; ( 2) 在选定方向对点云进行切片,切片数 n 设置为输入型参数,并计算切平面上、下一个阈值范围内的点集; ( 3) 将上、下点集投影至切平面求交,通过离散点拟合[13]得到 n 个截切边界轮廓; ( 4) 相邻边界轮廓进行放样融合创建分段实体; ( 5) 分段实体组合、族类别设置、材质设置以及其余实例属性值设置。该方法对具有复杂表面的建筑构件有很好的建模表现,通过调正切片数还能得到精细化程度不同的实体模型。
2.1 点云采集和分类及其面密度计算
点云的采集方式有激光扫描和照片扫描两种相对于激光扫描而言,照片扫描具有更大的灵活性和便捷性[14],工作人员只需通过普通相机对目标物进行拍照,保证每两张相片有 50%的重叠度,那么通过实景扫描与三维建模软件 Agisoft Photoscan [15]即可 重 构 重 叠 区 的 像 素 点,生 成 点 云 数 据。在 Agisoft Photoscan 软件中选择通过颜色、纹理和法矢信息进行点云分类,得到属性一致的点云,采集的石墩三维点云如图 3 所示。
按照点云类别标记码批量导出分类后的点云,其形式可选为电子表格 Excel 三维坐标点格式,并由 Dynamo 的读取数据功能节点导入点云。搜寻点云坐标中的极大、极小值,点云包围盒面积 S 由式 ( 1) 表示为 S = 2[( xmax - xmin ) ·( zmax - zmin ) + ( ymax - ymin ) ·( zmax - zmin ) + ( xmax - xmin ) ·( ymax - ymin ) ], ( 1) 式中 S 为点云包围盒面积,m2 ; xmin、xmax 为 x 维度极值,m; ymin、ymax 为 y 维度极值,m; zmin、zmax 为 z 维度极值,m。
点云面密度 δ 由式( 2) 表示为 δ = N S , ( 2) 式中 δ 为点云面密度,点 /m2 ; N 为点云总量,点。
2.2 点云切片
根据点云形态确定切片的基面,如某一维度显著大于另两个维度,则选择该维度的垂面为切片基面,这样可以精确控制模型的外形。一般情况选择 z 方向即高度方向为截切方向,切片为一系列平行的水平面。用户通过滑动条控制切片数量 n,每个切片的 z 值由式( 3) 表示为 zi = zmin + ( ) i - 1 ·zmax - zmin n - 1 ,( i = 1,2,…,n) 。 ( 3) 为了避免切平面上的点出现局部空缺或点稀疏现象,设置点云密度 δ 为切片阈值,增补处理切平面 上、下 δ 范围内的点。切平面 Q 将阈值范围内的 局 部 点 云 分 为 上 、下 两 部 分 点 集 p zi ( ) + δ 和即可 重 构 重 叠 区 的 像 素 点,生 成 点 云 数 据。在 Agisoft Photoscan 软件中选择通过颜色、纹理和法矢信息进行点云分类,得到属性一致的点云,采集的石墩三维点云如图 3 所示。
p' zi ( ) - δ ,将上、下点集中的点以欧式最短距离配对,如图 4 所示。
求与上部点 p1 欧式距离最短的下部点 p' 1,则两点连线与切平面的交点为增补点 p,根据相似原理,增补点 p 的切平面二维坐标 xp,yp ( ) 由式( 4) 表示为 { xp = x1 + Δz1 Δz1 + Δz ' 1 · x1 - x' 1 , yp = y1 + Δz1 Δz1 + Δz ' 1 · y1 - y' 1 。 ( 4) 依次计算得到每个切平面的点集。
2.3 切面离散点拟合
上一个步骤中得到的切面点集是无序的,对这些离散点进行曲线拟合的前提是点按正向或逆向有序排列。由于切面点集最终将拟合成一条封闭的平面回转曲线,曲线上的某一 x 值或 y 值对应曲线上的点不唯一( 除极点外) ,因此需对点集进行划分,再进行坐标值对比排序,以某一个切平面 xOy 为例,具体步骤为:
( 1) 求取切面点集中的 x 向或 y 向极值( 文章采用 x 向) ,即求得 xmin、xmax,及对应的极点 p1、p2,则极点连线将点集分为两部分,如图 5 所示。
( 2 ) 求取极点连线方程,方 程 式 为 y = yp 2 - yp 1 xmax - xmin · x - xmin ( ) + yp 1 ,选择点集中下一个点 pi ( xi,yp i ) ,计算 xi 处 p1 p2 连线上的点 gi 的 yg i 值。
( 3) 比较 pi 点和对应 gi 的 y 值,若 yp i > yg i ,则该点纳入列表 1,若 yp i < yg i ,则该点纳入列表 2,重复第 2、3 步,完成所有点的分类。
( 4) 对列表1 中的点进行正向排序,列表2 中的点进行逆向排序,即列表 1 的点按 x 值从小到大排列,列表 2 的点反之,两个列表合并为一个列表,则得到一个完整有序的切面点集。
3 实例应用
在 Dynamo 中完成点云的读取到 BIM 自动建模,共设计了三维点云读取和重采样显示、点云切片、实体建模和属性赋值 4 大主体节点链。以斯坦福兔子点云数据和室外石墩的照片重建点云数据为实验样本,测试其方法的可行性和可靠性。
点云的读取根据原始数据类型的不同,设计了链接点云模型和点云文本数据两种读取方式,采用滑动条方式输入重采样的距离阈值,通过功能库中的显示坐标点节点( Point.ByCoordinates) 显示点云。具体节点链及程序结果如图 6 所示。
通过创建平面节点( PlanXY) 创建一个 xOy 平面,并偏移至点云底部,选用转化节点( Geometry. Translate) 进行切平面布置,如图 7 所示。
点云经过重采样后呈现无序和稀疏的状态,切平面上可能存在无点或少点附着的情况,因此对切平面上下阈值范围内的点进行投影求交。选 用 Dynamo 节点库中的通过对角 点建立方体节点 ( Cuboid.ByCorners) 创建点云包围盒,计算面密度作为阈值,如图 8( a) 所示。创建阈值包围盒,通过包围盒判别节点( BoundingBox. Contain) 判别盒内点集,如图 8( b) 所示。再启用叉积计算上盒与下盒点集的直线长,取每个点的连缀最短值为上下盒点对匹配关键码,匹配后的点对按式( 3) 计算切平面投影点,得到切面点云,如图 8( c) 所示。
切面点集有序化通过自定义节点实现,以循环语句判别点的归属表,选用 Dynamo 平台中的通过控制点拟合曲线的节点( NurbsCurve.ByControlPoints) 拟合切面点,得到闭合的截面曲线。通过输入横截面闭合曲线放样创建实体,该功能由放样创建实体节点 ( Solid.ByLoft) 实现,如图 9( a) 所示。
通过 属 性 设 置 及 输 出 节 点 ( Springs.FamilyInstance.ByGeometry) 为模型赋予材质,选择族类别,设置名称等属性性质。此节点能自动调用Revit 软件中的材质库和族库,对于如古建中的屋脊,吻兽等构件可先在 Revit 中创建相应族类别名称和路径,在 Dynamo 中即可选择该类别。对石墩进行属性设置,在该节点的输入端选择石墩的实体类别为“常规模型”,材料为“花岗岩”,在 Revit 中得到如图 9( b) 所示的实体模型。增加切面数量,将得到更精细的实体模型,石墩底部增加切面后细节表示更详细,一般在形体复杂或突变的位置可增加切面数量,规则位置处可减少切面数量。模型同步导入 Revit 中,并保存为标准格式,不仅能通过 Revit 软件中的编辑族命令进行二次编辑或改造,还能导入相应的应用软件使用。
4 结论
利用点云构建 BIM 模型能有效利用实时采集信息,扩展建模途径,提高建模效率。通过研究得到以下结论:
( 1) 以照片扫描方式获取的点云为素材,在 Dynamo 平台构建了点云显示、简化、切片、投影和建模的节点链,实现了点云到切面轮廓到模型的自动化建设,为表面形态复杂且无规则变化的构件提供了一种有效的自动化建模方法。
( 2) 在 Dynamo 平台链接 Revit 属性库和定义切面数,能获得不同属性和精细度的建筑信息模型,为后续模型应用提供标准模型格式和信息数据。
( 3) 节点链设置为通用的样板文件,可为不同点云数据实时调用,提高建模效率。为存量古建保护和既有建筑维护提供有效的实时信息数据。