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

原文: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 立场无关。文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。