Два слова о процедурной графике
Среди многочисленных демосценерских конкурсов, которые традиционно входят в программу различных demo party, незаслуженно недооценённым, на мой взгляд, является конкурс процедурной графики (procedural graphics). Смысл этого специфического вида компьютерного творчества — формирование статичного изображения при помощи короткой программы. Стандартные ограничения на размер — 4 кб, 1 кб, 256 байт.
Связана недооценка, думаю, с тем, что конкурс одновременно не вполне понятен как тем, кто любит демки (поскольку процедурная графика статична), так и тем, кто любит картинки (т.к. процедурная графика не позволяет нарисовать что хочешь). И всё же, его популярность хоть и медленно, но растёт.
Первые работы во многом были вызваны интересом к теме трассировки лучей (raytracing). Сам по себе алгоритм довольно простой, но требует много вычислений, поэтому работы стали возможны, когда распространились компьютеры с, во-первых, достаточно высокой производительностью и, во-вторых, с достаточным количеством отображаемых цветов (или, хотя бы, градаций серого). Я порылся на pouet и нашёл одну из первых работ в категории «procedural graphics» — Digital Phantasy by EG:
Эта 1 кб работа под DOS вышла в 1997 году. Помню, в том же году мы с друзьями развлекались написанием простых программ для raytracing’a блестящих шариков на IBM PS/2 Model 30 286 с монохромным MCGA монитором. Совпадение по времени не случайно, на raytracing тогда вообще была мода — в рекламе компьютеров и мониторов часто можно было видеть подобные изображения.
Другой темой, популярность которой стала расти немного позднее, были фракталы. Скажем, вот 2-million-Polys-and-some-Moonlight by Apocalypse Inc (4 кб, 2005 год, PC/Windows) :
или Versus 4k by Fulcrum (4 кб, 2008 год, PC/Windows):
Довольно впечатляющие, хоть и схематичные изображения можно получить даже просто кривыми — Blacklines by Calodox (4 кб, 2007 год, PC/Windows) :
И конечно, удобными объектами для визуализации являются те, которые содержат повторяющиеся элементы Klava by Quite & Youth Uprising (4kb, 2008 год, PC/Windows):
Из-за низкой скорости вычислений, формирования сложных реалистичных изображений поначалу приходилось ждать довольно долго. Однако, с ростом производительности компьютеров и возможностей видеокарт стали появляться намного более сложные и реалистичные работы. К примеру, в 2022 году 4 кб работа Orders of Magnitude by Bitshifters Collective (PC, Windows) выглядела так (обратите внимание на текстуры и мелкие детали):
Можно сочетать сразу несколько подходов — разные геометрические примитивы, их повторение, искажение. А потом ещё и применить raymarching. Hoody by Rgba (4 кб, 2020 год, PC/Windows):
Или вот I felt the earth breathing by Quite, тоже 4 кб для PC/Windows (2009 год):
Фактически, работы занимающие единицы килобайт, становятся неотличимы от фотографий — RiverScape by Razor 1911 (4 кб, 2023 год, PC/Windows):
Существует масса алгоритмов, которые могут быть использованы при создании интересных изображений — помимо упомянутых, это l-systems, генетические алгоритмы, metaballs, шум Перлина, диаграммы Вороного и другие.
Как и в случае с демками, у процедурной графики параллельно с прогрессом в плане реалистичности и качества изображения можно наблюдать и другую тенденцию, когда люди пытались и пытаются изобразить что-то совсем уж ограниченными средствами и на компьютерах, которые на момент создания работы уже устарели (и даже не всегда предназначены для показа изображений). К примеру, сравнительно свежая (2022) работа Necropolis 3071 a.d. by Haujobb под PC/DOS, занимающая всего лишь 256 байт:
А вот и вовсе работа для ZX Spectrum (Northern sunset s! lence by bfox), тоже занимающая 256 байт. Как видим, если цветов мало — можно, во-первых, имитировать их большее, чем есть, количество, а во-вторых, показывать лишь силуэт :
Другой подход — использование уже имеющихся в ПЗУ символов знакогенератора, как например в 4 кб работе Unfall beim Bügeln by Metalvotze для Commodore 64 (используются символы PETSCII):
В работе Inanna by DreamWeb (4 кб, Commodore Amiga, 2023 год) мы видим не просто схематичный рисунок, но сама схематичность стала идеей — летающие треугольники подчеркивают «нормальность» того, что изображение само состоит из полигонов:
Что можно запихнуть в 256 байт (работа Planet by Desire) на Apple II с крайне примитивной графикой? Ну, определённо космос — он же по большей части чёрный:
В целом суть в игре на аппаратных особенностях — на одном компьютере вы получите выигрыш от большого количества цветов или их имитации градиентом (Commodore Amiga, C64). На другом можно рисовать идеально гладкие кривые без всяких синусов (Vectrex). На третьем — использовать видеопроцессор для рисования полигонов (Sony Playstation 1) и т.д.
При этом у каждой из этих платформ есть также и свои недостатки — скажем, у RISC процессоров это большой объём кода, у ZX Spectrum или старых PC — отсутствие аппаратной поддержки рисования примитивов, у компьютеров с векторным устройством отображения — сложность сплошной заливки области и т.д.
Везде получается игра с возможностями и ограничениями. Для старых платформ ограничение размера в конкурсе процедурной графики обычно не более 1 кб, поскольку в 4 кб на некоторых платформах можно легко поместить готовую картинку даже без сжатия — т.е. теряется смысл конкурса. Кстати, пара работ из тех, что показаны выше — была представлена на Chaos Constructions в Питере. В этом году он проводится снова (24–25 августа в ДК Кирова) и мне, как автору одной из двух уже поданных туда (конкретно на procedural graphics) работ, хочется больше конкуренции. Приглашаю поучаствовать!
Большой вопрос во всей истории с процедурной графикой — где проходит черта между ней и обычной распаковкой сжатого изображения? Почему нельзя считать комбинацию из jpeg+распаковщик процедурной графикой? Чёткой границы конечно нет. С одной стороны, авторам просто нет особого смысла обманывать (да и всё равно рано или поздно, если работа станет известной, кто-то это раскопает), с другой — упаковать качественное реалистичное изображение высокого разрешения в 4 кб — весьма проблематично. Во многом ситуация тут схожа с запретом чистой анимации в демках.
В качестве иллюстрации — работа для Atari XE/XL, что называется, «на грани» с распаковкой — Mona by Ilmenit. Здесь в 256 байт умята Мона Лиза. Исходные данные для «мазков» были подобраны, фактически, перебором — за несколько дней работы мощного компьютера: