有哪些關於 Python 在建築中的應用和教程?

最好有實例


謝邀 @hat600,談談體會。Python最近比較火啊,好像編程入門都不用學C++了大家直接上手Python,不過也確實方便。其實筆者感覺使用Rhino+Grasshopper+GH其它插件基本可以覆蓋參數化設計/數字建造的大部分方面,能用到Python的都是很少的內容了。受筆者的眼界所限,只談Rhino+Python好了。

Rhino+GH的特點是易上手,易理解;界面直觀;有大量輪子(插件)可以用。缺點是只能面向過程編程。而Python沒有編程基礎的話上手還有些困難,優點是靈活度高,可以面向對象編程。

對於Python語法,比如可以去Codecademy:Learn to code上學習,一個互動式在線平台。

對於RhinoPython,其實McNeel已經給出不少資料了:
Python scripting for Rhino and Grasshopper [McNeel Wiki]
其中提到的Designalyze,有視頻有源碼,可惜需翻牆。
這本RhinoPythonPrimer也有很多例子。
中文資料在Shaper3D有一些。戳:Rhino腳本與開發-Rhino(犀牛)中國技術支持與推廣中心

我其實比較常用GhPython | Grasshopper,使得Python代碼可以集成到Grasshopper里。這樣寫代碼時互動性強些,而且它可以方便的調用Grasshopper演算法。

以上是涉及編程的內容。掌握RhinoPython不僅需要了解Python語法,還需要對幾何的原理Nurbs和Mesh有深入理解。如果能精通RhinoPython的話,Rhino肯定也可以異常熟練了。

下面從CAD/CAM來談建築吧,編程可以輔助設計,比如創造形體,比如目標優化。可以輔助分析,比如分析光照視線通風等等。可以輔助建造,設計節點,設計加工刀路等等。

說到造型的話,algorithmic design這個網站還挺有意思,不少案例都是Python的代碼。目標優化(Optimization,或者叫數學規劃)也值得一書,計算機科學裡有很多搜索演算法用於此類問題。GH裡面Galapagos是個暴力優化器,Kangaroo能解決特定幾何問題,除此外有時Coding還是需要的。但在很多方面,其實都有插件了,沒太大必要用Python自己造輪子。比如設計加工刀路這件事,當然可以自己寫編譯器把幾何信息翻譯成GCODE,但是也是有RhinoCAM, Silkworm, KUKA|prc之類的GH插件,直接可以做到。當然,有時這些插件辦不到的事情,還就得自己Coding。

確實有些東西如果沒有相應插件的話,用GH很難做出來的,比如MultiAgent System,就必須自己寫class了。最後貼張圖,筆者用做過的小設計用RhinoPython建模和模擬的。這個用Grasshopper比較難所以選擇了用Python,兩百多行而已。


2016.02.18更新


最近在做一些computation和optimization的內容,發現grasshopper裡面的python奇慢無比,借google調查了一下,有些結論。

首先說Rhino,根據論壇上McNeel公司的人的說法:
(Does Rhino 5 use all 6 cores on 6 core processors?)

Rhino is not a "multi-threaded" application. It does split off a few minor processes to other cores but nothing major. That"s because modeling is a serial process. Modeling has to be done "in order".

所以RhinoSDK基本上不提供multi-thread的用法。
GH基於Rhino,按論壇上的說法也是基本上不支持multi-thread的。

那麼GH裡面的python是不是就沒辦法開多線程了呢?
理論上是可以的:
ghPython – New component and parallel modules

但是用沒有用呢,我是沒看過比較好的實例。
個人感覺原因是:

普通的geometric operation靠現在的CPU計算能力基本上是可以滿足的,最多等5min。所以剛需並不高。
確實需要並行計算的是更大型的計算量,比如optimization。GH自帶的galapagos, 還是第三方比如octopus或者goat這種優化解算器。而這些又都是打包好的模塊,無法在python裡面用上面文章裡面的並行計算模塊調用…… (所以python裡面的並行真的很雞肋啊)
單純的optimization又不需要依賴於Rhino平台,直接在Rhino外面操作即可。

