Среди многочисленных демосценерских конкурсов, которые традиционно входят в программу различных demo party, незаслуженно недооценённым, на мой взгляд, является конкурс процедурной графики (procedural graphics). Смысл этого специфического вида компьютерного творчества - формирование статичного изображения при помощи короткой программы. Стандартные ограничения на размер — 4кб, 1кб, 256 байт.
Связана недооценка, думаю, с тем, что конкурс одновременно не вполне понятен как тем, кто любит демки (поскольку процедурная графика статична), так и тем, кто любит картинки (т.к. процедурная графика не позволяет нарисовать что хочешь). И всё же, его популярность хоть и медленно, но растёт.
Первые работы во многом были вызваны интересом к теме трассировки лучей (raytracing). Сам по себе алгоритм довольно простой, но требует много вычислений, поэтому работы стали возможны, когда распространились компьютеры с, во‑первых, достаточно высокой производительностью и, во‑вторых, с достаточным количеством отображаемых цветов (или, хотя бы, градаций серого). Я порылся на pouet и нашёл одну из первых работ в категории «procedural graphics» — Digital Phantasy by EG:
![Digital Phantasy by EG Digital Phantasy by EG](https://habrastorage.org/getpro/habr/upload_files/1dc/76b/060/1dc76b0606f7b11bc6da155dfef8053d.png)
Эта 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):
![2-million-Polys-and-some-Moonlight by Apocalypse Inc 2-million-Polys-and-some-Moonlight by Apocalypse Inc](https://habrastorage.org/getpro/habr/upload_files/eda/67c/b43/eda67cb439cc9269ec5ea4eba2b31f20.png)
или Versus 4k by Fulcrum (4кб, 2008 год, PC/Windows):
![Versus 4k by Fulcrum Versus 4k by Fulcrum](https://habrastorage.org/getpro/habr/upload_files/81d/40f/952/81d40f95228173d8316ec50927cb8fd8.png)
Довольно впечатляющие, хоть и схематичные изображения можно получить даже просто кривыми — Blacklines by Calodox (4кб, 2007 год, PC/Windows):
![Blacklines by Calodox Blacklines by Calodox](https://habrastorage.org/getpro/habr/upload_files/273/cde/664/273cde66475034daf7f33788f868cd7a.png)
И конечно, удобными объектами для визуализации являются те, которые содержат повторяющиеся элементы Klava by Quite & Youth Uprising (4kb, 2008 год, PC/Windows):
![Klava by Quite & Youth Uprising Klava by Quite & Youth Uprising](https://habrastorage.org/getpro/habr/upload_files/0ca/708/563/0ca70856396dcd1e8f6b503d51ea8145.jpg)
Из-за низкой скорости вычислений, формирования сложных реалистичных изображений поначалу приходилось ждать довольно долго. Однако, с ростом производительности компьютеров и возможностей видеокарт стали появляться намного более сложные и реалистичные работы. К примеру, в 2022 году 4кб работа Orders of Magnitude by Bitshifters Collective (PC, Windows) выглядела так (обратите внимание на текстуры и мелкие детали):
![Orders of Magnitude by Bitshifters Collective Orders of Magnitude by Bitshifters Collective](https://habrastorage.org/getpro/habr/upload_files/8be/90d/789/8be90d789755064592100533027c0d51.png)
Можно сочетать сразу несколько подходов - разные геометрические примитивы, их повторение, искажение. А потом ещё и применить raymarching. Hoody by Rgba (4кб, 2020 год, PC/Windows):
![Hoody by Rgba Hoody by Rgba](https://habrastorage.org/getpro/habr/upload_files/c64/536/00e/c6453600e1fa2758f677dc43f29226ee.png)
Или вот I felt the earth breathing by Quite, тоже 4кб для PC/Windows (2009 год):
![I felt the earth breathing by Quite I felt the earth breathing by Quite](https://habrastorage.org/getpro/habr/upload_files/373/5dd/734/3735dd7349ff6da0a093173190555bc8.png)
Фактически, работы занимающие единицы килобайт, становятся неотличимы от фотографий — RiverScape by Razor 1911 (4кб, 2023 год, PC/Windows):
![RiverScape by Razor 1911 RiverScape by Razor 1911](https://habrastorage.org/getpro/habr/upload_files/783/0b8/32b/7830b832ba08c25c181a11ec830c8e8e.jpg)
Существует масса алгоритмов, которые могут быть использованы при создании интересных изображений — помимо упомянутых, это l-systems, генетические алгоритмы, metaballs, шум Перлина, диаграммы Вороного и другие.
Как и в случае с демками, у процедурной графики параллельно с прогрессом в плане реалистичности и качества изображения можно наблюдать и другую тенденцию, когда люди пытались и пытаются изобразить что-то совсем уж ограниченными средствами и на компьютерах, которые на момент создания работы уже устарели (и даже не всегда предназначены для показа изображений). К примеру, сравнительно свежая (2022) работа Necropolis 3071 a.d. by Haujobb под PC/DOS, занимающая всего лишь 256 байт:
![Necropolis 3071 a.d. by Haujobb Necropolis 3071 a.d. by Haujobb](https://habrastorage.org/getpro/habr/upload_files/93a/9f3/e86/93a9f3e86c5569ce3cca705aabcb1ce4.png)
А вот и вовсе работа для ZX Spectrum (Northern sunset s!lence by bfox), тоже занимающая 256 байт. Как видим, если цветов мало — можно, во‑первых, имитировать их большее, чем есть, количество, а во‑вторых, показывать лишь силуэт:
![Northern sunset s!lence by bfox Northern sunset s!lence by bfox](https://habrastorage.org/getpro/habr/upload_files/d23/280/ab6/d23280ab6c20570e94127cbf6d85769d.jpg)
Другой подход — использование уже имеющихся в ПЗУ символов знакогенератора, как например в 4кб работе Unfall beim Bügeln by Metalvotze для Commodore 64 (используются символы PETSCII):
![Unfall beim Bügeln by Metalvotze Unfall beim Bügeln by Metalvotze](https://habrastorage.org/getpro/habr/upload_files/6b9/bdb/409/6b9bdb409a3960b39ab98c194add63dc.png)
В работе Inanna by DreamWeb (4кб, Commodore Amiga, 2023 год) мы видим не просто схематичный рисунок, но сама схематичность стала идеей — летающие треугольники подчеркивают «нормальность» того, что изображение само состоит из полигонов:
![Inanna by DreamWeb Inanna by DreamWeb](https://habrastorage.org/getpro/habr/upload_files/65b/5b8/4ec/65b5b84ec42b6fcf97a37c0b6a84a481.png)
Что можно запихнуть в 256 байт (работа Planet by Desire) на Apple II с крайне примитивной графикой? Ну, определённо космос — он же по большей части чёрный:
![Planet by Desire Planet by Desire](https://habrastorage.org/getpro/habr/upload_files/f94/c3a/430/f94c3a4304db66d1a9afeab1cb561daa.png)
В целом суть в игре на аппаратных особенностях — на одном компьютере вы получите выигрыш от большого количества цветов или их имитации градиентом (Commodore Amiga, C64). На другом можно рисовать идеально гладкие кривые без всяких синусов (Vectrex). На третьем — использовать видеопроцессор для рисования полигонов (Sony Playstation 1) и т.д.
![Кадр из 1кб интро Christmas tree goes to a party для Vectrex by Frog Кадр из 1кб интро Christmas tree goes to a party для Vectrex by Frog](https://habrastorage.org/getpro/habr/upload_files/d76/de5/611/d76de561102068c6c0195d3f0f2f29c6.jpg)
![1кб C'2024 Invtitation gfx для Sony Playstation 1 (PSX) by Frog 1кб C'2024 Invtitation gfx для Sony Playstation 1 (PSX) by Frog](https://habrastorage.org/getpro/habr/upload_files/b5d/292/415/b5d29241555ce7be0216adead371eda9.jpg)
При этом у каждой из этих платформ есть также и свои недостатки — скажем, у RISC процессоров это большой объём кода, у ZX Spectrum или старых PC — отсутствие аппаратной поддержки рисования примитивов, у компьютеров с векторным устройством отображения — сложность сплошной заливки области и т. д.
Везде получается игра с возможностями и ограничениями. Для старых платформ ограничение размера в конкурсе процедурной графики обычно не более 1кб, поскольку в 4кб на некоторых платформах можно легко поместить готовую картинку даже без сжатия — т. е. теряется смысл конкурса. Кстати, пара работ из тех, что показаны выше — была представлена на Chaos Constructions в Питере. В этом году он проводится снова (24–25 августа в ДК Кирова) и мне, как автору одной из двух уже поданных туда (конкретно на procedural graphics) работ, хочется больше конкуренции. Приглашаю поучаствовать!
Большой вопрос во всей истории с процедурной графикой — где проходит черта между ней и обычной распаковкой сжатого изображения? Почему нельзя считать комбинацию из jpeg+распаковщик процедурной графикой? Чёткой границы конечно нет. С одной стороны, авторам просто нет особого смысла обманывать (да и всё равно рано или поздно, если работа станет известной, кто‑то это раскопает), с другой — упаковать качественное реалистичное изображение высокого разрешения в 4кб — весьма проблематично. Во многом ситуация тут схожа с запретом чистой анимации в демках.
В качестве иллюстрации — работа для Atari XE/XL, что называется, «на грани» с распаковкой — Mona by Ilmenit. Здесь в 256 байт умята Мона Лиза. Исходные данные для «мазков» были подобраны, фактически, перебором — за несколько дней работы мощного компьютера:
![Mona by Ilmenit Mona by Ilmenit](https://habrastorage.org/getpro/habr/upload_files/7ea/3d8/847/7ea3d88477fcc6738b6d4609ac0f53a5.png)