淺析建築生成程序化的過程和方法

這個話題的起因要從2016年的一次項目流標開始說起。隨著當時地產經濟的低迷,設計市場競爭加劇,不規範的投標項目也越來越多。不是每一個設計師都能接受自己的心血去賭博,也不是每一個方案都應該被改得面目全飛之後再去面對世人。我深知這些現實的客觀性,也深信長此以往並不能為建築師的職業宿命找到理想的出口。所以,我覺得應該做點什麼,嘗試做一些可能改變行業未來的東西。

2015年,一次實際投標方案
C+Z Studio 設計作品

託這個項目的福,我初略地寫了一套相對完整的立面生成演算法。雖然邏輯很簡單,但經過參數的控制可以把立面關係裏的一些細節比例推敲得相對舒適。以至於本來要改上一週的方案模型 在幾個小時以內就可以深化完成。當然,剩下的時間都用在了方案創作和演算法思考上,沒有了機械性的建模操作,對創新的思考就可以更純凈些。現如今越來越多的人開始用演算法來生成模型了,各種形式的建築只要可以理清它們的生成邏輯就都可以通過計算機演算法的方式快速實現。只是在這種工作模式的背後,我們不禁也會問自己:

建築方案真的有一天可以智能生成嗎?

帶著對這個方案的不捨,我又開始嘗試將它的生成演算法寫的更加簡潔並具有適應性。我覺得一個好的方案在遇見它真正的主人之前,不應該過早地夭折。它可以去迎合這個世界,同時也終將會找到自己的歸宿。所以與其埋葬掉這些靈感,還不如想想如何讓它們真的活起來。一切的生成都基於空間的變化,對於一種建築語法而言,只要它能夠依附於不同的空間,就可以在此基礎上演繹出自由的變化。至此,我做了這樣一個命題:是否可以把建築細節寫進參數模型演算法裏?以平面空間輪廓作為最根本的變數。這樣無輪空間發生怎樣的改變。演算法都會在這些平面輪廓線的基礎上為我們自動生成完整的建築模型。這也意味著,任何平面空間都可以通過這個演算法在幾分鐘之內生成建築全模。方案不再會被拋棄,而將會以更自由的姿態呈現給建築師。建築構思的創新也不再是服務於特定的某一種功能,而是可以不斷地根據人們不同的需求而改變。

基於演算法生成的新方案建築模型(1)
基於演算法生成的新方案建築模型(2)

試想一下,如果所有的方案變數都只是建築生成邏輯裏一個小小變數。我們的設計工作會變成什麼樣子?設計師只需要根據方案特點編寫適當的邏輯,其他不確定的因素都用變數的形式去和客戶和使用者對接。這樣所有的修改就可以在邏輯變數的調試過程中自動完成了,客戶也能第一時間得到它們想要的方案。當下的方案創作工作肩負著腦力、體力和耐力的多重工作負擔。是問我們在去扮演一個高速運轉的建模機器的同時,又如何能真正意義地為使用者提供出更有創意和舒適感的方案?所以這裡所提到的「參數化設計」不想去附和那些複雜、奇怪的生成,也不想多強調它能取代多少繁瑣的工作。它對設計師的意義在於它給予了我們去專註思考方案的時間,給予了我們反覆推演一 套設計方法的技能基石。

包豪斯的時代,機械將設計師的雙手從手工業中解放出來,至此宣佈匠人時代的結束。保留匠心的設計師們逐漸把注意力轉移到機械生產上,開始考慮如何將100把椅子的精華用機器生產 的方式注入給一把椅子,設計也在這個時間點得到 了本質的飛躍。而如今呢?設計技術的革新已經把這個行業又推回到了歷史的起點。而這一次會解放的是設計師的機械思考,將保留下的是更純凈和更有深度的創新。新一代的設計師需要考慮的是如何藉助計算機語言將100次相似的建築創作過程凝聚成給一套更加精彩、高效的建築生成邏輯。而這套邏輯演算法就可以像流水線生產椅子一樣,為不同的城市和需求演算出空間不同而風格相似的建築。


以下,相信大家更關心的是這個演算法背後的故事:

想要用通過演算法生成建築,其技術核心在於理清空間的生成流程。換而言之就是要分清邏輯關係的主次,有條理的搭建整個建築的參數關係骨架。優先找到最具控制性的主變數,以此為基礎逐步生成多層次的空間網格參照體系。這要這些參照體系準確的生成,接下來的建築構建就可以自由的和這些空間網格相互組合,形成我們需要的建築方案雛形。

空間形成的基礎參量可以是各種各樣的,這裡以最常用的矩形輪廓平層空間舉個例子。

已知的各樓層平面輪廓線