那是不是設計geometry的optimization就沒辦法做了呢?
其實不是的,雖然目前沒有見到特別好的解決方案,之前做research的一個組用的方法是:
在Rhino外面操作,然後把geometry通過obj導入回來,或者實時傳遞點坐標在Rhino裡面重建Mesh。

最後,我同時在嘗試遷移至Dynamo平台。
——————————————————————————————

原答案:
一堆感謝不點讚,你們這些壞人!
———————————————

正式答題。這應該是我在知乎上第一個涉及專業相關的問題,慢慢答。

(其實昨日看成在建築方面的「應用」……一激動遂Mark之。剛才仔細一看是問「教程」……那麼敝人就兼顧著都說一點,簡單介紹一下這方面內容在建築中的前沿領域都在做什麼。)

首先,Python的語言教程其實很多,像 @馬逸東西 說的Codecademy。
另外還有Udacity和Coursera上面的。現在MOOC類課程很多,隨便找一下就有。側重點有些是語言本身的性質,有些偏應用。(Udacity作為工業界類MOOC,實用性非常強。)

個人還是首推自家學校在EdX上開的這門:
Introduction to Computer Science and Programming Using Python

其他的基本教程直接從@馬逸東西 的答案里找即可。

既然是建築相關,一般離不開Rhino。
下面來說一下Python和Rhino的關係。

Python其實有很多版本,Rhino因為是win平台起家而且用了很多.NET的內容,在python的選擇上自然也是依託.NET的IronPython。
所以,大家說的Rhino中的Python,其實就是IronPython。

這個在安裝Rhino的時候會安裝一個,也可以自己下載最新版本然後替換。

Rhino裡面的Python用法有二:其一為不藉助grasshopper的pythonscript,有簡單的IDE可以debug和step;其二為Grasshopper裡面的python component,只有一個寫script的小窗口,只能test,不能debug。(至於怎麼用external editor寫code,這又是另外一個故事了,暫且按下不表。)

Ghsshopper裡面的寫script的原生component有兩個,C#和VB,是David Rutten直接寫的,與GH和Rhino整合非常好。Python這貨,其實是個領養的娃娃。由於不會賣萌,初期很不受待見。後來修修補補才差不多,但還是有點不堪大用。

rhinoscriptsyntax和Rhino是兩套東西,一個用GUID,一個用實體的Geometry。這兩個娃什麼區別呢?GUID呢,全稱其實是globally unique identifier,可以理解為一個geometry的名字。就像你叫小明,你哥哥叫小萌,比你多個草字頭,代表不是一個人。但你們的媽媽可以一邊喊「小萌快回來吃飯啦」,一邊跑去揪著你的耳朵把你拎回家來。兩種操作,結果都是你們回來吃飯了。(誰讓媽媽喊你回來你不聽話,活該!)

用名字當然很簡單,省時省力,但有些人沒有名字,只能動手……於是就會出現兩種混用的情況。會很亂,也非常容易出錯。

另外就是如果和GH的component混用,GH自帶的數據結構處理起來也比較麻煩。一般的做法是全都flat過再接入。出來的也是list的數據類型。這樣對很多初學者來說,會一定程度上限制class的用法。我見過的即使是ETH內部人寫的script,也都是function為主,很少用class。

但是最麻煩的問題還不是這個。

由於GH其實是個圖形編程平台,其實大部分的建模都可以用GH的component本身解決。即使像「循環」這類問題,也有HoopSnake和Anemone可以一定程度上解決,只要你邏輯能理清。

所以最需要coding的問題是component解決不了而有沒有人開發相關插件的問題。這個在research裡面很常見。比如上學期上一門optimisation的課,裡面要實現一個Michell Truss 的參數化控制,於是就有了這個東西:

(另外半邊是Kramaba的優化,中間粉色的是Goat的optimiser,不重要。)
結果就是一個可以改變參數批量化產生各種Michell Truss的東西:

這還只是比較簡單的用法,整個script從構思到實現大概用時半天多。但真正複雜的項目一個是規模大,一個是用到的數學多。而作為一個好用的程序語言,最重要的一方面就是有足夠多的外接library提供各種函數可以用。

可python最重要的一個數學函數庫NumPy在IronPython里不能調用……不能調用……不能調用……(現在可以在x86的Rhino裡面用了,所以裝了x64版本Rhino的孩子們,再去裝一個吧 。O(∩_∩)O)於是當初就是各種問題,各種不好用。

C#就沒有這個問題,本身支持也好。GSD那邊MDes項目的Technology項目主要就是用C#,估計也跟其教授當初開始涉足這方面時候Python太挫有關……

############### 我是分割線 #############

但是,python由於其語言本身簡潔有力,很多好的特性,其發展是很有前景的。而且ETH的Gramazio Kohler Research (就是那個各種機械臂的dfab,現在併入國家出錢支持的NCCR。)以及Block Research Group里,用python的也不少。(我是不會告訴你們最出名的那個搭建磚墻的項目的原始code就是python寫的,見下。)

因為代碼量真的小很多……而且支持越來越完善。故大家現在依然在用。

但是……(對,「但是君」又來了……)他們大多數都是在用純的pythonscript,更有甚者因為是做結構優化和計算,只要輸出點陣文件即可,所以連rhino環境都不用。
比如這個算用Force Density算網格的(用Mathematica也可以實現,但Rhino裡面的python真的是不可以呢。):
The force density method ? BLOCK blog

關於Block Research Group和dfab在做什麼,各位自己看網站:
BLOCK Research Group
dfab | NCCR Digital Fabrication

瑞士這是在國家出錢做建造,美帝都望塵莫及,我們目前是真心是追不上啊……

這些是我目前了解的建築方面最前沿的應用。但是教程呢,是真心沒有的。出教程的都是已經成熟的內容,前沿research大家都在摸索,要教程難道要上帝視角么……

其他周邊方向,比如結構分析和計算,就和建築離得比較遠了。


至於其他領域應用,比如CAM之流,故事就很多了……@馬逸東西同學談的比較廣,有些細節和客觀事實有待推敲,但大體方向上問題不大。


P.S.
最後多說兩句。建築引入這套參數化思想和系統已經有10年有餘。開始都在專注與形式的複雜性,結果造出了很多結構奇葩的建築。現在已經進入一個可以把結構納入設計交互流程里來的時代,各種實時結構分析和優化軟體也如雨後春筍般出現。(其實也是因為computation ability提高的緣故。)

未來的發展肯定是具有物理特性的計算機模型。電腦里的建築也不再會是一個形式而已。個人覺得未來的建築師會越來越需要了解一定的結構知識。不一定會算,但要懂。

懂,你懂麼?(^_^)


國外有許多網站都有很棒的教程
下面有幾個推薦的

面向設計師的Python基礎教程 by 王大川
http://www.xuexiniu.com/thread-63124-1-1.html
清楚地講解python的基本指令與觀念

Plethora Project
http://www.plethora-project.com/education/2011/09/12/rhino-python-tutorials/
非常知名的網站

跟我讀 『RhinoPython 101』系列視頻教學
http://bbs.shaper3d.com/thread-22775-1-1.html
將Rhino Python官方文件以視頻方式講解

Ezio Blasetti
http://code.algorithmicdesign.net/following/posts
於UPenn 等知名大學任教的教授個人網站

digital [sub] stance
Posts about python on Digital [Sub]stance

Designalyze
http://designalyze.com/software/python


看到樓上好多回答 ,說明大家都挺感興趣。 python在編程語言中算比較年輕的, 但是由於跨平台能力非常強。 寄生於各個宿主裡面。 以前一般用javascript(rhino)t的地方或者MEL(maya裡面用的)或者VB (catia裡面)等等 都開始注入了python,更別提計算機領域裡面各種其他的應用甚至互聯網開發也都用起了python。

