面向规则的三维古城虚拟技术的研究

2019-05-16 08:22王星捷卫守林
计算机应用与软件 2019年5期
关键词:整平古建筑屋顶

王星捷 卫守林

1(核工业西南物理研究院 四川 成都 610041)2(成都理工大学工程技术学院 四川 乐山 614007)3(昆明理工大学信息工程与自动化学院 云南 昆明 650093)

0 引 言

随着三维虚拟技术的不断发展,面向规则的三维建模技术的应用越来越多,国内基于CityEngine的规则建模研究也不断深入,如文献[1-3]说明了如何运用CGA语法快速建模,还原场景真实度,但所建模型均为现代化建筑。

关于古建筑的研究上,刘媛等[4]介绍了如何构建古建筑模型,内容主要是屋顶如何编写,在门窗怎样设计上提出建设的方法,没有对屋体及分层的结构进行讲解。李昕娟等[5]描述了如何建立房屋整体,但缺乏门、窗等细节的讲解,在实现圆柱中,采用了外部模型的替换,说明对规则的研究只针对了矩形面的规则模型。何鸿杰等[6]对古城三维建模技术描述较少,只是大体讲解了建模的方法,没有进行细化研究,对于精细的模型采用的是3D MAX的制作方法。纵观国内三维建模技术的覆盖方面,目前基于CityEngine规则建模的研究方式在涉及古建筑建模方面相比于现代建筑较为稀少,所实现的技术方法都是常规的拉伸、平移、替换等规则模型的处理函数方法,复杂的模型都采用了外部模型替代,并没有采用旋转等方法实现不规则的模型,使用的地形几乎都是平面,缺乏三维地形的处理,也没有涉及到绿化、路灯的动态布局。

本文以阆中古城为研究对象,通过遥感影像、DEM获取地形和矢量数据。采用Delaunay三角剖分算法进行地形处理,采用三角网法对地形进行整平处理,采用CityEngine建模的规则语句,根据古建筑和古城的附属建筑的不同建筑的风格和几何形状特性,分析了结构形状,设计了规则语义算法,实现三维建模。针对绿化、路灯的分布,根据其动态分布的规律,设计了算法,自动批量地实现分布,实现阆中古城的三维虚拟平台。

1 系统技术思想

获取阆中古镇地区的遥感影像图,利用地形处理原理进行底图的制作与分离,首先在ArcGIS里面将其底图导入,做出相对应的规划和设计,再将规划好的类别进行分类型建立矢量数据,对不同的矢量数据添加属性。将矢量数据处理完毕后,将采集到的二维数据通过与栅格数据进行整平操作,最终导出需要的DEM数据。CityEngine与ArcGIS有很好的兼容性,所以将在ArcGIS里面处理好的栅格数据和矢量数据导入到CityEngine软件中。

中国古建筑住宅具有院落式布局,主要建筑物都在纵轴线上,次要建筑采取左右对称的方式[7],然后围墙和回廊组成院落周围,形成矩形庭院。阆中古城古建筑的建模思路是先进行总体建模,然后分块,最后分层,如图1所示。

图1 古建筑的建模流程

首先是对阶基的设计,阶基是整个房屋的底座,是整栋建筑的受力部分,它所发挥的建模作用是整体建筑该如何设计规划。由于中国古建筑具有礼制性[8],一般是以中轴线向纵深发展,左右对称,它的个体造型不突出,建筑重复率较高,所以在阶基平面上要依据中轴对称原理进行分割,然后进行分块建模,在造型一致的单体建筑上命名相同,使得建筑整体有对称效果,这也保证了古建筑重复率高的特点,又提高了建模效率。屋身规则的编写中,屋身的设计包括楼层拉伸高度、建筑层数、斗拱样式、每层门窗和墙体特点该如何展示,该部分是规则编写最繁琐的地方,也是区分其他建筑物的重要部分,涉及的函数、设计样式、命名名称较多,是规则进行优化的重要方面。其次是屋顶的建立,屋顶是古建筑最明显的特征,本文所研究的样式为悬山、歇山、重檐。