我們可以在Rhino中指定一個多層建築的樓板輪廓線框。然後通過Grasshopper自動生成一個建築的體量關係。當然這個基礎的線框可以是設計師感官設計的, 也可以是通過一些其他演算法來生成。隨著不同層高的樓板開始有一些自主的變化,整個建築的圍合空間也會跟隨上下樓板間投影面積的交集進行一些變形,時刻保證每層的圍合空間始終是被上下層樓板蓋死的。這個小細節就涉及到一些很有意思的邏輯演算法。

根據演算法生成簡單的立面模型
自由移動調整原有的樓板輪廓線
即時獲得新方案的立面模型

為了讓大家能多少感受到一些開發過程中的具體細節,以下列舉一段數據結構優化操作:

這套演算法需要自動地根據樓板層高來將高度接近的樓板定義為一組,這樣區分的目的是讓計算機能分清哪些是二層樓板,哪些是三層,只有這樣它才能順利地交集出二、三層之間的圍合空間。第一次起草這個邏輯的時候沒有多想,所以還比較繁瑣,需要一層層來拾取……

數據結構優化之前的演算法

但第二次用樹形數據梳理了一下就簡單了好多。而且可以做到樓層的自動識別,層高一樣的輪廓線會被分到一個樓層組裡。這樣其實每次生成的時候,只需要一次框選就可以了,不必再每層去拾取。其實很多時候,這種演算法優化工作會讓邏輯更清晰,操作也更簡單。

藉助樹形數據優化之後的演算法

第二步的邏輯主要是算圍合空間的輪廓,其實原本樹行數據在這裡分組是很喫虧的,因為要用到三級樹了…… 沒想到CrossRef這個一直坐冷板凳的運算器居然可以配合二級樹模擬三級樹的 運算規律。這其中的亮點,恐怕只有老玩家能夠體會,總之我在這一步也卡了很長時間才以外的發現了這個方法。不 過不要小看CrossRef這匹黑馬,三級樹的實現將會把GH的演算法邏輯深度代入下一個深度。這一點只有被二級樹困住過的玩家才能體會。

CrossRef三級樹用法

植入三級樹的數據結構是為了讓整個生成系統的邏輯適應範圍更寬闊。如果這個建築每層樓板都只是一塊完整板,那數據處理其實並不複雜,用二級樹就可以完成。但如果是同時處理多棟樓或是一層當中出現多個不連續的樓板,那這個邏輯的複雜程度就會翻倍,操作也會相對繁瑣。這個時候三級樹的出現就 會顛覆以往的數據結構思維,讓整個邏輯變得更加簡單。以下是二級樹和三級樹的對比,前者無法生成建築圍護輪廓,而後者可以輕鬆實現。

優化前的演算法無法同時計算多個建築樓板
CrossRef優化前的演算法
優化後的演算法可以同時計算多個建築樓板
CrossRef優化後的演算法

說到這裡一些朋友還是對三級樹沒有一個清晰的概念,接下來我用連線圖解的方式再為大家解釋一下。

各級樹的表達演算法

通常情況下我們對樹形數據的應用普遍是一級樹形結構。就是將數據列表分組後每組按順序對應地發生運算。

一級樹演示案例

二級樹呢,是在這個分組基礎之上,每組數據的內部有出現了更複雜的對應運算關係。因為在運算關係涉及到組組之間和對應組的內部兩個層級,所以稱這種運算關係為二級樹形結構。 這個數據結構已經可以處理我們現階段遇到的90%以上的數據問題,但也因此我們對數據結構的理解和應用已經被困在了這個層面上很長一段時間。其實GH未必不能處理更複雜的東西,只是我們對數據結構的理解一直停滯不前。

二級樹演示案例

那麼三級樹是什麼?它是在二級樹的基礎之上如何進行一部的分組運算邏輯。好比大組套小組這樣的關係如何實現更系統的運算。以往我們做到這一步思考的時候都會被卡住,因為GH對樹形數據的「傻瓜式優化」降低了樹的能力。這麼做降低很多玩家學習樹的門檻,但同時也定義了GH中樹的瓶頸,所以有一段日子很多老玩家也因此對GH產生了失望。如今終於發現了在二級樹基礎之上繼續拓展數據的結構的方法,隆重的為大家推薦CrossRef(交叉運算)。這個運算器很多新人在接觸Longestlist運演算法則的時候就聽說過,但因為它的功能用一級樹就可以實現所以一直被忽視。今天在這裡為它正身一下:CrossRef的真實作用是在原有數據結構的基礎之上進行下一級的交叉運算。原本是線型,下一級就是一級樹;原本是二級樹,下級就是三級。

三級樹演示案例(1)