因此學習與掌握python對編程是非常有幫助的,而且確實也比較容易, 如樓上莫個樓主所說的可以用200多行完成一個小case。

除非你是想用可視化圖形話的編程語言比如grasshoper 之類。 如果你想學一門真正的計算機語言用於建築。 那麼用python是比較好的選擇。 尤其是對於計算機語言沒有任何基礎的學員。對於有編程基礎的學員我的建議是從java入手,比如processing之類的。

以上提到了三種語言,加上以前的javascript 是四種。

現在說說教程,我最近接觸了 rhino的python, 我讀的是這本: Python scripting for Rhino and Grasshopper [McNeel Wiki] 這是基於以前javascript的教程基層上改寫成python教程的。
另外maya的python我學的是 http://help.autodesk.com/view/MAYAUL/2015/ENU/?guid=Python_Python_in_Maya 也是以前MEL現在注入了python。

從我舉例來看,你就看出python如何強勢了。


另外在我自己的ikuku主頁上我也會寫一些關於計算機語言如何應用在建築裡面的例子。 不多,但是如果你們想跟我探討或者什麼的, 非常歡迎。 文章 |

馬海東
圖書 |

馬海東


有一個,叫《跟我一起讀RhinoPython101》有視頻和書籍可在網上下載,我正在學。 @貓無忌說的那個包瑞清博士寫的《學習python——做個有編程能力的設計師》也能學,是專註於景觀和規劃的,而且門檻有點高,沒有Python語言基礎看不懂的。
景觀用編程來做很合適的,因為他們要處理大量的數據,這些工作讓電腦來做就最好不過了。


FreeCAD,你搜一下就出來了.開源軟體,可以用Python編程繪圖建模,也可以用傳統的方法繪圖,除了有建築設計模式還有其他的模式.軟體可以下載教程和實例.

然而目前在實際工作中並沒有什麼鳥用.純娛樂向


撲通跪下了、現在建築師都來搶我們程序員的飯碗了么?


樓上的通通都給我讓開。這貓多人竟然一個都答不對,還好我讀書多。
這個剛好前段時間逛書店,讓我大吃一鯨,有個景觀的寫了幾大本書,嚇得我哦。
仔細一看,人家是一個博士,我瞬間覺得心安理得了。這幾本書如下:
《編程景觀》、《學習Python-做個有編程能力的設計師》、《ArcGIS下的Python編程》和《摺疊的程序》
-------------------------------------------------------------------------------------------------------------------
這裡是正兒八經的景觀專業的在搶程序員的飯碗案例,我大致翻了一下,代碼太多了。不想看,畢竟我是用c#的結構設計獅,專業不對口。


程序員代表來搶回飯碗了。我是CS專業,python沒問題,問題是不熟悉庫。在RH的GH上寫過一些程序,感覺GH還行,不過GH內插件缺少文檔,使用不方便,有時候覺得還不如自己寫一個插件。我沒看過樓上各位說的書,我猜大部分都是叫你怎麼把編程引入建築設計中?如果你和我一樣是CS的,我猜官方手冊和google基本能搞定。
最後吐槽以下,不覺得RH+GH跑起來很慢嗎?自己的設計掛在GH上,GH掛在RH上,RH還不能在伺服器上跑,沒有linux版本,稍微大一點的程序就要等很久。有人有在伺服器上跑GH的經驗嗎,求介紹?


推薦閱讀:

設計院的建築師與地產公司的建築師在工作上的區別是什麼?
如果你的弟弟/妹妹即將步入大學學習建築學,你會叮囑 ta 什麼?
玻璃幕牆起承重作用嗎?
為什麼建築 (architecture) 的劃分類別是純藝術 (fine art)?
學建築的女生找什麼樣男朋友比較好?

TAG:Python | 建築 | 建築設計 | Python入門 | 參數化設計 |