在CityEngine软件中利用CGA语言规则直接建模,结合几何算法,方便地通过旋转、偏移、拉伸等实现多种特殊效果的建筑和一些附属物的动态布局等,如动态地布局路灯、垃圾桶,改变植物的密度等,可以进行批量动态布局。

2 地形处理及整平

2.1 地形处理

在地形的生成中,有很多生成TIN的算法:经典的Delaunay算法、Delaunay三角网凸壳生成算法和Delaunay三角剖分算法等。本文对Delaunay三角剖分算法[9]改进后用于阆中古城的地形高程图TIN的创立,生成的TIN精度更高。

改进后的逐点插入算法的思想:将前期提取出来的信息中没有经过处理的点放在已经创建好的Delaunay三角网中,然后进行所在点与三角形的对比判断。如果该点已经在三角形的内部,而且都已经连接该点与三角形的每个顶点,则利用Delaunay三角剖分准则找出影响区,将影响区域里面的边,利用算法将影响区进行三角形的重建,一直重复该种算法,直到区域里面所包含的全部点都加入在最后的三角网里面。最后利用算法对该三角网进行优化操作。

操作步骤:

(1) 创立一个初始多边形,该三角形应该包括所有数据点,即凸包,然后在凸包中建造初始Delaunay三角网。

(2) 将前期提取到的数据点加入到三角网中。

(3) 利用算法搜索含有这个点的三角形,并将这个点和这个三角形的三个顶点相连,构成三个三角形。

(4) 利用改进后的Delaunay三角网剖分法,找出影响区域,并删除影响三角形的公共边,最后连接插入点与该三角形的全部顶点。

最后利用LOP算法从里到外更新一遍所有生成的三角形,并对三角网进行优化处理操作,处理效果如图2所示。

图2 地形处理效果

2.2 地形整平

阆中古城的地形的实现,最主要的是将数据转换为TIN模型。TIN与矢量数据的整平方法是利用截面法中形成三角形的原理,不断将三角形细微化,然后利用挖方填方原理,计算出该地需要进行填平整平操作还是挖方整平操作。实际最终是将高程数据通过连接字段使矢量数据具有高程,利用矢量数据对地形进行整平操作,最终使地形呈现平整的面,使在其上建立的建筑物、植被等不会产生倾斜与倒塌的效果。整平前后效果对比如图3所示。

(a) 地形整平后

(b) 地形整平前图3 地形整平前后效果

3 古建筑规则设计

CityEngine中的规则语言CGA[10]形状语法属于建筑设计编程语言的一种,定义为4种组件:形状、属性、操作及语法规则。其生成的建筑物模型,拥有高视觉质量以及几何细节的特点。

形状操作包括4种类型:

(1) 重复操作,在给定方向上重复操作几何形状。

(2) 范围操作,平移t、旋转r和缩放s。

(3) 分割操作,沿给定的x轴或y轴并设置分割尺寸进行分割。

(4) 组件分割操作,点、边、面的分割操作。

形状语法规则可以替换和修改形状,从平面开始,首先生成立体三维模型,再不断使用形状语法规则,逐步细化三维建筑模型形状,生成最终需要的形状。本文依据以上规则,进行规则算法代码设计,实现三维建模。

3.1 屋顶设计

古建筑建模的难度在于屋顶的设计,屋顶主要可分为双面坡、四面坡和歇山顶。

双面坡的规则语法为roofGable,四面坡的语法为roofHip,歇山顶是两者的结合体。语法的作用是快速把一个平面衍生出多个平面,对aslant所形成的面根据右手法则判断方向,进行平行于屋脊正脊方向的分割,对吻兽的存放位置进行预留,然后按垂直于正脊的方向进行分割。

而对于双面坡的平面衍生方式有两种,一是通过将三角形进行平移,从一端移动到另一端而形成的立体图形,所涉及的平移公式如下:

(1)

式中:x、y、z为起始点的坐标,x′、y′、z′为终点的坐标,m、n、p分别为起始点在x、y、z方向上的移动距离,双面坡屋顶生成示意图如图4(a)所示,是三角形从屋身顶部的一端移动到另一端,且只有一个方向上的移动,平移距离相同,即m=n=p=屋身长度。

