写在前面

这本书是为小朋友编写的,如果你不幸错过了这个年纪也不要气馁,因为我也是大学毕业才开始接触Processing编程的,本书也适合零基础的读者学习。这个时代发展太快,每5~10年就会发生软件技术与思想的变革,但我相信用代码来实践美学的这个新潮流不会退去。尝试用寥寥几行代码来生成无限变化的画面,是一件可以消磨一整个下午的趣事。看完这本书之后,你或将洞见大自然的数理奥秘,成为一个爱写代码的设计师。

这是一个美好的时代,因为我们可以很方便地获取古今中外人类的知识宝藏;这又是一个充满挑战的时代,因为我们在有限的时间内只能窥探知识宝藏的零散片段,很难体会其中隐含的精妙乐趣。例如,你在人生的4个阶段可能接触4种看似无关的知识:小学数学中的直角三角形、初中物理中斜面上力的分解;大学数学中的线性代数与向量几何;群论表示的经典力学。如果你偶然发现它们其实都在说一件事情,你可能会豁然开朗,开始领悟这些知识宝藏中的奥妙。生成艺术通过计算机编程来处理逻辑、数学、物理等问题,可以帮助我们发现知识点之间的潜在联系。本书的一个愿望,或者说是生成艺术的一个愿望,就是让大家做一做“大脑体操”,从原本分散的知识点中发现引人入胜的线索。

人们对美术的理解差别很大,不过大家似乎懒得把自己的观点拿出来辩一辩。我们会在博物馆看到工艺大师的刺绣名画精美绝伦;在景区路边看到艺人的素描人像惟妙惟肖;在风光摄影作品上看到艺术家的诗意境悠远。这些美术形式都值得我们讨论,但我觉得最重要的还是大人(自觉或不自觉地)灌输给小朋友的美术理念。达芬奇小时候反复练习画鸡蛋,这个故事的中心思想是:要持之以恒、精益求精;要画得像!我想这就是传统的美术理念吧。本书很少谈及美术思想,而是让读者体会用代码绘图的乐趣,使读者自然而然地形成自己的品味和素养。

美术和编程,在人们以往的印象中是互不相干的两件事。不管是在中小学还是在大学,文科、理科、艺术都是分开教学的。美术课往往注重技艺的培养,看重结果的呈现,很少触及灵魂的拷问:绘画是为了表现眼前所见,还是为了表达内心世界?美有没有科学规律可循?最近的十几年,生成艺术(generative art)的出现让代码与图形之间的关系空前紧密,人们能够直观地看到数理逻辑与美术作品的关联;而语法结构、随机过程、动态系统、复分析等科学领域为生成艺术提供了广阔的游戏场地,不断衍生出令人惊异的精彩作品。

每个接触过生成艺术的人或许都对它有不同的理解。程序员往往认为生成艺术只不过是用代码来“写”图形;艺术家则倾向于把它看成一种新媒体艺术;也有科学家认为它可以建构自然现象。我们不妨提出两类问题:①基于某种计算机编程语言,如何高效地通过编写代码来生成图像?②在自然科学的视角下,计算机程序究竟能干什么,不能干什么?对于计算机程序能够生成复杂现象这件事,苏黎世联邦理工学院的Ludger Hovestadt教授曾比喻:计算机程序向大自然(nature)喊话,大自然的回音使程序运行的结果呈现出大自然的复杂性。著名的例子有朱利亚集、de Jong吸引子、生命游戏等,它们的共同特点是代码很短,但可以生成无限复杂的细节。

如今,Processing等工具让生成艺术变得十分容易上手,但二维或三维图形的编程工具并不局限于Processing。20世纪60年代的Sketchpad系统就考虑了图形在计算机上的输入和输出。我最早用AutoCAD的LISP语言来制作几何图形;之后,Flash开始流行,大家发现它内置的ActionScript脚本语言直观又好用;后来,基于Java语言的Processing以干净的代码风格和流畅的运行效果逐渐成为生成艺术的首选工具;此外还有基于C++的openFrameworks、基于Javascript的p5.js等;最近几年,实时数据获取、开源互动社区等新思潮日益凸显,涌现出了Observable等新平台。

虽然编程工具不断变迁,但生成艺术的基本原理如同自然科学一样经久不衰,如笛卡儿坐标系、逻辑运算、颜色理论等。生成艺术可以帮助人们推敲美术中的一些感觉问题。例如,与蓝色相反的颜色是什么?你可能一时陷入沉思。在红绿蓝三原色的理论下,(0, 0, 255)表示蓝色,即蓝色成分是满格,红与绿的成分为0。那么“相反”的概念用数学方法表示为:(255, 255, 255)-(0, 0, 255)=(255, 255, 0)。计算结果中只有满格的红色与绿色成分,即黄色。也许你觉得橙色才与蓝色相反,这就引出了一系列问题:每个人的感受是否有差异?主观感觉与颜色科学哪个更可靠?不难看出,我们在谈论生成艺术时,往往不是在讲编程,而是在讨论美术和人。

不可否认的是,生成艺术的技术、方法、价值观与之前的所有美术形式都截然不同。例如,程序生成的动画可以是永不重复的,这与循环播放一段动画的情形完全不同。我们倾向于用尽量短的代码来生成尽量复杂的画面,这种“洁癖”类似物理学家追求用最简洁的数学模型表达复杂的理论。同时,有人尝试用代码生成不可预知的效果,这与传统的美术理念大相径庭。此外,很多人喜欢“抄袭”别人的作品,并将其改写成自己的版本,这个操作称为fork(分支)。很多人还不太习惯这种开源的思维,但未来的生成艺术会越来越多地在这种共享文化中成长。

我所在的东南大学建筑学院是融合“设计——编程”的前驱。原南京工学院(即现在的东南大学)卫兆骥老师早在20世纪80年代,就在Apple II、IBM PC上进行了建筑设计的自动化编程,自主研发了CAD系统;20多年后,李飚老师在原有CAD实验室的基础上建立了建筑运算与应用研究所,把复杂系统科学、建筑设计、计算机算法结合起来,逐渐形成“生成设计”学科。近年来,东南大学建筑学院为了让低年级学生尽早接触“设计——编码”思想,每年举行“生成艺术”工作营。学生们释放出空前的创造力,创造了不少精彩的作品,其中一小部分作品也呈现在本书中。

如果没有卫兆骥、李飚、Ludger Hovestadt等领路人的超前探索,东南大学或许就不会率先在建筑学院开设“生成艺术”实验课程。现在我决定把生成艺术介绍给更年轻的兴趣爱好者,这就是编写本书的缘由。本书能够顺利出版,首先要感谢东南大学建筑学院对本书的大力支持。除此之外,还要感谢唐芃、顾大庆等老师的巨大努力,他们使“生成艺术”成为一项受欢迎的课题,逐渐改变了大家将技术与美术分开理解的现状;感谢所有参加“生成艺术”工作营的同学,他们的创意让人难忘;感谢运算所的研究生助教们,他们为工作营做了大量工作;刘晨晰为本书绘制了所有插画,期待以后我们能有更多合作。最后,感谢我的妻子贾亭立对我的默默支持,让我可以顺利完成本书。

华好
2021年6月28日