代码进去,艺术出来:每个人都是NFT艺术家
这个演讲是在 Clojure/conj 2018 上进行的,重点是关于实践生成艺术的一些有趣的问题,这些技术已经运用在 NFT 上进行了。
欢迎大家。谢谢你。非常感谢你们的到来。我很高兴能谈论一个我真正喜欢的话题,那就是艺术作品,具体来说,我将谈论通过编程创作的艺术作品:你可以称之为生成艺术作品。本次演讲不会像制作生成艺术作品那样提供技术实践指南,而是对围绕实践出现的一些有趣哲学问题的探索。生成艺术是一种相对较新的媒介,它与之前的一些传统艺术形式有很大的不同,所以有很多我认为非常有趣的新问题,它们与我们程序员特别相关,我将花一些时间谈论我的实际软件设置,以及我使用的工具。
我制作的艺术品通常没有输入。它不是任何类型的数据可视化或图像处理。生成图像所需的一切都包含在程序本身中,无论程序输出什么,都是最终产品。通常,我将数字图像作为最终产品,但我并不严格这样做。有时我闯入物理世界,我会创造这样的东西,这是一幅绘图仪画。这是一幅真正的画,但它是用绘图仪创作的,这是一个简单的机器人,我稍后会讲到。我主要使用抽象图像,但最近我一直在尝试集成手绘组件,所以我编写了一个自定义界面,允许我使用通过 Wacom 平板电脑进行数字绘制的输入作为算法的起点。在这种情况下,我绘制了一个图形的轮廓,并将其传递给从那里接管的算法,并将其分解为不同的形状,并分配所有颜色和细节,但主要是这个 [最终图像] 是我在过去五年左右的时间里一直在做的东西。
以下是我正在使用的工具:我正在使用Quil,它是一个Clojure库。它是另一个名为Processing 的Java 库的包装器,我认为它已经存在了 10 或 15 年。处理是一种基本的图形库。它有一个相对简单的 API 来处理形状、线条和图像。Processing 最初是作为一种 Java 库编写的,它有自己奇怪的 IDE,但您可以使用 Quil 用 Clojure 包装它。处理也被移植到 Java Script,而 Quil 也通过 ClojureScript 包装了它。您可以选择要使用的平台。
这只是一个非常简单的程序,可以让您了解设置它的样子。锅炉板很少。这个程序不会画任何特别有趣的东西。这只是图像周围的一堆乱七八糟的线条,但这样做的好处是您可以直接开始创建图像,而且 API 相对简单。
在底部,我得到了 (begin-shape)、一堆对 (vertex) 的调用,然后是 (end-shape),这就是我使用这些 API 的方式的 90%。偶尔,我会做一些更高级的东西,比如图层和蒙版,但这是它的核心。您可以将系统用作矢量图形或光栅图形,因此您可以访问实际的像素阵列。您可以选择要使用的不同渲染器。您可以在 2D 或 3D 中工作,尽管我自己更喜欢在 2D 中工作。你可以用这个做动画,所以最重要的是我有一个(无循环)调用来阻止它这样做,但通常它会为每一帧重复调用一次绘制,所以你可以刷新和重绘,所以人们创建动画那样。他们还以这种方式创建交互式软件。你可以接受键盘输入、鼠标输入、Wacom 数位板,它那么为什么我为此选择了 Clojure?
一旦我发现实际上有用于此的工具,它就会变得更好。不幸的是,我从 Matplotlib 开始,它使用起来和你想象的一样痛苦,但 Clojure 好得多,我认为主要原因是创建视觉图像实际上是一种数据处理。您正在处理这些形状、曲线、点、像素。所有这些都非常方便地表示为简单的数据结构,因此它非常好地映射到在简单数据结构上设置这些数据转换管道的典型 Clojure 风格的操作。它非常适用于这个领域,它也非常适用于音频,所以有像 Overtone 这样的 Clojure 库可以让你制作生成音频,而且它们也能很好地工作。
当然,在座的所有人都知道 Clojure 编写速度很快,这就是我认为我们都喜欢它的原因之一,但尤其是对于艺术品,你们并没有真正预先规划这种架构。你更像是一种探索性的实验模式,只是把东西塞进去,然后运行它看看它的样子。因此,尤其是与 REPL 集成后,您可以在其中重新加载模块并重新运行代码,从而形成一个非常紧密的反馈循环,非常适合此类探索性工作。当然,与其他 Lisp 方言相比,Clojure 的一大优势是您可以访问 JVM,这既是一项出色的工程,也是一个出色的生态系统。那里有您随机需要的所有这些 Java 库,而且不必每次都从头开始编写所有内容,这很好。当然,JVM 的性能相对较高。它适用于大堆大小。
如果您发现自己需要优化一堆数组操作,您可以使用 Java,并且非常容易地做到这一点,尽管我发现这非常不常见。当然,如果你真的想部署到浏览器,你可以通过 ClojureScript 来实现。如果您正在制作交互式软件,您开始必须处理可能并发操作的共享状态,因此原子和代理的标准 Clojure 工具包,尤其是代理,往往对这种工作方式很有用,您还要小心不要阻塞动画线程,所以像 core.async 这样的工具对于做这种风格的工作非常方便。最后一点有点推测性,但我觉得拥有更灵活的语言会让你在做这类创造性工作时有更好的心态。
所以,在我从事生成艺术作品的这几年里,有一些大问题,我花了很多时间思考,而这些问题的答案并不是那么简单。也许这并不奇怪,但我认为它们会产生一些有趣的东西。所以,我想说的第一个是如何通过编程制作有趣的艺术品。我的意思是,这真的是生成艺术作品的关键。但是,我需要小心我在这里所说的话:“有趣的艺术”是一个沉重的术语。这究竟是什么意思?它可能意味着很多事情。艺术可以有很多有趣的方式,但我认为这里的一个相对属性是好的艺术以某种方式做我们没有预料到的事情。它有能力给我们带来惊喜或教给我们一些新的东西,或者从不同的角度看待事物。这就是好的艺术与工艺的区别。但是,我们也有理解艺术品的需要。
我们真的不喜欢它,如果我们不能把我们的头环绕在它周围。有些艺术品可能难以消化,这没关系,但最终我们希望感觉这幅艺术品背后有某种意义、结构或组织。它不能只是随意地捆绑在一起。即使我们不能对它形成理性的理解,我们也必须对艺术品有某种直观的理解才能欣赏它。那么,如果我们欣赏未曾预料到的艺术,这是否会让我们在编程时陷入困境?编程是使其成为有用工具的优势之一,它是非常可预测的。我们可以编写这些系统,让我们了解在任何给定状态下会发生什么,并且除非出现任何类型的错误,否则这是一种非常可预测的工作方式。
这似乎与我们制作不可预测的艺术品的愿望相冲突,但是很多生成艺术家已经非常成功地解决了这个问题,所以我将讨论一些解决方法。我自己的方法,以及我遵循的几位艺术家似乎也使用的方法,实际上是一种编程风格,它更像是一种指导方针,而不是对应该创建什么的准确描述。在这里给你一个直观的例子,这些是从同一个程序创建的两个图像:
没有任何代码更改,只需多次运行它,我就会得到两个完全不同的结果,但它们在某些方面似乎仍然在美学上非常相关。几乎没有一个像素匹配,但不知何故它们绑在一起。实现这一点的方法是非常有选择地、非常小心地使用随机性,从高级结构到精细细节,以及颜色选择等元素。
该算法主要基于一种递归三角形细分,随机性用于做一些事情,例如不是完美地分割每个三角形,它可能会稍微偏离中心或使用曲线而不是直线。它可能会在某些区域递归到一个深度,而在其他区域则不会,并且它试图以一种有趣的方式保持这些分布。颜色可能会从一个父三角形继承到它的子三角形,但它也可能以各种概率随机切换到另一种颜色,所以这真的是......程序是我在朝着某个方向推进,但没有明确地布置需要什么发生。我仍在努力为程序留出空间,以让我感到意外的结果,这只是一种引导随机性。
我非常喜欢另一位艺术家(Manolo Gamboa Naon)。他的名字对我来说很难发音,所以我会避免对其进行屠杀,但我在这里有两张图片,我相信它们来自同一个程序:
同样,您可以看到,即使它们完全不同,它们也保持了这种美学一致性,因此这是一种流行的工作方式。您可以找到其他艺术家似乎采用这种方法。还有一些非常不同的方法往往依赖于更多的涌现属性和涌现结构,所以我在这种情况下所说的涌现是指你有一套非常简单的规则,看起来不会做任何有趣的事情,但是如果你随着时间的推移反复运行它,这些大型超级结构开始出现,你无法仅通过查看规则来预测。
其基础确实与混沌理论有关,混沌系统的一个非常简单的例子是三重摆。这基本上是三个相互连接的钟摆。尽管这些对象本身是非常可预测的对象,但当您将它们组合起来时,您最终会得到混乱的系统,这意味着初始状态的任何微小差异都会导致最终结果的巨大差异。
所以,我在这里欣赏 Jonathan McCabe 的一些非常好的艺术品。他正在研究一种高级形式的元胞自动机。很多人可能知道那是什么,但对于那些不知道的人,也许你听说过康威的生命游戏,这是一种元胞自动机。本质上,您有一个包含单元格的网格,这些单元格可以打开或关闭,并且您可以逐步执行,并且有一些简单的规则来控制单元格何时打开和关闭,就像它们有一定数量的邻居打开一样,它们“将在下一步。
这是一个更复杂的系统。这就是他所说的多尺度图灵模式,所以他使用元胞自动机,一种用于宏观尺度特征,一种用于更详细的特征,但这里的输出种类繁多,每一个这个程序的输出看起来完全不同。它真的很狂野,但它仍然具有我们仍然以某种方式理解的这种连贯结构。这是非常了不起的。
另一种常见的方法有点像元胞自动机,但没有网格,还有一些比细胞更复杂的东西,所以在这种情况下,我们有我所说的在系统内移动的代理或演员,并在某些方面影响它大大地。而且这些也往往相互交互,所以如果两个代理发生碰撞,也许他们会改变他们正在绘制的颜色。你可以用简单的规则来设置这些,就像使用元胞自动机一样,你运行很多步骤,它构建了这个复杂的图像。这对于动画也非常有效,但这只是一个静止的。
最近的发展之一是机器学习。我认为神经学是一个很好的术语。这是马里奥·克林格曼( Mario Klingemann ) 制作的艺术品,我这里有他的一些作品。这件艺术品是用一种叫做 GAN 的东西制作的,一种生成对抗网络。它是一种神经网络,并以特定的风格进行训练,但实际上艺术家在使用这些时所拥有的两个杠杆是,首先是训练集,因此是训练网络所针对的图像集合。他们的另一个真正的控制点是目标函数。所以这就是网络如何给自己打分或给自己打分来判断它是否做得很好,以及它应该如何改变以做得更好,但是这些变化非常多。这只是他所做的最小的一瞥。我绝对建议检查更多。
这些艺术作品风格都大不相同,但我认为将它们联系在一起的共同点是它们在混合随机性和结构方面做得非常出色。他们能够在两者之间保持这种平衡,直到它仍然令人惊讶和不可预测,但他们仍然有某种类型的秩序,即使只是凭直觉我们也能理解。有一张图片对我来说非常清楚地表明了这一点,这是 John Greene 的作品,他制作了瓷砖艺术品:
显然,像这样的平铺系统是非常有序的,但他还设法以创造出许多非常漂亮的多样性的方式引入了随机性。所以,我认为我们可以满意地回答“你如何用编程制作有趣的艺术?”的问题。我们可以说这是可能的。通过编程创造令人惊讶的结果有不同的方法。
所以,我猜下一个真正有趣的问题更多地与生成艺术的哲学以及它的未来发展方向有关。我们可以将我们的美学转化为代码,对吧。当我编写这个程序时,我试图做的是以某种方式将我喜欢的东西编码到程序中,而不是让它变得非常精确,但艺术是一种非常直观的实践。它由很多直觉和直觉指导,您可能会做出关于该做什么的虚假决定,而编程几乎与此相反。这是非常明确的。它非常有序。它很有条理。所以,这是一个非常不寻常的尝试混合,加入这些东西。因此,许多生成艺术家开始怀疑:
我要把这个问题缩小到颜色。想象一下,您的任务是创建一个程序,为图像中的每个形状挑选颜色以产生令人愉悦的效果。这似乎是一项可行的任务。颜色是一个三维空间,非常简单。但是当你深入研究时,会发现这种颜色是极其相关的。任何一种颜色都会受到周围所有颜色的影响,并且会受到这些颜色的接近程度的影响,并且会受到它们大小的影响。不仅如此,颜色对我们来说还具有所有这些文化内涵。我们将颜色与不同的情绪联系起来。我们将颜色附加到对象、位置甚至时间段上。真正优秀的艺术家会以意想不到的方式或讽刺的方式使用颜色,所以很明显颜色实际上不仅仅是一个三维空间。
我的意思是,真正做到这一点只需要强大的人工智能,在这一点上,艺术的定义变得比现在更加模糊。马特·皮尔森(Matt Pearson)有一个有趣的短篇小说(艺术家之死,在Novelty Waves 中),它谈到有人在写一个 AI 艺术家。我建议检查一下。所以,我认为,这个问题的答案,我们是否可以将我们的美学转化为代码,我们是否可以做到这一点,但不是全部。它必须是艺术家和节目之间的合作,这没关系。
所以,最后一个问题,也许是最重要的问题,为什么要这样做?为什么用代码做艺术?我认为最直接的答案基本上就是它很有趣。我们将所有时间都花在使用功能非常强大的工具来开发这些极其复杂的技能上,但我们很少以有趣的方式使用它。
你们中有多少人真正坐下来,没有预定目标地编写代码?是的......就像你们五个人一样,对于你们中的少数人来说可能非常罕见。这不是我们通常会做的事情,我认为我们真的应该这样做。不时不时用这些技能做有趣的事情是一种浪费。除了艺术上的挑战之外,做这种类型的工作还有很多有趣的工程挑战。
如果你想写出非常快的代码,你可以编写一个实时 GPU 着色器,这些东西的吞吐量非常高。如果您喜欢高效的紧凑代码,那么可以使用演示场景艺术作品,这些作品都是关于从难以置信的小可执行文件中生成内容的。这是一个适合 4 KB 可执行文件的整个世界。这只是一个视频的静止图像。这是一个完整的地形,有山,有气味,有云,有海洋,非常令人兴奋。
如果你喜欢机器人,我们有机器人。有些人拿到了这些疯狂的九轴工业东西,并画了肖像。我必须用一个简单的三入口机器人来满足自己。
这是一个AxiDraw。它是由加利福尼亚州的一家小公司制造的。我将它用于素描和绘画,但有时能够在物理世界中做一些事情真的很棒。这确实是一个未被充分探索的空间,所以如果你喜欢做某事,成为第一个做某事的人,这里真的很容易。您几乎可以在很短的时间内向任何方向行走,并且您处于新的肥沃土壤中。就动机而言,这真的很棒。只需几个小时的工作,您就可以获得一些即时的视觉反馈。l 这可能是糟糕的反馈,但并非总是如此。您通常会享受您所创造的东西,因此这不是一个需要数月或数年才能达到满意效果的项目。至少对于我这种性格来说,拥有这种动机是有用的。
我认为不言而喻:你根本不会做这些。
我稍微谈到了这一点,但老实说,我们应该能够享受我们开发的这些技能的乐趣。我们真的没有充分的理由不这样做。我认为我们应该养成经常放松一点的习惯。但是,更严肃地说,我确实觉得我们实际上应该为社会花一些时间和精力在这些事情上。我们对技术和编程有一定的了解,而世界上大多数人都没有。我的意思是,对大多数人来说,这对他们来说完全是个谜,而艺术品有时可以弥合这种差距。
例如,考虑最先进的机器学习。如果我去街上找人,问他们“最先进的机器学习算法的优点和缺点是什么?”,他们不知道。对这里的一些人来说,这甚至可能很难回答。但是,如果我让他们听一小段由机器学习算法创作的音乐,或者让他们阅读由这些算法生成的一首诗,或者看一件艺术品,他们会很快并直观地了解它发生了什么。他们将能够听到。好吧,也许它可以得到正确的细节。它可以以令人愉悦的方式将这些简短的音符序列串在一起,但它忽略了更大的图景。它没有任何戏剧性。没有故事。没有紧张。
我认为同样的直觉理解不仅可以发生在这个机器学习案例中,还可以发生在通过编程创建的各种艺术作品中。我认为有一个教育方面,一个很重要的沟通方面。生成艺术也倾向于向我们解释关于世界的事物,因为宇宙本身是生成的,它基于定律和概率。这些导致某些模式、涌现模式和生成艺术作品大量处理模式。因此,无论有意与否,生成性艺术作品经常会偶然发现我们在世界上发现的一些相同模式。所以,一个很酷的例子是贝壳。我不知道它是什么物种,但外壳恰好,那里的图案恰好非常,非常类似于 Stephen Wolfram 创建(或发现)称为 Rule 30 的元胞自动机,只是它有一些小故障。但这些东西如何反映在自然界中真的很了不起。
为了深入探讨哲学的深层次,我认为生成性艺术作品也说明了我们作为人类的一些重要信息。艺术从根本上来说是关于在很多方面做人。当我们尝试编写关于艺术作品的规则时,我们试图做出更明确的尝试来描述我们欣赏艺术作品的内容。而这种方法很快就暴露了其自身的局限性。艺术作品的复杂性和高维度变得非常清晰,程序工作方式与人类工作方式之间的差距变得更加明显。我们开始看到,也许这些程序可以解决制作艺术品的“方式”,但它们不能真正解决“为什么”,因此它强调了“为什么”在艺术品中的重要性,以及我们如何作为人类。
所以,我认为这种生成艺术的方法,至少对我来说,揭示了很多关于人类生活的本质。我想说的最后一部分是,任何没有艺术品的文化都是反乌托邦。您希望艺术品属于任何健康的文化。艺术鼓励发现。它鼓励反思、交流和对生活的欣赏。鉴于编程基本上正在吞噬世界——它每天都变得越来越重要,我们的生活越来越多地被技术所包围——我们需要确保我们接受艺术的重要性,我们投入一些如果我们想确保在迈向未来时为我们所有人建立一种健康的文化,我们将花费我们的时间和精力来享受它并创造它。
这就是我对这些问题的最佳答案。我希望你们中的一些人会想更多地了解生成艺术品或自己制作一些艺术品。有了这个,我会说谢谢。
(文章来源于Block unicorn)