第二种双面坡屋顶平面衍生方式为屋身顶部矩形向上逐步迭代完成,但由于屋顶在一个平面内的缩放矩阵易于求解,先运用式(1),得出竖直方向的距离矩阵,然后在平移后的平面上逐步缩放迭代,这也是四面坡屋顶面的衍生方式,迭代算法如下:

Xk+1=AXk+F

(2)

式中:k值为1,2,…,X为基础矩形顶点坐标的矩阵,F为平移矩阵,A缩放因子,所运用缩放原理如下:

(3)

式中:Tx、Ty、Tz为基础点在x、y、z方向上缩放比例因子,先向上平移矩形,如图4(b)屋顶生成平移示意图,得到平移矩阵,再通过缩放公式将平面向内圈缩放,如图4(c)屋顶生成缩放示意图由于此时竖直方向无改变,在式(3)中Tz=1,即p1=p0,得到缩放矩阵,最后运用迭代原理,k值不断增加,直到矩形变成一条直线。

(a) 三角形平移

(b) 向上平移

(c) 向内平移图4 屋顶生成示意图

歇山顶式的屋顶编写基本原理是:屋顶下部分使用四面坡语法,上部分使用双面坡语法。

3.2 门窗设计

门窗作为一个空间单元,是房屋的从属部分,它的建筑风格与主体房屋一致,彰显了其和谐性。在屋身编写时,运用分割函数按照需要设置的门的宽度将门的区域在中轴线位置留出,其余部分是墙体与窗户的设计空间。在门的位置运用分割函数,分出门槛与门,然后对其进行适宜的厚度处理,即拉伸函数的运用,这是对一般房屋门的规则编写方法。而对于房屋内部有一定样式设计的精细房屋门的制作而言,为了展示其内部结构与门的真实空间感,可以在运用分割函数时,将其分为两扇或三扇,然后将门进行适当的旋转操作。

在对平面进行分割时要确定该平面是以x轴,y轴,还是z轴组成,这关系到分割的起始方向,但一个立体图形都符合坐标系的右手法则,拇指代表x轴正方向,食指代表y轴正方向,中指代表z轴正方向。

图5为门窗分割效果图,拉伸后根据右手法则判定该面的分割竖直正方向为右下角向左,水平分割正方向为右下角向上。

图5 门窗分割效果图

3.3 分层设计

首先将基础面按右手法则确定出分割方向,将平面的四个角进行分割,运用式(1)把四个小正方形的四条边按距离公式原理向上拉伸,形成柱础与柱子,柱础高度t=2,柱子的高度T=9。图6(a)为柱子与柱础生成示意图。

四个小角之间的细小平面通过中轴对称原理进行分割,为建立撑拱需配合旋转公式,图中所示位置是绕z轴旋转,公式如下:

(4)

旋转角度θ=28°,再向上平移并拉伸,形成如图6(b)撑拱效果图。四周撑拱形成主要代码如下:

yizhu-->

s(′1+1,′1,′1+1)center(xz)

extrude(y,lougao)i(″gongyuan/post3.dae″)

yizhu1-->

extrude(y,lougao)comp(f){front:xiezhu1}

xiezhu1-->

split(y){~1:NIL|1.2:split(x){~1:NIL|0.05:xie1|~1:NIL}|1.5:NIL}

xie1-->

s(′1,′1+2.2,′1)r(28,0,0)extrude(-1.05)comp(f){all:xietu}

yizhu11-->

extrude(y,lougao)comp(f){back:xiezhu1}

yizhu2-->

extrude(y,lougao)comp(f){right:xiezhu1}

yizhu22-->

门推开了,进来一个穿深色军服的东洋人。我瞅了他一眼,倒吸一口凉气,不是的!这不是我的狼剩儿!这个人拉着张马脸,走到桌前,往漆盒里丢了个小牌牌,取下腰间的长刀搁在桌上。我回过神儿,伸出双手把他往门外使劲搡,一边大声叫:“伊藤!伊藤!我找伊藤!”

