Что такое генеративная графика
Как было раньше
Программисты и инженеры пытались создавать искусство с помощью компьютера задолго до того, как появился «Фотошоп», — и даже до того, как у компьютеров появились полноценные экраны.
Математик Бен Лапоски в 1950-х годах с помощью электронно-лучевой трубки осциллографа создавал «осциллоны». Себя он называл электронным абстракционистом, а свои картины — электрическими композициями. Лапоски снимал экран осциллографа крупноформатной плёночной фотокамерой и использовал специальную аэрофотоплёнку.
Образец генеративного искусства можно найти в советском фильме «Служебный роман». Героиня Вера рассказывает: «Это наш Боровский запрограммировал ЭВМ, и она Мону Лизу нарисовала». Печатали «Мону Лизу» на матричном принтере, она вся состоит из букв и прочих типографских символов. Ну а что поделать, ведь действие происходит в советском «офисе» и других принтеров нет.
К генеративной графике можно смело отнести нейросети, которые создают изображения, «компилируя» их на основе других картинок: так работает популярный Midjourney, DALL-E и другие решения. Но мы не будем описывать их здесь и сосредоточимся на более абстрактных штуках.
Искусство на основе математики
Генеративное искусство — это интересное увлечение для любителя математики. Например, английский математик Джон Конвей в 1970 году придумал игру «Жизнь».
«Жизнь» работает на основе клеточного автомата. Правила простые:
— Есть игровое поле, состоящее из ячеек.
— На этом поле в начале игры случайным образом размещаются клетки.
— Затем клетки начинают «существовать». Если рядом с пустой ячейкой расположены ровно три клетки, то в ней зарождается новая жизнь. А если у клетки оказывается меньше двух или больше трёх соседей, то она умирает — от «одиночества» или «перенаселения».
— При этом игроку нечем управлять — он может просто смотреть за тем, как система живёт сама, создавая причудливый узор из клеток.
Похожую проблему исследовал математическими методами Джон фон Нейман ещё в 1940 году. Нейман даже создал сложную математическую модель клеточного автомата — он видел в этом попытку описать развитие настоящих клеток с помощью чистой математики.
Поиграть в «Жизнь» Конвея можно в веб-эмуляторе: conwaylife.com.
Ружьё и антиружьё
Математиков увлекла идея клеточного автомата, и они стали развивать её. Например, искали паттерны, усложняли правила. Появилась даже специальная лексика. Например, есть «планерное ружьё» — конфигурация, в которой клеточный автомат создаёт бесконечно растущую фигуру.
На этой анимации планерное ружьё стреляет ракетами из живых клеток, а антиружьё создаёт антиракеты из мёртвых клеток. В центрах ружей возникают белые карлики. И всё это — чистая математика!
О клеточных автоматах интересно пишет математик, программист и исследователь Стивен Вольфрам в своей книге A New Kind of Science. Там он в том числе делает попытку классифицировать клеточные автоматы, считая их элементарными программами. По мнению Вольфрама, такие простейшие программы можно объяснить изображениями или несколькими предложениями естественного языка.
А как же графика?
Она есть! Например, от клеточных автоматов можно шагнуть к шуму Перлина — генератору процедурных текстур на основе псевдослучайных чисел. Этот шум активно используется в компьютерных играх, помогая улучшать текстуры, создавать эффект тумана, дождя, снега.
Попробовать себя в создании простейших образцов генеративной графики можно на основе p5.js — это порт библиотеки Processing с Java на JS. Автор этих строк быстро собрал программку для генерации вот такого цветного шума методом «шагающих квадратов». Дел на пять минут, а выглядит как что-то из старенького фантастического фильма!
Супергероя современной генеративной графики зовут Зак Либерман. Он с 2017 года создаёт по одному скетчу в день — и рассказывает об этом опыте в статье. Посмотрите на его работы в соцсетях, чтобы вдохновиться.
Тайлер Хоббс пишет о генеративной графике на основе силовых полей — понравится, если вы любите тензоры и матричное исчисление.
У Дэниела Шиффмана есть хорошая бесплатная книжка об основах создания генеративной графики — The Nature of Code.
А ещё генеративную графику весело распечатывать на плоттере — прямо как это делали ранние программисты 50 лет назад.