袁连海
(成都理工大学 工程技术学院,四川 乐山 614007)
为满足三维数字城市建设的生产需要,快速建立大面积的三维模型[1-2]的技术研究日益受到重视。
传统的建模方式不具备坐标信息,不适合用于建立大规模的三维数字城市场景。而基于倾斜摄影[3]和LIDAR技术的三维立体模型建造[4],虽然自动化程度高、建造模型速度较快,但是设备昂贵、模型精细程度不高。
文中依托CityEngine平台[5],通过对建筑物的分析和对比,设计相应的三维模型的规则,通过CGA语言[6]能高效、自动、灵活及批量地生成三维模型。设计的规则复用程度高,极大简化了建模周期;通过对模型的分析,设计出具体的模型算法,可以灵活地实现复杂的三维模型;该平台能集成二维矢量数据,可以对二维矢量数据进行规则赋值,批量生成三维模型[7]。
面向三维建模的规则来实现三维建模,建模速度快,规则可重用性好,能够快速批量生成三维模型。其中的关键环节是研究各种建筑物、道路、绿化、地面和水面等地物的模型规则[8],程序编写规则进行自动化快速三维建模。
(1)现代建筑。
设计规则分为三个步骤,首先要根据导入的二维矢量数据,确定建筑模型的基本形状,根据高度,使用拉伸函数进行模型拉伸,得到建筑物的基本模型体;其次是对四周楼面进行分层的设计规则;最后是屋顶的组合。建筑物的四周都是不一样的,因此四周的面都需要不同的设计。以常见高层建筑物的结构来分析,除了第一层,其他的层样式大多相同,层高基本相同,窗户与窗户的规格大小,以及装饰物等属性基本相同。最底层的结构需要单独设计,对应的层高、窗户等都必须单独设计,而且要考虑建筑的大门等,具体如图1(a)所示。
设计规则[9]的思路是:首先确定对象的楼层数,然后确定其每一层的高度,根据层高信息先进行横向切割,如图1(b)所示;再根据每层所包含的属性(门、窗、装饰等)进行有效的纵向分割,如图1(c)所示;切片(Tile)的划分决定了代码的复用程度和高效快速生产模型的程度,因此,在组合切片时,尽量在一块Tile中包含更多的属性,还有一点就是注意同一层每块Tile中所包含的对象属性(门、窗、装饰物等属性)尽量一致,如图1(d)和(e)所示。有些建筑,最底层和最顶层比较特殊,或者是奇偶层不一样等等。但是面的设计规则思路一样。
图1 现代建筑物四周面设计规则
常见的屋顶有平面屋顶、带女儿墙的屋顶、四坡式屋顶、双坡式屋顶、单坡式屋顶等等。根据屋顶函数,可以实现不同形式的组合。
根据以上思路,对各个面进行规则设计,相同的建筑,可以批量生产三维模型。
(2)现代复杂建筑。
复杂建筑实现的关键是对建筑结构的分析以及各个区域间的划分。以一栋现代的小型别墅为对象,进行规则的设计。实现别墅模型,需要结合切分split函数、拉伸extrude函数、旋转函数、递归算法等。
别墅建筑是一个不规则的体,利用不规则体的方式来设计,势必增加了规则设计的难度。因此,在设计中,从二维的矢量图形开始设计,将矢量图形设计成一个矩形,对矩形的区域按别墅房屋的结构进行划分,如图2(a)所示。图中的各个编号表示不同的区域,1表示门的区域,2~6表示房间区域,9表示别墅的阳台,7、8、10表示空的部分,或者可以用作草坪的部分。
使用切分函数对划分的区域进行切分。对划分的区域进行面的拉伸,采用上述面的设计规则和屋顶的设计规则进行实现,大门和阳台使用切分函数、旋转函数、平移函数还有拉伸函数进行切割组合拉伸而成。楼梯是用递归算法递归而成。最终的效果如图2(b)所示。
图2 现代复杂建筑设计规则
(3)古代建筑。
古建筑结构分析方法如同现代建筑一样,都需要从四周开始往上至屋顶一步一步分析。但是古建筑中还有其内部的空间关系需要明确表达出来。
一般古建筑的典型结构表征就是对称性。分析其空间关系时考虑其对称性可以取一半来分析。古建筑内部侧墙相对于外部边缘向里缩进了一段距离。柱子的位置关系是存在于内部与外部之间的空间中。通过缩进的距离确定走廊与内部的空间位置关系,在Y轴方向上等量分割出柱子的空间位置,如图3(a)所示。
图3 古建筑设计规则
古建筑的屋顶设计的方法也有多种,可以在外部建模,通过替换函数进行替换导入,由于外部模型会产生很多的瓦片数据,增加了数据量,会影响计算机的运行速度。因此该设计中就使用CGA规则中的坡屋顶的方式来制作。单独坡屋顶并没有古建筑屋顶特有的层次感,使用了组合式的屋顶来表达古建筑的屋顶;采用了一个四坡式的屋顶加一个双坡式的屋顶组合,具体古建筑的实现效果如图3(b)所示。
(4)拱形桥的设计。
拱形桥是弧形结构。文中以拱形桥为例,研究如何通过设计和算法实现复杂的建筑结构。
首先在草图中绘制一个弧形,弧线其实可以看成由非常多的直线线段拼接而成,直线线段越短拼接出来的弧形越光滑,因此将草图中的弧形切分成了许多段,然后每一段看成一段直线,这样弧形拱桥的桥面就形成了,如图4所示。
图4 桥面设计
将切分出来的弧线或者说是线段那部分看作扇形的弧线所代表的扇形,如图4中线段AB所构成的扇形所示。将这些扇形拼接起来可以形成一个拱桥面,但这需要设计合适的旋转角度、坡度和弧线线段的长度。
拱形桥是对称的,因此可以分为两半,每段旋转的角度称为angle1;半桥所需要的线段的数目就是90°/angle1的值。还有一个坡度,其实就是最开始的那一段的旋转角度,称其为angle2;如图4所示,用N表示所需的线段AB的总数,计算公式为:
(1)
用C表示拱桥的总长度,用AB表示线段AB的长度,则计算公式为:
AB=C÷2÷cos(angle1)÷N×3÷2
(2)
从图4中得出A'B'与AB的位置关系:相对于AB,A'B'是往上平移了AB*sin(angle2)的距离,然后往右平移了AB*cos(angle2)的距离,最后B点(A'点)旋转了angle1角度。经过一次一次的递归,完成了拱桥桥面的建立。
面向规则的建模方法,类似于面向对象程序设计的方法,规则类似于程序中的类,明显的优点是规则的复用,复用可以快速地实现模型建模,提高规则效率。
(1)相似建筑的细节不同。
当两个建筑相似,只有部分细节不同时,可以通过改变部分细节的参数,而模型并不需要发生任何变化,相比传统建模就灵活许多。
如图5(a)所示的两个建筑,它们的整体结构基本一致,不同的地方是:墙面材质、窗户样式和装饰物样式。只需要在其规则中修改对应的对象参数代码即可实现,不需要重新编写新的规则。这样可以对规则进行重复利用,从而提高建模效率。
图5 规则复用
(2)建筑结构相似。
建筑结构相似[10]相对来说要复杂点,不是门、窗、装饰物等对象[11]的不同,而是结构上的一些不同,这样的建筑也可通过规则进行复用。
这类建筑有一个共性就是它们的建筑结构是相似[12]的,如图5(b)所示。这三个图可以看出一个是凹型,一个是凸型,另一个是L型。它们的共性是除了结构上的变化,其他都相似。这类建筑是通过改变其分布结构[13]从而改变其外形结构,在实现过程中,切分函数在平面上的不同部位的切分而实现的。因此,在规则中可以通过切分函数设置可变的长度属性变量参数来控制外形的结构设置。从而实现了一个规则的复用,实现多种不同的建筑。
在建模过程中,需要对建筑进行分析,发现其共性设计,其规则偏于重复利用[14],可以利用一个规则文件实现多个模型。充分利用规则的重复,可以极大地提高建模的效率[15]。
以某城市的一块商业区域作为研究对象,采用了CityEngine平台,利用了面向规则的CGA语言进行了规则设计和建模。通过二维矢量地图的导入,建筑模型的分析,规则的设计,多规则的代码复用,高效快速地实现了该区域的三维数字模型,利用平台中的渲染功能进行了渲染,实现的整体数字效果如图6所示。
图6 数字模型整体效果
从实现效果可以看出,该区域模型种类多,精细度较高,与二维矢量图结合紧密,无坐标偏差。附属建筑实现的效果较精细,而且实现的整体效果较好,证明了该方法高效可行。
下面在建模周期、精细程度、模型大小、编程性和自动化建模等方面分析对比了三种主流的建模软件:3dsMax、SketchUP和MaYa。
针对同样区域的数据,3dsMax和MaYa并不支持二维矢量地图,只能作为建模工具,需要在第三方平台进行整合,SketchUP需要插件才能支持。如果用10分为满分代表模型的精细度,在同一建筑下3dsMax和MaYa在建模的精细程度中居高,CityEngine与SketchUP稍微差点,CityEngine还要比SketchUP稍微高上一点,但算是比较精细;在模型大小方面,CityEngine约为150 kb,3dsMax做出的模型大小约为2 Mb;SketchUP约为600 kb;MaYa约为3 Mb。在可编程和自动化建模方面只有CityEngine平台支持。
综上所述,在数字城市高速发展的今天,城市模型的需求量是越来越大,3dsMax、SketchUP、MaYa等传统建模工具已经无法满足三维数字城市建模的需要。面临着建模周期长、效率较低、花费高、数据大、灵活性差等问题。基于CityEngine平台的面向规则的三维建模方法,可以依据二维数据中建筑物和设施的各种属性设置规则自动建模,灵活性好、扩展性强等特点,大大提高了建模效率。而且精度较高,数据量小,适合三维数据城市建设的需要。
文中研究的面向规则的三维建模技术,分析了现代建筑、古建筑以及拱桥的结构和特征,进行了模型规则设计实现了对应的三维模型,证明了该方法能实现各种三维模型的可行性。通过相似建筑和局部结构相似建筑的细节分析,充分利用复用的特点,通过代码复用完成建模,体现了高效快速建模的优点。通过具体区域数据的验证,实现的三维数字模型效果好,并与3dsMax、SketchUP和MaYa等主流的三维建模软件在建模周期、精细程度、模型大小、渲染效果、二维矢量地图的支持性和编程性等方面进行对比,得出该方法具有建设周期短、精细度较好、数据量小、操作简单、能与二维矢量地图数据无缝结合、编程性强以及能实现自动化批量建模等优点。完全满足了三维数字城市建模技术的需求,为三维建模技术提供了新的参考。