透過程式碼描述圖像,最終涉及演算法的表現,因此,有些人也將其稱為演算創作,對於我而言,自己從事演算創作,多年來雖然能透過Thingiverse、Twitter、Reddit等網站,與國外同好分享、討論演算創作的成果與議題,然而,由於不同語言之間的隔閣,總令我有種孤獨感,難有人能共同分享尋找靈感來源的樂趣,畢竟在臺灣玩這個的人不多。

這一兩年,拜NFT、AI作畫之類的話題所賜,情況開始有些不同,相關討論的熱度略有上升。事實上,從事演算創作總要寫點程式,然而,從事演算創作之人,不見得是熟稔程式設計領域之人,為了能讓各領域的人能從事演算創作,存在不少易於表述的工具,像是Processing、p5.js等。

易於表述的工具之後?

從程式人的角度看這些工具,實在是很簡單,任意地寫點程式草稿,弄點隨機、摻些顏色、加上簡單互動,就能完成乍看效果不錯的塗鴨,就像更早前「人人寫程式」聲量高漲的那幾年,寫點程式碼拉點畫面,就有個看似還行的App,不過,我總想問「然後呢?」由於沒有進一步的靈感來源,多數人就是失去了興致!

有了易於表述的工具,就能夠讓不同領域的人在演算創作時,更容易將各自領域的知識、經驗,藉此表達與組合。因為他們在各自的領域可能就有著各式的靈感來源,所以,他們繼續創作的動力,也就不僅止於莫名的隨機、顏色、簡單互動。

多年來,我經常問自己一些問題:「接下來要寫些什麼?下個靈感會是什麼?繼續創作的動力是什麼?身為熟稔程式設計領域的我,在演算創作方面的優勢是什麼?」面對某些表述的工具,我也會問一些問題:「這些工具可以做到什麼?別人用這些工具做出了什麼?這個工具裡的某個功能是怎麼實作出來的?」

別人做了些什麼?

我經常在Twitter(@caterpillar)轉推一些有趣的演算創作推文,來源除了Processing、p5.js、OpenSCAD官方帳號,有些是很早就前認識交流的OpenSCAD同好,在他們當中,有些是數學家,演算法作者、科學家。

例如Fernando Jerez(@ferjerez3d),早期熱衷於OpenSCAD,後來經常使用Processing、p5.js;Henry Segerman(@henryseg),他頭像上的極點投影模型是代表作之一;Robert Fathauer(@RobFathauerArt)擅長密鋪(Tessellation);Maxim Gumin(@ExUtumno)是波函數塌縮演算的作者;最有趣的是Cliff Pickover(@pickover),一個科普科學家、數學家和科幻小說作家。

從事演算創作之人,一定都聽過Daniel Shiffman(@shiffman),每次登場都活力十足的傢伙,他的YouTube(TheCodingTrain)是寶庫,特別是Coding Challenges系列,目前累積有170個以上的演算創作挑戰,偶而沒有靈感時,我就會到其中看看。

我會觀察p5.js的curve函式的原理是什麼,以及Three.js的多面體幾何資料是怎麼計算的,並且了解glMatrix程式庫的矩陣是怎麼實現的。

我也會在Google圖片搜尋裡,使用工具名稱作為關鍵字,例如:OpenSCAD、Processing、p5.js、Three.js等,或者以技術名稱作為關鍵字,例如WebGL、Shader,結合特定主題,例如Voronoi、maze等,看看能找到什麼有趣的圖片。

近來我較常逛的是OpenProcessing網站,它的Discover有著不錯的分類,像是Generative Art、Particles、Patterns、Shader等,裡面有著各式各樣的作品。

當然還有其他來源,能讓我知道別人做了些什麼,這很重要,因為有趣的作品會引發好奇心,進一步找到其中的關鍵字搜尋相關資料,有機會搞清楚作品中有哪些元素。如果這些作品裡面有程式碼,有能力從程式碼探索作者如何描述作品,就是我作為程式人最大的優勢。

作品裡的元素?

我曾經聽過教服裝畫的老師說過,有些學生整個學期在課堂上看不到幾次,到了期末隨便交了張作品,若細問作品裡有什麼,他們就說是抽象化、自我表現、極簡風等,在這些華麗名詞下有哪些具體元素,自己卻說不上來。別以為學生才會如此,有時看到、聽到有人說「這衣服很好看」、「這音樂很好聽」、「這畫很美」,我都會很想問「那你能說出它的故事嗎?」

不能就只是純欣賞嗎?故事很重要嗎?看看NFT創作者吧!他們無不致力描述作品裡的元素,說個好故事,突顯其NFT作品如何與眾不同;如果去美術館參觀的東西不是屬於熟知的領域,在沒有導覽或事先做功課的情況下,基本上,就只是逛街、吹冷氣吧!

而這就是我熱愛演算創作的原因,對於每個作品,我都能說出它們包含了哪些元素,其中用了什麼曲線、模擬了哪種自然現象、基於什麼物理特性、結合了哪個領域的意象、用了什麼資料結構,考量了什麼演算法等。

例如,我在Reddit上分享過〈樂之龍〉(下圖),有人評論是什麼妖術、有人說簡直是用Brainfuck寫了個Web應用程式。若要我簡單談談其中的元素,就是包含阿基米德螺線、Catmull-Rom 樣條、路徑跟隨演算等,不過,最得意的是靈光一閃地用了cos函式,就讓平面的高音譜符號曲線上下起伏,而構成龍身。

看看別人做了些什麼,並不是單純看著作品、期待靈光一現,更重要的是,在探索別人的作品時,從中獲得更多的知識,知道這些知識如何應用或組合,這就令尋找靈感來源的過程,等同於探索、累積知識、構造經驗的過程。

談到「這畫很美」,如果我們想進一步回答美在哪裡,當然會牽涉「什麼是美」的問題,而這個問題的諸多答案,多半摻雜了許多回答者的主觀元素,因為,答案本身就需要辯論的來源,不同的知識基礎、經驗等,往往使得「什麼是美」沒有正確答案,不過,卻有許多人誤會了!單純地憑直覺認定美或醜。

「什麼是美」是個需要不斷辯論的問題,但別忘了,辯論的前提是具備充足的知識。完全憑直覺地認定美或醜並非不行,然而是否以深厚的知識、經驗為基礎呢?就程式領域而言,知識、經驗豐富的資深開發者的直覺,跟菜鳥的直覺相比,根本上就是完全不同的層次。

追求知識是靈感的來源

在過去的專欄文章裡,我有不少主題的分享,大致上有圖片取樣、圓堆砌、差別生長演算、雜湊碼設計、反應擴散系統等,這代表我又吸收了不少知識。有些是從方才談到的來源取得,有些是來自書本。如果你留意過我的演算創作作品,可能會發現:作品發表的時間軸,差不多也是符合專欄主題的時間軸。

換言之,知識是靈感的來源,擁有越多的知識,就擁有越多的組合可能性,才有可能萌生更多靈感!反過來說,對於演算創作而言,追求靈感的過程,就是在追求知識,由於演算創作的描述方式是程式碼,而最後的結果就是,連帶提升了程式設計相關的各種能力。

近幾年從事演算創作後,我總覺得自身程式設計能力也提升不少,或許就是這個原因。

事實上,程式設計本身就是在解決需求,從事演算創作時,我們有機會面對更多樣化的需求,從而需要追求更多知識,至於所謂的靈感來源,就是從知識裡面挖掘出解決方案了,尋找靈感來源的樂趣,正在於此啊!

專欄作者

熱門新聞

Advertisement