extrude(y,lougao)comp(f){left:xiezhu1}

在一层屋顶基础面通过式(2)向上平移柱子的高度,即n=T=9,运用矩形迭代的方式形成四面坡屋顶,将倾斜面按平行与正脊的方向分割,以便吻兽的建立。将horizontal形成的面进行异名复制,一个作为二层地板面,另一个作为楼层基础建立面,公式如下:

(5)

可以进行平面内的矩形缩放,由于该面是由x、y所构成的平面,其中z=z0×Tz可视为Tz=0,走廊形成示意图如图6(c)所示,是将x、y方向上的缩放量设置成小于0的数,使平面向内缩小,把四周围栏位置留出进行设计,Tx、Ty同时设置为0.8。

通过上述的设计思想,分层的进行编码实现,最终实现的古建筑效果如图6(d)所示。

(a) 柱子与柱础设计

(b) 撑拱设计

(d) 最终实现效果图6 古建筑分层设计实现过程

4 动态布局设计

4.1 绿化密度动态设计

绿化地区生成树木可以通过置换模型和散乱点的生成来实现,由扩展函数生成的树的类型和大小是相同的,并且树的数目是相同的。为了使树更逼真,可以使用fileRandom随机生成模型树,然后使用rand函数重新设计树的高度来创建不同的高度。一个地块内的树木模型的数量可以通过该地区树木的密度来获得。树密度变换包括伸长变换、缩放变换、旋转变换和剪切变换的复合,并用三列式矩阵表示,该矩阵将原坐标更换为新坐标。

(1) 将每点的纵坐标和横坐标相应增大(减小)至wy倍,增大(减小)到wx倍,得到的缩放变换的矩阵如下:

(6)

当wx=wy时为比例缩放,否则为拉伸变换。

(7)

通过树的平移,缩放等操作后,实现效果如图7所示。

(a) 原始树(b) 改变密度后图7 树的密度变换

4.2 位置动态布局

路灯、树、垃圾桶等附位置属模型的位置布局采用移动立方体法以及特殊的逐点插入法,相当于循环移动的方法,主要采用了递归逐点插入法的思想。

(1) 首先建立三角网,并求出已知点集的矩形包容矩形框(Xmin,Xmax,Ymin,Ymax),然后以对角线为基准将此矩形框拆分为两个初始三角形。

(2) 定位三角形:先从点集中选出一个目标,再在已经形成的三角网中找到含有这个目标点的三角形。

(3) 确定影响域:从包含这个目标点的三角形开始,基于记录的拓扑信息,再利用外接圆检测的方法来找出外接圆包含当前插入点的三角形集,三角形集的直径所在的外边界即是下个点的位置。然后依次对下个点进行相同操作,其中空外接圆检测按如下式所示。实现的效果如图8所示。

(8)

图8 路灯、树木动态布局效果

5 三维虚拟技术分析

三维建模技术已经非常成熟,常用软件建模的技术有3D MAX、SketchUP等三维建模软件。结合GIS技术的三维虚拟软件平台有SuperMap、MapGIS、CityEngine等。

3D MAX建模周期长、模型精度高、模型数据大;由于数据量大,许多GIS软件平台无法支持数据量较大的模型,不适合城市规模的建模,只适合小区域模型的展示。

SketchUP的建模方式制图效率低下,而且通过SketchUP当中的模型分析,发现场景中植物的表现效果很差,它的植物很多都是二维形式的,从俯视图看就是很薄的一片,不具有立体效果。在SketchUP中,由于建筑建模时是先把建筑部件创建完成,然后对所完成的建筑部件进行拼接才能将整个建筑对象完整地展示出来,这就导致当建筑层面过多或观看视角较远时,建筑就会出现破面现象,如图9所示。

图9 SketchUP中破面现象