數據結構的升級會把原本繁瑣的操作變得簡單,把原本不可能的演算法變為可能。但同理我們想創造這樣級別的數據結構也並非易事。從二級樹到三級數我們會明顯感受到腦容量的侷限。四 級樹是各什麼樣子更是目前無法想像的。大家都知道DNA是由四種鹼基混編成的一串序列,但就是這簡單的四個代碼排 列其中蘊含生命演算法邏輯至今都沒人可以破譯。可見隨著數據運算結構的提升,可帶來的運算結果是無法估量了。這裡特別提示大家植入CrossRef的運算過程 是對三級樹演算法的模擬,但GH仍舊無法保持或是輸出三級樹形結構,所以我們無論怎樣循環利用CrossRef都不可能把樹升到四級的,只是不斷地復刻三級樹的演算法而已。不過雖然僅僅只有這些,已經足夠我們去思考消化一陣子了。

三級樹演示案例(2)

回到我們的建築生成,三級樹把之間繁瑣的數據分流篩選簡化成了一條更簡潔、適應性廣的數據流。這和起初我們用樹形數據去優化線性數據邏輯的操作實際是一個道理。

三級樹優化之前的演算法
三級樹優化之後的演算法

清晰的體系邏輯是深化參數模型的基礎。有了這個優化後的空間體系,接下來的深化設計就輕鬆很多了。從空間基準線中分別找到建築元素的參考矢量,逐步生成樓板線、梁線、玻璃幕基準線等等。然後在此基礎上一一分組擬建這些元素體量。

模型進一步生成(1)
模型進一步生成(2)
模型進一步生成(3)

通過這樣的方式一點點地深化設計,我們的方案就可以在GH中一點點呈現。這是的我們如果還希望把這個風格套用到其他方案的話,其實就是重新選取一組新的線框就可以了。


以上演算法的第一階段可以在一分鐘內根據已知的空間輪廓線生成一組建築的概念方案全模。這些輪廓線是我們根據功能要求自行設計的,當然也可以用一些簡單的演算法邏輯去得到,從而實現一組建築形態的全自動生成。理想的情況下可以先根據項目已知條件得到各種各樣的空間輪廓線,再通過系統地比對篩選出最優解,然後套用某種風格的建築生成演算法一鍵生成,整個過程可以在一個不到30分鐘的會議上現場完成。

已知條件為各層平面輪廓線
演算法自動生成建築全模(1)

演算法自動生成建築全模(2)
演算法自動生成建築全模(3)

所以在不久的未來,很可能會出現這樣一羣參數化建築師,他們所創作的作品是一種可以生成建築的參數邏輯演算法。建築的空間和風格都可以通過計算機語言寫入其中成為定量,而留給客戶的是多個連繫功能需求的參數變數。使用者僅需選擇或輸入一定的功能參數就可以通過演算法的自行運算生成各自理想的設計產品。也許這聽起來有點不可思異,但能實現這種產品模式的技術確實已經存在很久了。

文章的最後,我想談談個人對計算機智能設計是否會取代職業建築師這個問題的一些理解。可能很多人會擔心智能化設計的發展會逐漸導致建築師丟掉飯碗,而我認為能代替創作思考的「人工智慧設計師」技術目前還遙遙無期。我們可以分析圍棋規律來編寫會下棋的機器人,初級的AI程序很早以前就有,下的好的機器人無非是演算法設定更全面,運算量更龐大而已,但這些都是人為擬定的規則,和創造活動不能同日而語。所以在未來計算機自動製圖取代人工製圖這是極有可能的事情,但對於創意性思維而言我本人看法並不樂觀,尤其是建築方面的創作,這裡包含了龐雜的社會科學,需要更高級別的意識形態纔有可能實現。當前,我們已經可以把創意的過程轉換成簡單的邏輯演算法讓計算機去執行並生成指定邏輯的建築方案,但要求計算機自己生成創意這本身還存在太多的技術壁壘。本章所展示的演算法思路,其中所有的思考都需要設計師的總結和轉譯,而在人工智慧技術達到理想設計思考深度之前,低智能的產品很可能會提前毀掉整個行業的技藝生態。就像工業時代來臨時對傳統手工業帶來的衝擊一樣,機械生產僅憑單一優勢就可以將當時的整個產品行業徹底洗牌。而大眾並不會關心匠人的雕刻技藝有多麼高超,以及那些只有匠心才能打造得出的文化內涵。所以如今的智能化設計也不可能代替建築師去思考,但這次的技術浪潮將對建築行業的基礎構架構成的衝擊已成定局。

在未來我們不能指望自己去跟計算機搶飯碗,但我們可以選擇去成為凌駕於這種模式之上的第二個包豪斯。所以期待各位設計大佬能多多關心些這方面數字設計技術的實踐。只有我們在大潮來臨之前先找到了弄潮的方法,我們才能在未來更好的去履行一個建築師的職業使命。這場變革已經是建築師所必修的第二次大學。


聲明:本文作者:Skywoolf,2018年發表於由中國建築工業出版的電子期刊《三叄》第一期,如有索引,請註明出處。

感謝閱讀!

推薦閱讀:

相關文章