對藝術工作者而言,談到創意寫碼(Creative coding)與生成藝術(Generative art),是新的創作方向,對程式設計者來說,更是個用設計展現設計的心智活動。

程式設計與藝術工作的對話

想當初,純粹只因為在運用滑鼠建模上是個苦手,難以用這類建模軟體來表現對模型的想法,才使用OpenSCAD這個軟體,以程式碼來描述模型。畢竟使用程式碼敘事,才是程式設計者擅長之事,由於程式設計適合描述具規律的模型,而這類模型往往與數學有關,不知不覺間我自己累積下來的作品,多半參雜著數學的內涵與美感。

沒想到,因為這份數學上的美感,多年後帶來了機會,這要感謝嘉義大學應用數學系嚴志弘老師的邀請,讓這些作品能成為國立自然科學博物館「玩藝數」展覽的一部份。

雖然我總說自己真正的作品應該是程式碼,然而與嚴老師討論需要哪些展出作品的過程中,才發覺透過視覺甚至是3D列印後成為實體的觸覺,對於看不到、不理解程式碼或數學的觀眾來說,這些都是不可或缺的一部份。

在提供作品的過程中,也有幸與公共藝術創作者吳寬瀛老師暢談了整個下午,過程中,三人交流著自己創作的作品、方式、思路,我們領悟到,雖然彼此的交集是數學,然而各自運用的工具,會影響創作的過程與成品,而透過適當的交流與結合,竟能引導出以往沒切入過的角度。例如,我就從吳老師的CNC作品中,想到如何在OpenSCAD,以減法方式,創作出新的作品。

用程式碼來建模,就算是在程式設計領域中,在臺灣也很難找到能彼此交流的對象,不得不尋找國外的同好,於是,我才會將作品發表在國外社群網站,也因此在這個過程中,接觸過創意寫碼,以及生成藝術的概念,而且,兩者都會結合程式碼來展現創作。

其實,上述這些對於國外藝術工作者或程式設計者來說,可說是相當蓬勃的活動。

創意寫碼或生成藝術?

無論是創意寫碼或生成藝術,兩者其實都沒有涇渭分明的定義。

就創意寫碼來說,定義上最大的交集,就如維基百科在〈Creative coding〉條目所寫的:「它是一種程式設計,目的在於表現某個事物而不在於實現某些功能」。

從程式設計者的角度來舉例,就像你想到某個有趣的圖案或動畫,可以使用某個方式實現,於是,很快地寫了個程式,最後結果很酷很炫,把你心中所想的表現出來了,就這樣!

就這樣?是的!由於現今軟體越來越龐大,從學習程式設計的一開始,程式設計者就不斷地被教導著,必須這樣做、那樣做、遵守某些模式、架構、使用什麼工具……一堆有的沒的,目的是為了能控制程式碼的複雜度、促進開發者間的溝通與合作,這一切令程式設計不單只是程式設計了,我們可能也忘了程式碼的本質,是為了表達某些概念。

創意寫碼基本上不會考慮這些,胡亂寫個草稿,難以閱讀沒關係,效能不好也沒關係,能表達出心中的想法就好,因而也有開發者將創意寫碼視為一種方法論,在不需要那些限制的場合下,直接以不設限的方式實現想法又何妨。

我在用OpenSCAD表達模型時,一開始多半都是草稿,不會去考慮太多的東西,純粹就是尋找表達模型的規律或方式,至於整理程式碼或是抽取出可重用什麼的,往往都是另一個時間點上的另一個心智活動。

與創意寫碼的概念接近,生成藝術也是透過程式碼來表達,不過,更著重程式本身的自主性,可以在少部份或完全沒有互動的情況下,由程式自動創作藝術作品,最常見的是模擬自然生態、細胞自動機等。

而除了圖像、模型等的應用類型,目前也有能自動創作音樂的程式,這類都是生成藝術的實際例子,同樣是在完全自主下創作出來的作品,近來,更是興起了「程式本身是否能成為法律上保護的創作者?」之類的議題。

工程師和藝術家的工具

我使用OpenSCAD從事的活動,既是創意寫碼也是生成藝術,畢竟有機會在國立自然科學博物館展出作品,自許本身算是稍微跨到了藝術領域吧!就粗略的程式語言分類來說,OpenSCAD算是特定領域語言,從事創意寫碼或生成藝術,運用的語言或工具多半是針對特定領域而設計。

Processing是其中的代表,它是由MIT MediaLab的Casey Reas與Benjamin Fry開發,去除Java中無關視覺化的技術細節,目的是讓創作者能專注於視覺化表達本身,因此,與其將Processing看成是框架,不如說Processing就是個特定領域語言。

p5.js是Processing的JavaScript移植版,精神上與Processing是相同的,目的是更便於在網頁上展現創意寫碼的成果。

從程式開發角度來看,p5.js與Processing的作法是有很多問題的……,例如,Hacker News的〈P5.js: Processing for Today’s Web〉中,就有工程師好奇,為什麼p5.js會比D3.js、Three.js等更完備的程式庫好呢?

然而,從表達上來看,這其實沒什麼好擔心的,Processing、p5.js的程式碼,都稱為草稿(sketch),也就是這麼來的。對藝術工作者來說,這表示不用學習太多細節,就可以使用;而對於想嘗試視覺創作的程式設計者來說,這意味著,不用在意太多枝微末節,不用配置一堆有的沒的資源,就可以開始作畫。

對程式設計者而言,OpenSCAD、Processing或p5.js算是個淺嘗創意寫碼、生成藝術甜頭的工具,在嘗到甜頭之後,於是,就有了更進階發展的可能性,畢竟程式設計者更能掌握演算法,或更複雜的程式庫,來實現更高階的表達,因此,這類設計者也被稱為創意寫碼者(Creative Coder)。

例如〈Creative Coding創意+技術的世界〉介紹的Matt DesLauriers,作品就令人極為驚豔,而且,具有程式設計上的深度,也正如該文中寫到的「一直以來,工程師和藝術家之間是涇渭分明的」,但現在其實已被創意寫碼、生成藝術的概念改變了。

用設計來表現設計

程式設計是可傳承的心智活動,能從中探索不同設計者面對需求的想法與解決的思路,進而認識這世界如此多元,擁有各自迥然不同的思考模式,一直以來都是我的工作與最愛。

另一個我始終樂此不疲的活動,是將心中想法具體化,透過視覺甚至觸覺來傳遞,繪畫、積木、黏土等創作,也經常在我的生活中點綴;在接觸3D建模與列印後,偶然地動心起念,既然程式碼本身就是表現設計的方式,何不用程式碼來記錄建模的設計過程?

因此,用設計來表現設計,竟意外地為我開啟了另一扇門,跨入了截然不同的天地。

身為程式設計者的你,或許也可以試著認識、接觸創意寫碼與生成藝術之類的議題,試著用設計來表現設計,挖掘程式設計與其他領域結合之後更多的可能性!

專欄作者

熱門新聞

Advertisement