孫 皓, 鄧先農, 趙若桐
(湖北工業大學土木建筑與環境學院,湖北 武漢 430068)
中國古代木構建筑的構成有嚴密的生成邏輯,《營造法式》中有“凡構屋之制,皆以材為祖;材有八等,度屋之大小,因而用之[1]。”通過開間和進深以及材料模數等參數就能確定整個建筑的形體,這樣不僅能使建筑在建造初期可以得到控制,同時也能精確地對用材量進行計算。參數化設計(Parametric Design)也稱參變量化設計,即設計過程被參變量化,利用參變量來控制模型的生成和性質[2]。中國古建筑的模數化思維以及生成邏輯十分適合計算機參數化設計,因此可以利用參數化建模對古建筑進行復原,從而實現快速建模。
對于古建筑參數化相關研究,目前國內外主要集中于分析古建筑的各個構件從而建立參數化構件數據庫。熊芳芳利用VC#.NET開發界面,基于數據庫對北京四合院進行參數化建模,實現了參數化構件數據庫讀取和歸檔[3]。王茹通過研究古建筑形制化集成的特點,提出了以斗口模數十一等材為基礎模數,建立了一個古建筑常用3D構件庫,同時也開發了對應的可視化接口,為快速搭建古建筑模型奠定了基礎[4]。閆澤文提出了正向建立古建筑典型構件模型的方法,利用Revit平臺,以單翹單昂平身科斗拱為例,創建了該構件的三維BIM模型,為構建古建筑構件BIM族庫做出了貢獻[5]。孫衛新研究了明清古建筑的組成和構成方式,并對主要建筑構件進行了參數化建模研究,最終建立了完整的三維模型[6]。
綜上可見,目前大多研究主要集中于古建筑參數化構件的研究,沒有考慮其整體性,不考慮整體性的模型容易出現模型沖突等問題,本文從整體性考慮,通過研究古建筑的構造,以傳統懸山頂建筑為例,利用參數化工具建立參數化模型。
傳統建模技術稱之為模擬建模技術(Analogical Modeling),即每次修改模型都要對模型的幾何元素(點、線、面等)進行直接操作。這個技術操作方便,所見即所得,但是最大的缺點在于幾何元素相互獨立存在,導致了對其中一個對象或參數進行修改不會對其他對象產生影響,如果想對其反復修改則十分浪費時間。其次,對于完成度很高的模型,若再次進行較大的修改則十分費時費力,甚至等同于重新制作模型。
參數化設計是一種計算機輔助設計技術,它基于拓撲學思想,拓撲學(topology)是研究幾何圖形或空間在連續改變形狀后還能保持不變的一些性質的學科。拓撲思想起源于幾何學,最開始參數化設計用來解決對象的幾何形式問題,但是隨著技術發展,現在也可以用來解決一些非幾何問題。比如研究建筑功能與開窗形式的問題,若想改變建筑的功能,只需改變對應參數,其他被綁定的參數也會自動進行調整,從而改變開窗的形式。參數化設計的出現使得建筑設計行業可以真正專注于設計本身,通過調整參數,計算機可以實時反饋設計的結果,而不用花費大量時間重繪圖紙,從而將更多的精力放在推敲設計上。
參數化模型又稱為“關聯模型”(Associative Model),即模型之間由參數驅動產生關聯,從而實現聯動。參數化建模技術相比于模擬建模技術在某些方面更有優勢。首先,參數化模型利用數值參數來控制幾何元素,只需輸入對應的命令和參數就能對模型進行調整,模型越復雜,調整效率優勢越明顯。其次,參數化模型的位置約束也可參數化,將一個模型與其他模型利用參數進行關聯后,當變動初始模型的參數時,其他的關聯模型也隨之變化,修改的效率得到極大提升[7]。
懸山頂是中國古代建筑的一種屋頂樣式,其特點是懸山建筑兩山的檁頭伸出山墻之外,伸出山墻的檁用于支撐懸挑的屋面部分。因懸山頂建筑的前后檐和兩端都有懸挑部分,而得名懸山頂,圖1為懸山頂建筑。

圖1 懸山頂建筑
根據懸山頂的特點,建模思路可以自上而下來進行生成,也就是屋面-梁-柱的順序。依照這個順序,大體將建筑分為上下兩部分來進行制作,上層為屋面,下層包括梁和柱。
本文選用Grasshopper作為參數化建模平臺,設計思路是根據規則和尺寸要求確定每個構件的點位形成定位點模型,利用這些點位可以進行各種命令生成線或面或體塊。首先確定模型由哪些基本參數控制,再與其他構件的尺寸建立函數關系,從而實現聯動。經考慮,將以下尺寸參數作為基本參數:面闊K、進深S、椽子半徑r。確定了基本參數后,其他的構件尺寸均可以根據基本參數和一定的比例系數推算出來。先賦予三個基本參數初始值K=4.5 m、S=1.5 m、r=0.1 m。
首先確定平面定位點,考慮建筑為對稱結構,又因舉折生成邏輯需要,故在進深方向設置6個點位,以第六個點的連線所在的XZ平面為對稱平面,面闊方向設置為8個點位為七開間,點位如圖2所示。則建筑進深長度為5S,面闊總長度為7K。

