宋 安
(西南交通大學建筑與設計學院,四川 成都 611730)
形狀文法誕生于20世紀70年代[1],它在本質上類似于一種符號重寫系統,但計算過程中的執行對象不是零維且離散的“符號”,而是多維且連續的“形狀”。在表現上,形狀規則是它的主體,由“左形狀(LHS)→右形狀(RHS)”形式構成,表示從一個初始形狀中找到LHS,并替換為RHS。它的規則簡單易懂,但卻能利用“形狀”的特殊性質構成相對復雜的設計[2](見圖1)。形狀文法既能夠作為一種獨立的形式化分析和設計工具,生成具備風格一致性或創意性的設計,也能集成在一個復雜設計系統中,用于前期的概念推敲或后期的模型生成,并被廣泛應用于建筑、藝術、工業等領域。

但令人遺憾的是,該方法大多活躍于學術界而鮮少被應用于真實的建筑設計活動中。究其原因有二:其一在于缺乏足夠健壯的形狀文法解釋器,使其難以充分在CAD環境中發揮全部潛力;再者,形狀文法本身僅僅具備形狀生成的能力而缺乏評估和探索等機制,而設計探索階段是建筑師思維過程中的重要一環[3],通常很難依靠固定的規則來生成適應復雜環境的建筑方案。
解釋器的開發一般涉及形狀在計算機中的數據表征形式與形狀識別算法的開發,通常依賴于專業程序員的努力。建筑師則可通過設計一個更為完整的算法框架,將形狀文法嵌入其中并與其他方法模塊相互配合,完善其生成、評估、探索設計的能力。而后者則是本文將要討論的問題,借此機會提出了一個以形狀文法為核心的建筑設計算法框架(下文簡稱“框架”),并探討了其開發與實現的初步思路。
提出的初步框架以平面較為簡單的大量性建筑為研究載體,可以是鄉村住宅或單元公寓等等。一般情況下,這類建筑的縱向空間復雜度較低,可由平面的特征與指標來作為建筑整體的評判依據。為了提高生成以及遍歷方案的速度,將二維平面與三維模型的生成進行分離,在得到合理的二維解后再去形成相應的三維模型。總的來說,框架由形狀生成(shape generation)、設計探索(design exploration)和三維模型生成(3D model generation)三大模塊組成(如圖2所示)。

在初次應用形狀文法進行形狀生成之前,開發對應問題的語法及其規則一定是首要任務,它為框架提供了起始的輸入數據。回顧幾十年來的語法實踐,可以將開發具體語法的思路歸納為三個步驟:原始語料的搜集與歸納,規則模式與策略的選擇以及形狀規則的進一步歸納與轉換。
一個具體語法的主要構成是形狀規則,而形狀規則由基本形狀組成,即所謂的詞匯或語料。搜集語料的任務便是設計知識獲取的過程,一般能夠通過三種途徑獲取相關的知識[4]:
1)開發設計理論;
2)從成功設計師那里獲取知識或是他們設計對象時的實踐經驗;
3)分析特定領域中的現有對象。
第一種方式顯然是最為困難的,但也暗示著可以從現有的設計理論中提取相關知識。第二種方式可以在設計工作室或公司的學習實踐或合作中獲得,Duarte在西扎的幫助下完成的馬拉蓋拉語法[5]就是此種方式的典型案例。第三種方式相對來說是最普遍且最易實現的,可以通過實地調研直接記錄與測繪數據,也可以通過文獻資料集或案例圖紙庫的查閱間接獲取數據。
知識的獲取相對來說并不困難,而更為重要的是如何使用這些知識,如何將它們轉換為形狀文法所需要的表達形式,這一過程也被稱為知識的提取。提取知識即從獲取的數據中歸納與提煉出設計所需要的那一部分,要理清所需為何,清晰明確的設計問題則是此項工作的基本前提。
亞歷山大處理設計問題的流程可以歸納為自頂向下分解問題,以及自底向上解決問題[6](見圖3)。用該方法解決問題的關鍵在于是否能夠創造出這種層級明確的樹狀圖解。通過對初始問題進行不同角度或程度地分解和抽象,可以得到不同的樹狀圖解。至此,只需從底層開始,將各個元素最常見的幾何構成與屬性設置為形狀,將對應的元素名稱設為其標簽,便能獲得所需的基本詞匯。獲得基本詞匯之后,還需掌握它們之間的空間組合關系,進而逐層向上,得到最終的設計目標。

規則模式是對設計過程的反映,語法呈現哪種規則模式取決于將設計問題分解成何種形式。Knight將現有語法實踐中的規則模式歸納三種類型[7]:
1)網格型(Grid):建筑存在明確的軸網關系,這種類型的建筑一般也從定義軸網開始。除帕拉迪奧語法外,日本茶室語法[8]、營造法式語法[9]也屬于這種類型。
2)疊加型(Addition):建筑沒有明確的軸網關系,通常以某個核心空間開始設計,其他空間依次添加到設計中,如草原式住宅語法[10]、安妮女王住宅語法[11]等。
3)細分型(Subdivision):通常以一條明確的邊界開始,逐層對內部進行劃分,如冰射線語法[12]、馬拉蓋拉語法等。
這三種典型的規則模式反映出自上而下和自下而上的設計方法,網格與細分屬于前者,疊加屬于后者。這些模式正是語法通用化的關鍵,同一種風格的建筑可以由不同的規則模式表征,同一規則模型也可以生成不同類型的建筑[13]。
從整個應用過程來看,利用形狀文法生成新設計的策略可以被歸納為以下四種[14]:
第一種策略即標準的分析型文法,起點是一組現有的設計,分析這些設計得到語法實例。語法生成的設計包括原始設計和新設計,就像帕拉迪奧語法一樣。因此僅通過分析型文法就有可能生成新穎的設計。但這些新設計將被限制在與原始設計相同的風格(見圖4(a))。
第二種策略與第一種策略的開始方式相同,但是為了進一步擴展設計的可能性并超越原來的風格,額外定義了規則轉換。這些規則轉換將原始語法的規則作為輸入,生成的新語法與新規則作為輸出。新語法產生了一套與原有設計有聯系,但風格不同的新設計(見圖4(b))。
第三種策略與第二種策略相似。它們有相同的出發點。然而,規則轉換不是定義于原有語法,而是直接作用于原有語法生成的設計。換句話說,不是定義規則轉換,而是定義轉換規則。當采取這種策略時,設計師正專注于某一位客戶設計一棟房子,而不是為所有潛在客戶設計一類房子(見圖4(c))。
第四種策略與上一種本質上相同。但是在流程上省略了開發原始語法的步驟,而是直接考慮如何將現存設計轉換成新設計的轉換語法。當原始設計沒有分析的必要時,可以采取這種策略(見圖4(d))。

