泰勒·霍布斯著作翻譯系列(一)

原文:HOW TO HACK A PAINTING

作者:Tyler Hobbs

翻譯: An7,已獲作者授權

這是在 2017 年 Strange Loop 活動上的演講,我介紹了一個創建的水彩生成藝術算法。https://www.youtube.com/embed/5R9eywArFTE?wmode=opaque&enablejsapi=1

非常感謝你們的到來!我很高興能和你們討論一個我覺得非常有趣的話題,那就是生成藝術,或者說是編寫生成藝術品的代碼。我認為這對程序員來說特別有趣,這是我們學習如何藝術編程時要培養的一種思維,這種思維適用於對我們周圍視覺世界的分析,也適用於我們如何創造視覺藝術品。

先給大家一些我的背景介紹,我有一個傳統的編程工作背景,計算機學位。我為開源分佈式數據庫 Cassandra 工作了很多年。你們中的一些人可能用過它,我為你碰到的任何 bug 道歉,你可以把責任推給我。

我一直很喜歡藝術品。我一直很喜歡畫畫。幾年前,我決定更認真地對待藝術。我環顧四周,想弄清楚我可以在我的藝術作品中運用哪些技法,而編程對我來說是最明顯的選擇。

我跌跌撞撞地進入了生成藝術創作的世界。當時我甚至不知道它的存在。但我迷上了它。我一直在製作,一次又一次。幾年後的今天,我已經創作了大約 500 件具有創造力的藝術作品。今年早些時候,我很幸運地成為了一名全職藝術家。

順便說一句,我不得不說,編程藝術這條路,遠遠超過編程數據庫的樂趣。沒有 bug 追踪器。沒有 code review。沒有人挑剔我的變量名或者空格。沒有測試——我從來沒寫過測試用例。

沒有文檔。不用每日站會。我討厭早上站著。我更想單純地寫代碼。基本上,生成藝術擁有編程中所有有趣、令人興奮的部分,但是它沒有可以得到報酬的部分。藝術家是拿不到報酬的,就是這樣。

My Artwork|我的藝術品

為了讓你對我的作品有一個大致的了解,我會給你看一些圖片。這是我最喜歡的幾個。這些都是最近的。我認為這些都是去年 (2016 年) 的數據,今年 (2017 年) 的數據更多。

像大多數生成藝術家一樣,我從一張空白的畫布開始。我不會做數據可視化的。這裡沒有我正在處理的數據集。我沒有做任何形式的圖像處理。我只是為了畫一些有趣的東西而寫代碼。我也不用 Photoshop 或 Illustrator 之類的軟件。完全是通過編程完成的。

這是我最近的作品,但是當我剛開始的時候,我創造出那類有編程和的計算機科學背景的人常有的作品。這是非常幾何的,非常明顯的數學靈感。我覺得這類作品需要別的東西。我覺得我可以更進一步,通過引入更多的有機和自然元素的藝術作品。

Studies of the Real World|研究現實世界

對我來說,最好的方法就是走出去,真正地研究我周圍的自然世界。我拿起相機,走到外面,尋找那些我覺得很有美感的東西,我想我也許可以用生成手法來重現這些美感。

我做了些研究。這是其中的一些。左邊,是一片乾枯的休眠草地。右邊是一塊木柵欄板。這是生成的藝術品,或輸出。不是原始照片。

當我做這些研究時,我盡可能仔細地重現它,試圖捕捉所有我能真正辨別的模式。我從這些研究中學到了一些非常非常有趣的經驗。

Lessons Learned from Studying Nature|從自然中習得

我學到的第一課是,這個世界是瘋狂的,令人難以置信的複雜和詳細。我的意思是,任何一小部分你仔細觀察和研究都會發現其中有大量的細節。真是令人震驚。

但是,我學到的第二課是,儘管有那麼多的細節和多樣性,相當簡單的生成流程我就可以很好地再現我所看到的。我認為這很有趣,但我意識到原因是這樣的: 世界本身就是生成的。

我們有物理定律,化學定律,生物定律。這些都是管理宇宙中物質如何組織的規則。任何時候只要有這樣的規則,相應的模式就會自然而然地出現。

但是如果你走出去,環顧自然界,你看到的不只是乾淨利落的數學模式或者明顯的幾何視覺結構。你看到的是一團亂麻。那是因為除了這些規則,宇宙還有另一面。我們有一些我們認為是隨機的力量。熵力和混沌過程。

這個世界實際上是這兩者的結合。結構元素和隨機元素,這就是我們得到很多有趣效果的地方。

How Computing Enters the Mix|計算算力如何融入

這使得生成性藝術品處於一個非常有趣的位置,因為計算機在這兩方面都非常擅長。一方面,很明顯,計算機和算法非常適合描述模式、過程和組織。

但有趣的是,另一方面,計算機擅長處理隨機性。具有諷刺意味的是,它們允許我們對我們想要的隨機性非常具體。任何你能想到的概率分佈,你都可以表達出來,你基本上可以從這個分佈中得到一個免費的,無窮無盡的樣本流。

生成性藝術作品基本上是探索這兩者交集的完美媒介。我認為這使生成藝術成為一個非常有趣和強大的媒介。這也是我喜歡它的原因之一。我希望談論生成藝術所有其他的特點,但這是今天要重點討論的原因。

當我做這些研究的時候,我學到了很多東西,但是我不能直接把我看到的圖案應用到我正在創作的藝術品上。很難將木紋柵欄板加工成可能想要創作的畫。幸運的是,我偶然發現了一些對我更有用的東西。

Inspiration from the Sketchbook|來自素描本的靈感

這是一本素描本上的水彩塗鴉。

我平時仍然喜歡畫畫,所以我翻閱了一本素描本,有些東西真的很引人注目。這只是一幅相當簡單、抽象、小巧的水彩畫。但是我看著水彩畫,我真的很驚訝,你看到的那些有趣的圖案,在那裡衍生的形狀。有很多不同的紋理,細節,行為的多樣性。

我決定嘗試用生成手法來捕捉其中的一部分。我覺得顏料這個東西特別好,因為它非常抽象,而且很有延展性。我可以把它改造成任何我想要的樣子,而且它的表達感非常開放。觀眾可以把顏料看作幾乎任何物體,甚至是抽象的情感特質。顏料是在生成藝術作品中理想的可複用之選。

What it Means to Make a Sketch|畫素描的意義

在深入探討我如何重現水彩畫的生成模型之前,我想澄清一下我的目標。這是倫勃朗的一幅素描,當倫勃朗畫這幅素描時,他忽略了他所看到的 95% 。倫勃朗真正擅長的是挑選出對這幅畫至關重要的百分之五,這對他來說非常重要。

我要用水彩畫做一些類似的東西。我的目標不是要做出逼真的東西,或者物理上精確的模擬,而是要嘗試提取它的本質。百分之五是它的特徵,是使它特別的地方。

Why Design a Simple Model?|為什麼要設計一個簡單的模型?

除了關注重要的部分,擁有一個簡單的模型還有其他一些好處。首先,我希望能夠完全了解工作的流程和算法。我希望能夠保留我所有的工作記憶。作為一個藝術家,你真的必須知道你從上到下使用的每一個工具。作為一個生成藝術家,你的算法就是你的工具,所以你想要理解它們的每一個方面。

建立一個簡單模型的另一個好處是,我不是在做一個單一圖像的草稿。我在畫整個生成過程的草圖。我希望能夠調整生成過程的不同效用。希望能夠調整參數,了解他們將要做什麼。希望能夠調整算法本身。

基本上,我建模這個水彩畫的過程是相當簡單的,但我認為有很多好處。這樣跟你們解釋起來也容易多了。

Looking at Some Actual Paint|看看真正的顏料

我們來看看真正的水彩畫。這和我的模型很接近。我要你仔細看看這個,就幾秒鐘。當我看到這幅畫的時候,有三個主要的特點突出地出現在我的眼前,它們對於水彩畫來說是必不可少的。順便說一下,我創作這個圖的方法是,我拿一個只有水的畫筆,把紙弄濕,在畫筆上塗上顏料,畫一個小圓圈,然後等它幹。

當我看到這個的時候,有三大特點是突出的。第一,油漆沒有留在我畫的那個小圓圈上。它向外膨脹,有點變形。這已經不是一個完美的圓了。

第二,很明顯,它的邊緣沒有光滑的曲線。質地比較粗糙。它讓我想起航拍的海岸線,它有一個分形特點,它的一部分進進出出,但是如果你放大到更小的尺度,你會看到同樣的模式重複,甚至到相當小的尺度。我看過的其他一些水彩畫的例子尤其如此。

最後一個非常重要的特徵是,這裡的許多邊緣仍然相當柔軟。我們可以看到很多地方,由於有很多顏料,所以混合得很順利,一直到純紙。這三個特徵是我的模型所關注的。有膨脹和變形的,粗糙的,像海岸線一樣的邊緣,然後有一個更平滑的,混合的過渡。

Creating the Generative Model|創建生成模型

到了真正的模型。我正在用 Processing 做這件事,它是一個開源的 Java 圖形庫。雖然級別很低,但我喜歡這樣。像任何優秀的程序員一樣,我討厭編寫 Java,所以我使用了一個名為 Quil 的 Clojure 繪圖工具包。我強烈推薦。

這是算法起始輸入的多邊形。

我從這個非常基本的多邊形開始,我們首先要做多邊形的展開和變形。這樣做的模型非常簡單。四處走動,一次變形一個邊緣,我們要讓它向外伸出一些。

我們必須確切地決定每個邊緣如何突出。有三個變量是關於每個邊緣如何突出: 

首先是在每個邊緣的中間選擇一個起點。這就是我們要打破現有的邊緣,然後向外彎曲。

變量 1: 我們在哪裡打破現有的邊緣?

第二個變量是我們要把邊緣向外彎曲的角度:

變量 2: 我們向外伸出多少?

最後一個變量是向量的大小ーー突出會延伸多遠:

變量 3: 變形的大小

當我們把這些結合起來,我們基本上得到這樣的圖像:

我們需要非常小心地決定如何做這件事,因為它會對我們得到的結果產生很大的影響。

The Importance of Probability Distributions|概率分佈的重要性

這就是謹慎利用隨機性的重要之處。在你藝術創作的時候通常有兩種隨機分佈的方案可用。

第一個是均勻分佈,我敢肯定,幾乎每個程序員都用過它。顯然,在一個範圍內的任何地方選擇一個數字的概率是一致的。

Uniform probability distribution|均勻概率分佈

但是在自然界中,你不會經常看到均勻分佈。你會更頻繁地看到高斯分佈,或者說正態分佈。也叫鐘形曲線。在這裡,你需要指定一個均值和一個方差量,它控制著你可能得到的值與均值之間的距離。

Gaussian probability distribution|高斯概率分佈

如果你想獲得自然效果,那麼就要跟著正態分佈走。我就是這麼做的。對於這些變量中的每一個,我都使用了一個正態分佈。對於第一個變量,平均值居中在邊緣的中間,我可能會選擇越來越遠的值,隨著概率的降低。

對於角度,平均值是垂直的,但是我可能會有一些方差,遠離它是完全垂直的。從數量上來說,這是一個截斷的分佈。我只想要表現好的值,因為它從不向內收縮,它只向外擴展。它可能只擴展到很短的距離,但是偶爾我可能會得到相當突出的部分。

Running the Algorithm|運行算法

有了這些經過良好調整的分佈,如果我在多邊形上運行一輪,我得到的結果是這樣的:

這是個不錯的開始。這給了我們那種增長和那種奇怪的,斑點扭曲。所以我認為是時候繼續多點這些粗略的細節了。微調。

我要做的就是利用這種分形的特性,你可以看到相同的圖案在越來越小的尺度上重複。我要遞歸地把這個函數應用到新的多邊形上。

我只需要做一個小小的調整。當我選擇伸出長度那個變量時,我想根據邊緣的長度來縮放這個變量,這樣當我處理越來越短的邊緣時,它每次伸出的越來越少。

我遞歸地運行了六次,現在我突然得到了更多的細節:

這是遞歸六次後的多邊形變形。我覺得相當不錯。這讓我想起了在很多水彩畫中看到的粗糙邊緣紋理。

Softening the Edges|軟化邊緣

下一步是開始思考軟化邊緣,以及我們如何融合一點。通常,當我想圍繞一個形狀創建混合效果時,我會使用多邊形,堆疊一堆幾乎透明的圖層。低透明度。稍微移動沒一個圖層,就會有好的效果。

但實際上我們手頭上有更好的方案可以做到這一點。我們剛才用來變形多邊形的這個函數已經非常適合對多邊形進行小的、隨機的改變。我要做的就是利用它來獲得層次差異。

基本的方法如下: 使用初始的多邊形,運行三輪變形。我們剛剛看到的圖是運行了六輪,但這次只運行三輪運算,所以它不會充滿細節。

我做了大概 50 個圖層。對於每一層——我從運行完三輪運算的多邊形開始,重複再運行三輪,以獲得所有的細節。我繪製不透明度非常低的圖層,然後將它移動到下一個圖層。然後再從多邊形開始,運行三輪算法變形,並鋪第二層。

每一層都會有很多細微的差別,但宏觀上看,圖形的所有部分都是一樣的。當我們這樣做的時候,我們得到了我們美好的,柔軟的質地:

圖上可以看到堆疊的低不透明度層,每層有微妙的變化。然而,Processing 並不是真正低透明度的圖層,所以你仍然可以看到一些多邊形的邊緣,這只是生活中的一個事實。

Adding Variety to the Expansion|為顏料擴張增加多樣性

有一件事情我想嘗試和改進,那就是多樣性,希望在邊緣的一些部分是尖銳的,另一些部分是非常柔軟的,更多部分漸進混合過渡。現在各部分柔軟的很均勻,我想誇大這類變化。

我想出了一個非常基本的建模方法。對於原始多邊形中的每個邊,我們遍歷並分配一個方差級別。它將控制伸出長度變量,控制邊緣伸出去多遠。

Variance levels are assigned to each edge in the polygon|方差級別被分配給多邊形中的每個邊

我們可以分配這些方差級別,每當我們打破邊緣並將其向外擴展時,我們創建兩個子邊緣,這些子邊緣繼承方差水平,帶有少量的變化。我們就變化量來保持顏料斑特性。較高的方差水平將較軟,較低的方差水平將有一個更鋒利的邊緣。(方差大,數據波動大,迭代次數多)

你可以把這個想像成類似於紙張的某些部分比其他部分更濕。潮濕部分更容易把顏料擴展出去。乾燥的部分往往停止的更突然。

如果我們應用方差變化,我們會得到這樣的結果:

這讓我更滿意了。在右下角,你可以看到我們有一些非常漂亮,大,柔和的過渡。同時有某些區域有一點突變和尖銳的邊界。

Creating a Darker Shape in the Center|在中心創建一個較暗的形狀

因為我還有很多時間,我想談談另一個細節。如果你仔細觀察,這個中心比其他任何東西都稍微不透明一點。我不確定在投影幕布上能看到多少。但是你會在很多自然水彩畫中看到這樣的東西。大部分顏料留在中間,所以你可以看到你畫的原始形狀(那個圓)的一點點殘留。

