Журнал / польза

Что такое генеративная графика

Генеративное искусство — это дизайн, который создаётся компьютером на основе кода. Человеку не нужно выбирать цвета и придумывать идеи, он полагается на математику и случайность. И получается неплохо!

Как было раньше

Программисты и инженеры пытались создавать искусство с помощью компьютера задолго до того, как появился «Фотошоп», — и даже до того, как у компьютеров появились полноценные экраны.

Математик Бен Лапоски в 1950-х годах с помощью электронно-лучевой трубки осциллографа создавал «осциллоны». Себя он называл электронным абстракционистом, а свои картины — электрическими композициями. Лапоски снимал экран осциллографа крупноформатной плёночной фотокамерой и использовал специальную аэрофотоплёнку.

Образец генеративного искусства можно найти в советском фильме «Служебный роман». Героиня Вера рассказывает: «Это наш Боровский запрограммировал ЭВМ, и она Мону Лизу нарисовала». Печатали «Мону Лизу» на матричном принтере, она вся состоит из букв и прочих типографских символов. Ну а что поделать, ведь действие происходит в советском «офисе» и других принтеров нет.

К генеративной графике можно смело отнести нейросети, которые создают изображения, «компилируя» их на основе других картинок: так работает популярный Midjourney, DALL-E и другие решения. Но мы не будем описывать их здесь и сосредоточимся на более абстрактных штуках.

Искусство на основе математики

Генеративное искусство — это интересное увлечение для любителя математики. Например, английский математик Джон Конвей в 1970 году придумал игру «Жизнь».

«Жизнь» работает на основе клеточного автомата. Правила простые:

— Есть игровое поле, состоящее из ячеек.

— На этом поле в начале игры случайным образом размещаются клетки.

— Затем клетки начинают «существовать». Если рядом с пустой ячейкой расположены ровно три клетки, то в ней зарождается новая жизнь. А если у клетки оказывается меньше двух или больше трёх соседей, то она умирает — от «одиночества» или «перенаселения».

— При этом игроку нечем управлять — он может просто смотреть за тем, как система живёт сама, создавая причудливый узор из клеток.

Похожую проблему исследовал математическими методами Джон фон Нейман ещё в 1940 году. Нейман даже создал сложную математическую модель клеточного автомата — он видел в этом попытку описать развитие настоящих клеток с помощью чистой математики.

Поиграть в «Жизнь» Конвея можно в веб-эмуляторе: conwaylife.com.

Ружьё и антиружьё

Математиков увлекла идея клеточного автомата, и они стали развивать её. Например, искали паттерны, усложняли правила. Появилась даже специальная лексика. Например, есть «планерное ружьё» — конфигурация, в которой клеточный автомат создаёт бесконечно растущую фигуру.

На этой анимации планерное ружьё стреляет ракетами из живых клеток, а антиружьё создаёт антиракеты из мёртвых клеток. В центрах ружей возникают белые карлики. И всё это — чистая математика!

О клеточных автоматах интересно пишет математик, программист и исследователь Стивен Вольфрам в своей книге A New Kind of Science. Там он в том числе делает попытку классифицировать клеточные автоматы, считая их элементарными программами. По мнению Вольфрама, такие простейшие программы можно объяснить изображениями или несколькими предложениями естественного языка.

А как же графика?

Она есть! Например, от клеточных автоматов можно шагнуть к шуму Перлина — генератору процедурных текстур на основе псевдослучайных чисел. Этот шум активно используется в компьютерных играх, помогая улучшать текстуры, создавать эффект тумана, дождя, снега.

Попробовать себя в создании простейших образцов генеративной графики можно на основе p5.js — это порт библиотеки Processing с Java на JS. Автор этих строк быстро собрал программку для генерации вот такого цветного шума методом «шагающих квадратов». Дел на пять минут, а выглядит как что-то из старенького фантастического фильма!

Супергероя современной генеративной графики зовут Зак Либерман. Он с 2017 года создаёт по одному скетчу в день — и рассказывает об этом опыте в статье. Посмотрите на его работы в соцсетях, чтобы вдохновиться.

Тайлер Хоббс пишет о генеративной графике на основе силовых полей — понравится, если вы любите тензоры и матричное исчисление.

У Дэниела Шиффмана есть хорошая бесплатная книжка об основах создания генеративной графики — The Nature of Code.

А ещё генеративную графику весело распечатывать на плоттере — прямо как это делали ранние программисты 50 лет назад.