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