為了達到這樣的效果,我做了一些事情來取代多邊形上三輪算法迭代直至 50 個圖層的方案,我做了一些有點不同的事情。對於前三分之一的圖層,我用只運行一輪算法的多邊形打底。只是這樣一個細微變化。然後加一層運行三次圖層算法的圖層。

現在,當我移動到第二個三分之一的圖層進度時時,我為基礎多邊形多加了一輪運算,然後加一層運行三次圖層算法的圖層。對於最後的三分之一,我做了完整的三層多邊形運算和疊加三次圖層運算的圖層。

前三分之一的圖層會更靠近中心,隨著我們不斷運算,效果會越走越遠。可以說,它把色素濃縮在了中心。如果你仔細觀察,你會發現中心效應。

Applying the Model|應用模型

我的水彩畫模型差不多就這樣了。就像我說的,我一直很簡單,現在有一個很好的工具(模型)供我使用。我可以隨心所欲地重複使用。

作為一名生成藝術家,我差不多為自己創造了點新媒介。這是生成性藝術很酷的一面,它幾乎是一個元媒介。有時,對於每一件作品,你都在創造一種新媒介並在其中創造藝術品。

我將給你們展示幾個例子來說明我是如何使用它的。這只是我用這種技術製作的第一批基本作品之一。我真的很想看看它在不同色域混合的反應,它們並不總很好地融合,尤其是在顏色差異很大的情況下。

Isohedral XI, 2017, Tyler Hobbs

對於繪畫來說也是一樣的,但是通過 Processing 來做這件事特別奇怪。我必須小心選擇我想要混合的顏色。我做了一個調整,使顏色混合更好一點,就是為這些斑點使用紋理蒙版。紋理蒙版,在這裡你可以看到它看起來像顆粒感。像紙的顆粒一樣。這使得每個斑點都有更透明和更不透明的部分,因此下方的圖層顯示得更好。

我做的另一件有助於色彩混合的事情是,不是一次渲染一個斑點,直到完成後渲染下一個斑點,直到所有渲染完成。我預定義了所有的斑點,然後為每個斑點做第一輪渲染,第二輪,第三輪,以此類推。所以整幅畫都是同時畫的,這有助於混合的顏色更自然一點。

最終,我想用這個做出更複雜的作品。這些是我使用這種技術製作的幾件成品藝術品。在這裡,我產生了一點點遠離自然水彩畫的感覺,這無所謂。我進行水彩研究的原因並不是為了製作假的水彩畫,而是為了捕捉我在水彩畫中看到的那些有趣的圖案和紋理。

Linear II (Welcome Back), 2017, Tyler Hobbs

對我來說,這些看起來更像是織物染料,或類似的東西,但你仍然保持這些非常酷,有趣的水彩畫般的紋理在這裡。我還引入了一些裝飾元素。引入不同層的水彩畫蒙版。如你可以看到一些線條的地方,是因為下面的圖層被允許顯現出來。

但是我想談一點關於如何輸出完整的生成藝術品。它很像我建模水彩畫的過程。這裡面有很多小心運用的隨機性。如果我運行第二次生成的程序,我會得到一個非常不同的結果。這都是設計好的。

這是一個謹慎的平衡行為,當你處理生成藝術品的隨機性時。你想要那些隨機性帶來的驚喜。你想讓它做一些你自己都想不到的事情,或者是你沒有預料到的事情,或者是一些非常奇怪的事情。對於這種探索來說,真是太神奇了。

但是你不希望 2000 張圖片每張只做一些令人愉快的事情。你想讓它每 10 到 20 張圖片做一些令人愉快的事情。你試圖找到約束系統的隨機性,或使這個系統更有可能產生有趣的東西。確切地確定每件作品是不同的,通常是設計生成藝術品最具挑戰性的部分。但對我來說,正是這個原因讓生成藝術成為了非常有趣的工作。

這幾乎就是我要說的所有關於水彩畫的過程,以及我是如何將它應用到一些藝術作品上的。

免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。