圖2 平面定位點圖
確定控制點后,先從上層開始建模,上層建模難度主要在于舉折生成。舉折是中國古代建筑確定屋頂曲面曲度的方法,舉是指屋架的高度,稱為舉高(R),其大小根據建筑的總進深(B)和屋面材料來確定,建筑總進深為前后橑檐坊心之間的水平距離,在宋式建筑中,通常舉高與總進深之比為1/4~1/3,為了計算方便,本文取1/3。折是指屋面橫斷面坡度由若干折線組成,這是因為建造屋架時,各檁升高的幅度不一致,所以坡度并非一條直線,如圖3所示。

圖3 舉折設計圖


圖4 舉折參數模型
建立S與B和R相關的表達式后就能用參數S表示B和R,實現參數之間的關聯。H1、H2、H3也可以用S來表示,以H1為例:

根據建立的參數模型在Grasshopper里生成對應的模型。生成舉折僅需用到兩邊端點的點,利用移動、連線、分段等功能做出折點所在的位置,圖5為生成第一折的程序,以此類推可做出第二第三折。這些舉折點位十分重要,對屋面以及梁柱的生成也有定位的作用。

圖5 第一折生成程序
利用舉折點位可依次生成脊槫、上平槫、中平槫和下平槫。如圖6所示,槫的作用是固定和承托屋面的椽子,將屋面荷載傳遞至梁柱,是重要的承接構件。槫的生成相對簡單,如圖8第一步驟所示,只需先做出最頂部的脊槫后,再利用偏移命令將其復制并移動到指定的位置即可。槫的截面尺寸可以椽子半徑r為模數,這里取4r作為截面的長和寬。

圖6 構件詳圖
叉手和托腳也是重要構件之一,與脊槫在上端相交的斜桿稱為叉手,提供斜向支撐,其他斜桿稱為托腳。快速生成叉手和托腳可以使用Mesh Pipe電池,確定好初始和末尾點連成直線導入,再調整一下電池的其他參數即可生成一段叉手,再利用偏移將其移動到每個槫之間,使叉手和托腳與槫相交。
第三步生成椽子,椽子是屋面基層的最底層構件,垂直安放在檁木之上。首先引入槫頂點作為定位點,利用Cull Index電池分別去除收尾的數據,將兩組數據連接成線,同時引入分段電池將連線分段并設置一個整數變量使分段數參數化,用來控制椽子的排列密度。數量控制點確定后制作椽子實體,雖然椽子的方向與叉手是基本一致的,但為了避免模型重合,需將椽子沿垂直方向進行一定的偏移,偏移量設置為一個椽子半徑r,部分程序如圖7所示。椽子之上是一層屋頂面,利用椽子的定位點數據和法線方向數據生成面,再沿法線方向擠出一個厚度形成屋頂面,至此建筑屋面部分建模完成,如圖8所示。

圖7 椽子生成程序

圖8 屋面模型生成
最后是梁和柱的生成,其原理與生成槫的過程相似,利用移動命令對控制點進行偏移,統一生成面后擠出形成構件。生成檐柱和金柱時兩柱的高度不一致,為了用一個參數控制兩種柱高,將兩種柱的控制點投影到一個平面上,由控制點和投影點的距離來確定柱高,通過移動平面的高度控制兩種柱的高度。
屋面和梁柱完成后模型大體基本完成,對于懸山頂的特點,即屋面懸挑出山墻之外,有以下做法。利用List Item提取兩端的梁柱模型進行偏移,將偏移量參數化,源數據中兩端數據刪除,即可對山墻面進行參數化控制。因之前做的模型只為建筑的一半,最后加上鏡像命令即可完成模型的建立,如圖9所示。完成的參數化模型可以對任意參數進行調整得到想要的結果,比如調整開間進深的長度、柱的截面尺寸及高度、椽的半徑等,調整完成后將模型烘焙出來,導入到Blender中附上材質再渲染,如圖11所示。

圖9 梁柱模型生成

圖10 模型生成程序

圖11 模型渲染圖
通過研究《營造法式》,對其中的構件進行梳理,將其建造過程轉換為計算機語言,實現了懸山頂建筑模型的參數化,使抽象的古建筑構件術語具象化。通過調整不同的參數即可生成相應的模型,可以減少大量的重復性工作。因筆者水平和時間有限,本文只完成了懸山頂的主要結構部分的參數化,部分復雜構件如斗拱并未實現參數化,希望在未來進一步的研究下去。