張韞錚 戚廣平
同濟(jì)大學(xué)建筑與城市規(guī)劃學(xué)院
面向?qū)ο笏枷胧乾F(xiàn)代計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的重要思想,認(rèn)為萬(wàn)事萬(wàn)物皆對(duì)象,對(duì)象是屬性及其操作的封裝體。面向?qū)ο笏枷雽⒕哂刑囟▽傩院头椒ǖ膫€(gè)體封裝成一個(gè)個(gè)“類(lèi)”,在使用時(shí),無(wú)需了解類(lèi)中方法的具體計(jì)算過(guò)程,只需通過(guò)輸入端對(duì)屬性進(jìn)行賦值并了解輸出端接口的使用即可。在建筑設(shè)計(jì)領(lǐng)域,建筑單體可看作由門(mén)、窗等類(lèi)構(gòu)成的整體,建筑群體可看作由若干建筑單體類(lèi)構(gòu)成的整體。基于上述組合關(guān)系,面向?qū)ο笏枷肟捎糜诮ㄖO(shè)計(jì)中,通過(guò)編寫(xiě)與封裝“類(lèi)”從而組合生成整體。
面向過(guò)程思想是程序設(shè)計(jì)的傳統(tǒng)思想,20世紀(jì)50年代中后期,由于編寫(xiě)大型程序時(shí)變量名在程序的不同部分容易發(fā)生沖突,語(yǔ)言設(shè)計(jì)者開(kāi)始嘗試將變量名封裝到特定的對(duì)象內(nèi)部,避免其與程序外部的同名變量發(fā)生沖突,面向?qū)ο螅∣bject Oriented,又簡(jiǎn)稱(chēng)為OO)思想開(kāi)始萌芽。20世紀(jì)90年代,面向?qū)ο笏枷氩辉倬窒抻趥鹘y(tǒng)的程序設(shè)計(jì)領(lǐng)域,逐漸被應(yīng)用于多方面,促進(jìn)了學(xué)科間的融合。
一切事物都可看作由若干“類(lèi)”組成的整體,使得以對(duì)象及類(lèi)為中心的思想具有普適性。同時(shí),面向?qū)ο笏枷刖哂幸韵聝?yōu)越性:首先,一個(gè)類(lèi)如同一個(gè)“黑箱”,具有特定屬性與方法的個(gè)體被封裝其中,調(diào)用時(shí)只需為類(lèi)的屬性賦值使其成為實(shí)例化的具體對(duì)象,而無(wú)需了解其內(nèi)部的具體方法;其次,被封裝的類(lèi)可以被應(yīng)用于多個(gè)不同的項(xiàng)目中,在編寫(xiě)多個(gè)項(xiàng)目代碼時(shí)不需要重復(fù)編寫(xiě)這些類(lèi)的代碼,提高了類(lèi)的可重用性。面向?qū)ο笏枷氲南鄳?yīng)代碼具有易于修改和維護(hù)的特點(diǎn),若需要為類(lèi)添加新的方法或?qū)傩裕恍栊薷钠鋬?nèi)部代碼,而其外部表現(xiàn)形式不變,呈現(xiàn)給使用者的是經(jīng)過(guò)修改的原有類(lèi),使用者可以方便地找到并調(diào)用它。
面向過(guò)程注重其內(nèi)部方法而不注重對(duì)象本身,面向?qū)ο笞⒅貙?duì)象本身而不注重其內(nèi)部方法。下面以圖1中簡(jiǎn)易的建筑為例,并運(yùn)用Rhino建模軟件中的Grasshopper插件進(jìn)行具體實(shí)現(xiàn),從而討論建筑設(shè)計(jì)中的面向過(guò)程與面向?qū)ο笏枷搿?/p>
面向過(guò)程是一種以過(guò)程為中心的編程思想,過(guò)程論認(rèn)為世界是由各個(gè)過(guò)程不斷推進(jìn)而形成的總體,過(guò)程中的每個(gè)步驟之間有嚴(yán)格的因果關(guān)系,需要明確解決問(wèn)題過(guò)程中的各個(gè)步驟并將其依次實(shí)現(xiàn)。Rhino建模軟件中的Grasshopper插件定義了多個(gè)電池模塊,每個(gè)電池代表一步操作,可以通過(guò)連接不同的電池,完成建筑的建模與生成。若想生成一個(gè)如圖1所示的建筑,需要實(shí)現(xiàn)繪制建筑體量地面、生成體量、繪制窗線、擠出窗框等一系列操作,連接出的Grasshopper電池圖如圖2所示。這種方式需要建筑師具備較強(qiáng)的建模邏輯,完成繪制矩形、擠出平面等每一步細(xì)節(jié)操作,且建模面板較為復(fù)雜,具有較大的優(yōu)化空間。
面向?qū)ο笞⒅貙?duì)象主體本身,對(duì)象是程序中的基本模塊。對(duì)象論認(rèn)為世界由對(duì)象組成,在初始力的作用下,對(duì)象的交互促進(jìn)了世界的形成。整體由不同個(gè)體組成,個(gè)體的行為被弱化。在確定對(duì)象時(shí),要求各對(duì)象間的耦合度盡可能低,這有助于系統(tǒng)中某一部分變化不致于影響與其無(wú)關(guān)的對(duì)象的變化。例如,建筑整體包括體量、門(mén)、窗三個(gè)基本類(lèi),它們之間相互關(guān)聯(lián)程度低,基本能夠獨(dú)立變化,可以利用Grasshopper中的Python語(yǔ)言將這些類(lèi)分別封裝成電池,只留下類(lèi)的基本屬性作為輸入端,通過(guò)具體的賦值使類(lèi)被實(shí)例化為具有特定尺寸的對(duì)象。
這種方法簡(jiǎn)化了建模面板,僅用三個(gè)代表不同構(gòu)件類(lèi)的Grasshopper電池就完成了建模過(guò)程,把繁雜的生成程序分別隱藏于相應(yīng)電池中(圖3),使建筑生成更加簡(jiǎn)潔明晰,并且使用者可以通過(guò)調(diào)節(jié)建筑體量長(zhǎng)度、寬度等輸入?yún)?shù)來(lái)改變建筑外觀,整個(gè)過(guò)程方便而高效。
在建筑設(shè)計(jì)領(lǐng)域,有學(xué)者開(kāi)始利用Python語(yǔ)言探索以面向?qū)ο蟮姆绞缴山ㄖ⒚娴牟灰?guī)則開(kāi)窗以及單體音樂(lè)廳模型,但該研究?jī)H針對(duì)簡(jiǎn)易建筑單體。也有學(xué)者通過(guò)類(lèi)型學(xué)面向?qū)ο蟮姆椒?,利用Java語(yǔ)言建立風(fēng)格化的門(mén)、窗等構(gòu)件庫(kù),并將其存儲(chǔ)于SketchUp中,但SketchUp對(duì)于參數(shù)的調(diào)節(jié)不如Grasshopper清晰直觀。目前建筑設(shè)計(jì)與生成中面向?qū)ο蟮奶剿鬏^缺乏,因此本研究希望通過(guò)Grasshopper中的Python語(yǔ)言(下文簡(jiǎn)稱(chēng)GhPython)對(duì)建筑單體與群體進(jìn)行基于面向?qū)ο笏枷氲挠?jì)算生成。
1 Grasshopper 生成的簡(jiǎn)易建筑
2 生成建筑的面向過(guò)程程序
華南地區(qū)的騎樓街是由不同南洋風(fēng)格的建筑構(gòu)成的街道,便于以“類(lèi)”進(jìn)行區(qū)分與辨析,當(dāng)代也有許多以南洋風(fēng)格為母題的街道設(shè)計(jì)與建設(shè),若利用面向?qū)ο笏枷肷扇舾娠L(fēng)格化建筑單體,便能夠在類(lèi)似風(fēng)格的項(xiàng)目設(shè)計(jì)中進(jìn)行類(lèi)的復(fù)用。因此在進(jìn)一步的面向?qū)ο笤O(shè)計(jì)生成研究中,選取了具有南洋風(fēng)格的碉樓與騎樓作為建筑設(shè)計(jì)原型,進(jìn)行對(duì)象的分類(lèi)與程序設(shè)計(jì)。
首先選取四種不同的碉樓與騎樓原型,對(duì)其予以適當(dāng)簡(jiǎn)化,忽略細(xì)部裝飾紋樣,從而降低模型復(fù)雜度,便于計(jì)算機(jī)運(yùn)行。以碉樓塔為例,編寫(xiě)建筑生成的代碼。UML語(yǔ)言是程序編寫(xiě)前用于需求分析與對(duì)象分類(lèi)的統(tǒng)一建模語(yǔ)言,有助于程序編寫(xiě)者明晰問(wèn)題中各個(gè)“類(lèi)”的組成關(guān)系。不同編寫(xiě)者分析同一問(wèn)題時(shí)可能得出不同的分類(lèi)結(jié)果,在進(jìn)行編程前首先要運(yùn)用UML語(yǔ)言進(jìn)行面向?qū)ο蟮姆治?,明確組成建筑的各個(gè)對(duì)象以及各對(duì)象包含的屬性。在此例中,塔可看作由主體建筑體量、門(mén)、窗、塔頂四個(gè)類(lèi)組成的,每個(gè)類(lèi)包含不同的屬性,如主體建筑體量的屬性有長(zhǎng)度、寬度、高度等,得出圖5所示的架構(gòu)圖。
根據(jù)UML類(lèi)圖的架構(gòu),在GhPython中分別對(duì)主體建筑的體量、窗、門(mén)、塔頂進(jìn)行代碼編寫(xiě),通過(guò)封裝屏蔽了繁雜的代碼細(xì)節(jié)(圖6)。
各構(gòu)件類(lèi)的外觀及構(gòu)件數(shù)量隨輸入端數(shù)字的改變而變化,且各構(gòu)件類(lèi)相對(duì)獨(dú)立,對(duì)象之間無(wú)相互影響。圖7展示了不同的輸入端賦值導(dǎo)致的建筑單體外觀變化,通過(guò)改變輸入端參數(shù)可以改變構(gòu)件的長(zhǎng)、寬等尺寸。從圖中可以看出,生成特定構(gòu)件的畫(huà)線、擠出等操作被編碼于構(gòu)件類(lèi)內(nèi)部,使用時(shí)只需拖動(dòng)滑塊調(diào)節(jié)參數(shù)而無(wú)需了解其內(nèi)部的具體計(jì)算過(guò)程,方便設(shè)計(jì)與生成。
類(lèi)似地,對(duì)其他三種形式的騎樓進(jìn)行構(gòu)件對(duì)象確定與代碼編寫(xiě)。雖然各建筑原型都具有長(zhǎng)、寬、高等參數(shù),但由于它們被定義在不同的類(lèi)中,彼此之間不會(huì)產(chǎn)生沖突,最終生成建筑形體以及相應(yīng)Grasshopper電池圖(圖8)。
3 建筑的生成程序
4 赤坎古鎮(zhèn)建筑與街道
5 塔的UML 架構(gòu)圖
6 塔及相應(yīng)Grasshopper 電池圖
7 輸入端變化及塔對(duì)應(yīng)外觀變化
需要注意的是,組成建筑單體的各個(gè)類(lèi)劃分方式并不唯一,單體既可以看作是由門(mén)、窗、建筑體量等基本類(lèi)組成,又可看作為兩級(jí)包含的結(jié)構(gòu),即單體包含一層、二層、三層等,每層又包含門(mén)、窗等基本構(gòu)件。在確定對(duì)象時(shí),需要根據(jù)具體需求采用不同的分類(lèi)方式。
街道由若干不同形式的建筑連接組成,這些組成街道的建筑單體就是街道的對(duì)象。我們可以確定若干種建筑形式,通過(guò)Random函數(shù)使不同的建筑形式隨機(jī)組合,生成多種街道建筑組合方案,供建筑師加以選擇。在本樣例中,組成街道的建筑形式包括塔、騎樓形式1、騎樓形式2、騎樓形式3,繪制出UML類(lèi)圖以確定項(xiàng)目架構(gòu)(圖9)。
該部分生成程序希望完成以下任務(wù):繪制一條街道線,不同形式的建筑自動(dòng)沿街道線排布并隨機(jī)組合,每次運(yùn)行得到不同的排布結(jié)果。將實(shí)現(xiàn)上述步驟的代碼封裝到“街道”類(lèi)中,對(duì)象的輸入端包含不同建筑形式,即塔、騎樓形式1、騎樓形式2、騎樓形式3及街道線五個(gè)參數(shù)。在本例中,塔、騎樓形式1、騎樓形式2、騎樓形式3在街道中出現(xiàn)的概率分別是1/7、2/7、2/7、2/7,每計(jì)算一次便生成一種新的組合方案(圖10)。
街道包含塔等四種建筑單體類(lèi),各種建筑單體又包含門(mén)、窗、建筑體量等基本構(gòu)件類(lèi)。根據(jù)這兩級(jí)包含關(guān)系,可以生成多樣化的街道空間與建筑對(duì)象,為設(shè)計(jì)提供多種可能性。
本研究結(jié)合傳統(tǒng)建筑原型與計(jì)算性設(shè)計(jì)方法,探討了基于面向?qū)ο笏枷氲娘L(fēng)格化建筑及街道空間生成方法,提出了一種具有可行性的建筑設(shè)計(jì)工作流。通過(guò)本研究,可得出如下結(jié)論。
第一,面向?qū)ο笏枷胍詫?duì)象與類(lèi)為中心,對(duì)生成特定類(lèi)的代碼進(jìn)行封裝的方法能有效隱藏對(duì)使用者而言不重要的內(nèi)容,只需調(diào)節(jié)輸入端參數(shù)生成輸出端的對(duì)象實(shí)例即可。在運(yùn)用GhPython生成建筑時(shí),不要求每位使用者都會(huì)編寫(xiě)程序,使用者只需了解調(diào)節(jié)參數(shù)滑塊導(dǎo)致的“類(lèi)”的外觀變化。同時(shí),若類(lèi)內(nèi)部生成邏輯需要調(diào)整,可以直接對(duì)內(nèi)部代碼進(jìn)行改寫(xiě),修改后呈現(xiàn)的輸入輸出端基本保持不變,便于使用。
第二,對(duì)象的分類(lèi)與程序編寫(xiě)與建筑學(xué)中的類(lèi)型學(xué)方法有異曲同工之妙,類(lèi)的可重復(fù)利用性為建筑構(gòu)件數(shù)據(jù)庫(kù)的編寫(xiě)與創(chuàng)建提供了有利依據(jù)。例如,中國(guó)古建筑屋頂可分為歇山頂、硬山頂、廡殿頂?shù)热舾深?lèi),可編寫(xiě)相應(yīng)屋頂類(lèi)的生成程序,保存于建筑構(gòu)件數(shù)據(jù)庫(kù)中,需要使用時(shí)調(diào)用特定類(lèi),并通過(guò)調(diào)節(jié)參數(shù)確定需要的構(gòu)件外觀尺寸及數(shù)量。這種分類(lèi)方法在相似風(fēng)格的建筑生成中具有較高的可復(fù)用性,在建筑設(shè)計(jì)領(lǐng)域有較廣闊的應(yīng)用前景。
本研究的街道建筑生成程序尚有許多可優(yōu)化之處,生成各個(gè)類(lèi)的代碼可以進(jìn)行簡(jiǎn)化,從而提高運(yùn)行效率。在進(jìn)一步的研究當(dāng)中可以考慮加強(qiáng)事件響應(yīng)機(jī)制,使組成建筑的各個(gè)對(duì)象之間具有聯(lián)動(dòng)性,并且各對(duì)象的可變參數(shù)可根據(jù)建筑組織模式的不同重新定義。同時(shí)也可考慮加入光、熱、風(fēng)等環(huán)境影響參數(shù),使環(huán)境性能影響建筑生成。目前,面向?qū)ο蟮慕ㄖ煞椒▽?duì)標(biāo)準(zhǔn)化的建筑生成較有效且具有較高的可復(fù)用性,而異形建筑由于生成邏輯不同,無(wú)法歸納出統(tǒng)一的代碼邏輯與包含對(duì)象。因此,面向?qū)ο笏枷雽?duì)于異形建筑的適應(yīng)性尚有待探討。
8 三種騎樓形式及相應(yīng)Grasshopper 電池圖
9 街道的UML 架構(gòu)圖
10 街道建筑的不同組合方案
圖片來(lái)源
圖4 來(lái)源于網(wǎng)絡(luò);其余圖片均由作者自繪。