到目前為止,已經解決了初始條件輸入中最為重要的形狀規則的開發問題。“環境配置”和“控制條件”的作用是對形狀的生成施加限制條件,避免產生太多無效解,可根據具體的實際需求進行添加。
形狀的生成可以借助現有的通用形狀文法解釋器或自建參數化模型,兩者的數據基礎都是上一步完成的形狀規則。使用通用解釋器,可以像在圖紙上繪制規則那樣定義形狀規則,它會在后臺將其自動編譯為包含“形狀識別”和“形狀替換”功能的函數。解釋器的作用相當于將原本類似“黑盒”的復雜程序以形狀規則的形式進行了可視化,并且還能夠可視化地修改它們,它會自動地將該函數進行更新。這些都是參數化模型所做不到的,參數化規則的創建只能依賴參考形狀規則的生成邏輯手動完成,且規則的修改也需要人為地調整其算法邏輯。
使用通用解釋器能夠簡單地實現規則的自動推演,而參數化模型想要實現該功能則十分困難。另外,使用通用解釋器來存儲形狀規則,可以更加容易地實現規則的通用化,因為組成這些規則的基礎數據結構是一致的,不同語法之間的規則能夠相互產生作用。而這一點用參數化模型同樣難以實現,它的規則不是由形狀組成,而是各不相同的功能模塊,只能實現接口之間的相互通信。
但是,通用解釋器的開發十分困難,只能依賴于專業的程序員,而諸如Grasshopper,Dynamo平臺下創建的參數化模型則被大多數設計師所熟悉,即使這僅意味著對形狀規則推演的模擬,但也能達到相同的設計結果,開發的過程也相對更加靈活,因此能夠被大多數設計師所接受。這時的形狀規則,則只是作為可視化的知識模型,在開發和設計過程中起著指導作用。
按需選擇通用解釋器或參數化模型其中一種,即可完成形狀的生成。但需要注意的是,框架暫未嵌入固定的通用解釋器以供形狀計算,而參數化模型也需根據實際案例進行開發,這里僅規定數據的接口,即它們都應輸出帶標簽的二維平面作為最終的生成結果。經過設計師篩選后,這些結果可以用來生成三維模型,或借助設計探索模塊執行進一步的優化。
設計的探索不是必須的,這種需求一般發生在設計師對某個復雜問題的求解方式沒有明確思路,或者說希望生成的解符合某個或某幾個既定的目標而沒有較好實現思路的情況下。相反,如果一個問題有清晰的解決思路,則應該使用更加清晰高效的算法,仍使用探索模式將會十分低效。
評估模塊的實現可以是顯式的,也可以是隱式的。顯式實現可以通過設定具體的常量、代數表達式或更為復雜的算法函數來進行判斷;而隱式實現則是指直接由設計師通過主觀視覺分析進行篩選,該模塊只表征一個評估的形式過程而不包含具體的內容。評估手段或評估函數的選擇并沒有固定的標準,主要取決于設計的目標以及是否需要進行設計探索。如果需要進行設計的探索,則評估模塊必須顯式的實現,因為探索模塊的執行依賴于評估函數的結果。
語法進化的前提是利用程序將規則自動化應用,即規則的自動推演,通常使用“形狀代碼(shape code)”來表達規則序列(規則序號的線性排列)[15],而規則序列則可以作為形狀文法生成的具體方案(表型)的表征形式,因此“shape code”即為基因型。將規則序列作為基因型不會對語法本身做出任何改進,它可以將結果限制在該語法所規定的解空間內,以確保設計在風格范圍內變化。但若需要增強其設計探索的能力,則可以對語法本身進行進化,即形狀規則的進化。這種情形下,則需要將組成規則的元素變為程序所需要的基因型,可以是形狀詞匯、形狀參數或是規則參數等等。規則參數也可以與規則序列同時交互,發生更加復雜的變化。
“形狀進化”即為設計結果的進一步優化。這種方式需要對設計結果進一步建模,將它的幾何或拓撲等屬性參數化,以便于將它們作為基因型進行交叉與變異。它的進一步生成與進化不會再與形狀文法有關的程序進行交互,有關它的具體操作步驟可參見其他應用遺傳算法進行平面進化的案例。雖然與形狀文法的算法邏輯或過程無關,但它仍然可以是框架中的重要一環,這也能證明各種算法模塊之間除可以直接配合,也可間接地利用共同的接口進行交互。
在所有的平面元素全部確定之后,可以開始進行三維模型的生成與映射。若是利用通用解釋器得到的帶標簽的二維平面,墻體等三維構件的生成最關鍵的是依賴對標簽的自動識別,而在參數化模型中則是依靠手動輸入正確的基線。只要不同風格的同類構件能夠識別同一個“基線”,它們之間就可以方便地進行模塊化替換。隨著需求的增加,不斷地繪制或導入新構件即可。關于模型映射,在grasshopper平臺上一個簡單的實現是以內置模塊“Box Mapping”與“Bounding Box”為核心的求解方法。該過程中最需要注意的點就是源形狀與目標形狀基準平面的設定,以保證模型之間的映射能夠適應不同的方向(見圖5)。

該框架可以有效完善基于形狀文法的設計流,使其更加適應于實際的設計場景。此外,該框架僅在一定程度上規定了系統的運行流程與交互接口,但沒有限定每個模塊的具體實現,它們是可被替換的,應該以具體研究載體的實際問題與需求為準來開發最合適的實現算法。當框架得到進一步實現和完善后,能夠具備對某個大量性建筑進行大規模定制化設計的潛力,以此來提高設計的質量與效率。