在SuperMap和MapGIS建模过程过程中,对每种类型的建筑需单独建立图层,以方便对建筑推出高度的设置,而且对于它的贴图不像在本次设计中对每一面的贴图门窗单独分割。对建筑面一面整体贴图,不能显示出模型的精细度,对于复杂建筑需要导入外部模型进行场景优化,这样很容易出现贴图消失的情况。而且场景呈现时由于建筑拉伸没有立体厚度感,对于远处建筑群有一种半透明状态的视角感,出现如图10所示的贴图消失的情况。而且地形处理的效果差,真实度不高。许多精细的模型需要用外部三维软件建模后导入。导入的控制点是通过人工操作,必然会有一定偏差,这就导致最终模型不够精确。

图10 贴图消失情况

CityEngine将三维建模技术和三维虚拟技术融为一体,三维建模技术采用了灵活性好、复用性高的面向规则的三维建模语言实现。可以通过分析各种几何特性和几何形状算法,进行模型设计。减少了对外部三维软件的依赖,同时减少了模型的数据量,便于数据的加载和发布。在导入的原始矢量图中建模,位置精准。模型通过分层设计,对墙体、窗户、柱子等能精确控制,保证了模型的精度和真实度,同时也便于后期的维护。在处理树木、路灯、垃圾桶等模型时,通过算法可以实现等距的动态布局插入,不用进行人工的插入操作。对于规则相同的区域,可以通过规则批量生成模型,对于相似的建筑模型,门、窗、屋顶等规则进行复用,减化了整个建模的过程和周期。在建模前期需要对各种模型进行精确的分析,在后期维护的过程中只需对照代码进行调整,维护过程简便。采用面向规则三维虚拟技术实现的阆中古城虚拟平台展示效果如图11所示。

图11 阆中古城三维虚拟平台展示

6 结 语

本文采用了CityEngine基于面向规则的三维虚拟技术对阆中古城进行了虚拟平台的建设,研究了遥感影像数据制作地形数据的技术和地形整平技术,分析了古建筑的建筑结构、空间位置、几何形状、屋顶形状、门窗分布的特点,设计了几何特性的算法、平移和旋转的规则,完成了古建筑的建模。针对特殊形状的建筑如灯笼等,研究了旋转曲线以及旋转的过程,设计了规则算法。对于树木的密度、路灯等附属物的布局等,根据其变化的特性,设计了对应的算法,实现了动态的位置布局和树木密度的增减。在实现过程中,自动化程度高,相同的模型,通过统一的规则进行批量生成;相似的模型通过屋顶、门窗等局部部件规则的复用,得以快速实现。实现的三维虚拟系统精度高、数据量小、减少了对外部模型的依赖,便于后续的维护和修改。

本文采用的面向规则三维虚拟技术有一定的不足:(1) 在设计规则的前期,需要花大量的时间对建筑结构进行详细分析、分层找规则、分析几何特性、设计对应的算法;(2) 对于不规则的建筑或者其他模型,需要通过构造复杂的几何曲线和旋转规则,实现过程复杂。针对不足之处提出建议:(1) 复杂的建筑,由规则和不规则的形状构成。对于规则部分,可以用规则完成规则部,部分不规则的修饰模型可以用外部建模软件实现,采用替代函数进行替换,可以提高建模的速度。(2) 养成良好的编程风格,以面向对象的思想来设计规则,为了提高规则代码的复用率,将门窗、屋顶等部件单独写规则,便于相似建筑代码的复用。

基于CityEngine面向规则三维虚拟技术,虽然存在不足,但是在三维建模上有了技术性的突破,打破了传统的建模技术的思想,不依靠三维建模软件,不需要额外学习三维建模软件技术。通过对建筑结构的分析、形状的研究,用规则代码实现三维建模,让三维建模变得更灵活性、更智能化、更高的自动化程度、更强的维护性,在三维古镇、古城的建设中,有着极大的应用前景。

猜你喜欢
整平古建筑屋顶
借“光”生财的屋顶
沉管隧道碎石基床平台式整平船半漂浮插桩整平技术研究
现代建筑设计与古建筑设计的融合
港口码头工程中的抛石基床整平施工技术
屋顶屋
古建筑取名有什么讲究
深中通道再添科技利器国内最先进水下3D碎石整平清淤船正式开建
中国古建筑
深水基床整平及沉箱安装施工工艺探讨
屋顶的雪(外四首)