三维几何表示时 BIM 模型的重要基础。这篇文章主要阐述 BIM 中几何模型设计原则与基本思想。

1 BIM 场景下的几何建模

一个建筑信息模型的包含的的建筑规划与维护所需要的所有相关信息。三维形态的几何苗猪相比于传统的二维图纸具有巨大的有事:

  1. 可以用统一模型描述整个建筑项目,而不需要拆解成多个图框与子项,进而可以确保不同部分的图纸内容的一致性;但仅凭三维模型,尚不足与生成与现行规范相符合的图纸,模型中还需要更多的信息,例如建筑类型,材料等;
  2. 三维模型可以更好地排查方案规划中的建筑元素冲突情况;
  3. 更便捷的算量计算;
  4. 更好地服务于后续计算与仿真;
  5. 能够更便捷地生成效果图;

一般而已,衡量一个 BIM 建模工具的几何能力的核心要素是其使用的几何建模型核心的质量。目前使用最为广泛的几何工具包括了 ACIS 和 ParaSolid。

2 Solid Modeling

建模三维实心几何体的方法有两种不同的方向:

  1. Explicit Modeling,即显式模型,此种方法通常是直接描述几何体的表面来描述实心体本身。这类方法通常也被称为 BRep (Boundary Representation);
  2. Implicit Modeling,即隐式模型,此方法是通过描述构造过程来描述几何体本身。

这两种方法在 BIM 建模工具中都会使用到,且都是 IFC 标准的一部分。

2.1 Explicit Modeling

2.1.1 BRep

Boundary Representation 是最为广泛使用的三维几何描述模型。其核心思想是构造一系列边界元素的树状结构。通常这种树状结构包含了点 (Vertex)、线 (Edge)、面 (Face)、体 (Body) 等。每个元素都是由更底层的子元素来描述。这个树状结构代表了几何体的拓扑结构,如下图所示:

整个拓扑结构我们可以用一个图数据结构来表示,这个图数据结构被称为 vertex-edge-face graph,简称为 vef 图。

在拓扑结构的基础上,还需要增加几何维度信息来才能充分表示几何体。如果偶几何体只包含了直线和平面,则只需要顶点的几何坐标信息就可以充分表示几何体。但是如果几何体中包含了曲线和曲面,则需要更多的几何描述信息。

用来描述拓扑信息的数据结构通是多个变长列表。体用围合它的面来表示,面则用围合它的边来表示,每个边由其起点和终点来表示。不过这种简单的数据结构只适用于简单的,没有孔洞和开口的几何体。为了表示更加复杂的几何体,我们必须要扩展这一数据结构。

ACIS 的几何数据结构设计。

上图给出了 ACIS 使用的几何数据结构设计,ACIS 在多种 CAD 和 BIM 软件中得到应用。在这个数据结构中,Body 有若干个彼此不连通的 Lump 组成、Lump 则由若干个 Shell 来描述(因此可以描述孔洞和开口)。每个 Shell 由若干个 Faces 来表示。每个 Face 由一个或者多个 Loop 来表示。由于每个 Face 可以有多个 Loop,因此可以表示含孔的多边形。

上述模型的一个重要特点是 Loop 本身并不直接指向边,而是通过 CoEdge 这个中间媒介。图中的下半部分显示了几何数据可以如何同拓扑数据整合起来。

2.1.2 基于三角面片的几何表达

这种方法是对 BRep 方法的简化。通过牺牲一定程度的精确度,可以将曲面表示为一系列的三角形。当然,三角形越小表示就越精确。三角面片表达方式通常用来做可视化。除了精度问题,三角面片表示方法也有更多的存储空间需求;

三角面片表达方式的底层数据结构的组织形式为 Indexed Face Set,其中每个顶点的坐标被存储为有序列表,每个三角面片由其在列表中的索引下表来定义。这种方法可以避免存储冗余的点坐标信息。同时避免因计算误差导致几何错误(三角面片之间出现错位)。

2.2 Implicit Modeling

如前面论述过的,Implicit 建模方法的核心思量是记录几何体被狗砸偶读过程,因此 Implicit Modeling 也被称为 procedural methods。BIM 和 CAD 软件在实践过程中会对生成的几何体提取快照,从而降低每次加载时的计算时间。

2.2.1 Cosntructive Solid Geometry (CSG)

CSG 是一个经典的面向构造过程的几何模型。CSG 模型在表示几何体时会选择一些基础元素(被称为 primitves),如立方体,圆柱体,棱锥结合几何布尔运算(交、并、差)等来创建更为复杂的几何体。

CSG 的一个例子。

表达能力的相对受限使得 CSG 模型在 BIM 场景中基本不会单独使用。

2.2.2 挤出和旋转方法

很多 CAD 或者 BIM 工具提供了通过挤出和旋转操作来代构造三维几何体的操作方法,其操作过程通常是将一个二维图形(通常是一个闭合曲线)沿着三维曲线移动。如果移动的路径是直线,则这个操作被称为 Extrustion,如果是曲线。则被称为 Sweep。作为出发点的二维图形在移动的过程中其朝向可以根据行进方向改变,亦可以保持不变。

旋转操作的定义非常直接,就是将一个二维梯形沿着一个三维上的轴进行旋转。

Lofting 是一种特殊的变种操作。在这个操作中用户需要定义两个面,程序会基于差值方法建立二者之间的过程,并在这一过程中构造出立方体(见上图)。

2.3 两种方法的对比