Среди многочисленных демосценерских конкурсов, которые традиционно входят в программу различных demo party, незаслуженно недооценённым, на мой взгляд, является конкурс процедурной графики (procedural graphics). Смысл этого специфического вида компьютерного творчества - формирование статичного изображения при помощи короткой программы. Стандартные ограничения на размер — 4кб, 1кб, 256 байт.

Связана недооценка, думаю, с тем, что конкурс одновременно не вполне понятен как тем, кто любит демки (поскольку процедурная графика статична), так и тем, кто любит картинки (т.к. процедурная графика не позволяет нарисовать что хочешь). И всё же, его популярность хоть и медленно, но растёт.

Первые работы во многом были вызваны интересом к теме трассировки лучей (raytracing). Сам по себе алгоритм довольно простой, но требует много вычислений, поэтому работы стали возможны, когда распространились компьютеры с, во‑первых, достаточно высокой производительностью и, во‑вторых, с достаточным количеством отображаемых цветов (или, хотя бы, градаций серого). Я порылся на pouet и нашёл одну из первых работ в категории «procedural graphics» — Digital Phantasy by EG:

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):

2-million-Polys-and-some-Moonlight by Apocalypse Inc

или Versus 4k by Fulcrum (4кб, 2008 год, PC/Windows):

Versus 4k by Fulcrum

Довольно впечатляющие, хоть и схематичные изображения можно получить даже просто кривыми — Blacklines by Calodox (4кб, 2007 год, PC/Windows):

Blacklines by Calodox

И конечно, удобными объектами для визуализации являются те, которые содержат повторяющиеся элементы Klava by Quite & Youth Uprising (4kb, 2008 год, PC/Windows):

Klava by Quite & Youth Uprising

Из-за низкой скорости вычислений, формирования сложных реалистичных изображений поначалу приходилось ждать довольно долго. Однако, с ростом производительности компьютеров и возможностей видеокарт стали появляться намного более сложные и реалистичные работы. К примеру, в 2022 году 4кб работа Orders of Magnitude by Bitshifters Collective (PC, Windows) выглядела так (обратите внимание на текстуры и мелкие детали):

Orders of Magnitude by Bitshifters Collective

Можно сочетать сразу несколько подходов - разные геометрические примитивы, их повторение, искажение. А потом ещё и применить raymarching. Hoody by Rgba (4кб, 2020 год, PC/Windows):

Hoody by Rgba

Или вот I felt the earth breathing by Quite, тоже 4кб для PC/Windows (2009 год):

I felt the earth breathing by Quite

Фактически, работы занимающие единицы килобайт, становятся неотличимы от фотографий — RiverScape by Razor 1911 (4кб, 2023 год, PC/Windows):

RiverScape by Razor 1911

Существует масса алгоритмов, которые могут быть использованы при создании интересных изображений — помимо упомянутых, это l-systems, генетические алгоритмы, metaballs, шум Перлина, диаграммы Вороного и другие.

Как и в случае с демками, у процедурной графики параллельно с прогрессом в плане реалистичности и качества изображения можно наблюдать и другую тенденцию, когда люди пытались и пытаются изобразить что-то совсем уж ограниченными средствами и на компьютерах, которые на момент создания работы уже устарели (и даже не всегда предназначены для показа изображений). К примеру, сравнительно свежая (2022) работа Necropolis 3071 a.d. by Haujobb под PC/DOS, занимающая всего лишь 256 байт:

Necropolis 3071 a.d. by Haujobb

А вот и вовсе работа для ZX Spectrum (Northern sunset s!lence by bfox), тоже занимающая 256 байт. Как видим, если цветов мало — можно, во‑первых, имитировать их большее, чем есть, количество, а во‑вторых, показывать лишь силуэт:

Northern sunset s!lence by bfox

Другой подход — использование уже имеющихся в ПЗУ символов знакогенератора, как например в 4кб работе Unfall beim Bügeln by Metalvotze для Commodore 64 (используются символы PETSCII):

Unfall beim Bügeln by Metalvotze

В работе Inanna by DreamWeb (4кб, Commodore Amiga, 2023 год) мы видим не просто схематичный рисунок, но сама схематичность стала идеей — летающие треугольники подчеркивают «нормальность» того, что изображение само состоит из полигонов:

Inanna by DreamWeb

Что можно запихнуть в 256 байт (работа Planet by Desire) на Apple II с крайне примитивной графикой? Ну, определённо космос — он же по большей части чёрный:

Planet by Desire

В целом суть в игре на аппаратных особенностях — на одном компьютере вы получите выигрыш от большого количества цветов или их имитации градиентом (Commodore Amiga, C64). На другом можно рисовать идеально гладкие кривые без всяких синусов (Vectrex). На третьем — использовать видеопроцессор для рисования полигонов (Sony Playstation 1) и т.д.

Кадр из 1кб интро Christmas tree goes to a party для Vectrex by Frog
1кб C'2024 Invtitation gfx для Sony Playstation 1 (PSX) by Frog

При этом у каждой из этих платформ есть также и свои недостатки — скажем, у RISC процессоров это большой объём кода, у ZX Spectrum или старых PC — отсутствие аппаратной поддержки рисования примитивов, у компьютеров с векторным устройством отображения — сложность сплошной заливки области и т. д.

Везде получается игра с возможностями и ограничениями. Для старых платформ ограничение размера в конкурсе процедурной графики обычно не более 1кб, поскольку в 4кб на некоторых платформах можно легко поместить готовую картинку даже без сжатия — т. е. теряется смысл конкурса. Кстати, пара работ из тех, что показаны выше — была представлена на Chaos Constructions в Питере. В этом году он проводится снова (24–25 августа в ДК Кирова) и мне, как автору одной из двух уже поданных туда (конкретно на procedural graphics) работ, хочется больше конкуренции. Приглашаю поучаствовать!

Большой вопрос во всей истории с процедурной графикой — где проходит черта между ней и обычной распаковкой сжатого изображения? Почему нельзя считать комбинацию из jpeg+распаковщик процедурной графикой? Чёткой границы конечно нет. С одной стороны, авторам просто нет особого смысла обманывать (да и всё равно рано или поздно, если работа станет известной, кто‑то это раскопает), с другой — упаковать качественное реалистичное изображение высокого разрешения в 4кб — весьма проблематично. Во многом ситуация тут схожа с запретом чистой анимации в демках.

В качестве иллюстрации — работа для Atari XE/XL, что называется, «на грани» с распаковкой — Mona by Ilmenit. Здесь в 256 байт умята Мона Лиза. Исходные данные для «мазков» были подобраны, фактически, перебором — за несколько дней работы мощного компьютера:

Mona by Ilmenit

Комментарии (19)


  1. qiper
    12.07.2024 18:57

    Идеальный архиватор - реализующий нечто подобное, но в обратную сторону)


  1. haqreu
    12.07.2024 18:57
    +5

    На самом деле, 4кб звучит здорово, а потом узнаешь, что можно линковать opengl и всякое другое, и резко становится неинтересно...


    1. frog Автор
      12.07.2024 18:57
      +4

      Вот в том числе по подобным причинам я лично предпочитаю старые платформы


      1. haqreu
        12.07.2024 18:57
        +1

        Ха, только что ответил в том же духе!


      1. haqreu
        12.07.2024 18:57
        +19

        Для самостоятельного творчества старые платформы малодоступны, а эмуляторы неинтересны.

        Я в последнее время развлекаюсь графикой в текстовой консоли при помощи эскейп-последовательностей.

        73 строчки голого си:


        1. Wesha
          12.07.2024 18:57
          +7

          73 строчки голого си

          В студию!


          1. haqreu
            12.07.2024 18:57
            +20

            https://github.com/ssloy/tinycompiler/blob/main/test-programs/gfx/race.c

            Там рядом и другая мелочь есть.


            1. Dimsml
              12.07.2024 18:57

              Эх, помнится 10 лет назад на Хабре все дружно писали маленькие приложения в 40 строк что ли.

              Спасибо за ностальгию!


            1. checkpoint
              12.07.2024 18:57

              Офигенно круто! Но под фрей в видеотерминале (ttyv) почему-то не работает - отображает всякий мусор.


    1. haqreu
      12.07.2024 18:57
      +1

      Вот 256 байт apple ii (насколько я помню, там умножения в ассемблере не было) и Мона Лиза для атари - это круто!


    1. ImagineTables
      12.07.2024 18:57
      +7

      Очень смешно. 99% программистов, даже если им прилинковать все API в мире, да даже если снять ограничения на размер, такую дискету не нарисуют.

      Я один из них, и особо не стесняюсь признаться. У меня мозги под это не заточены. Когда я вижу процедурную генерацию, то думаю, каким софтом заскалптить и отрендерить эту картинку, чтобы запихать в ресурсы (в наши дни, когда мы писали игры, то ценилось умение найти, что из рантайма ещё можно вычислить в дизайнтайме). Тем не менее, я увОжаю любое искусство... А это, безусловно, настоящее искусство!


      1. haqreu
        12.07.2024 18:57
        +7

        На самом деле, вы просто мало с графикой сталкивались. Там две с половиной техники в подавляющем большинстве случаев. Inigo Quilez, конечно, в этом мире один (создатель shadertoy и автор вон той девочки в капюшоне). Но его техники лично меня оставляют равнодушным, очень здорово, но нет там искры.

        А вот этот бублик гениален:

        https://github.com/BrunoLevy/TinyPrograms/blob/main/donut.c

        Отрисовка квадрик в целочисленной арифметике - это огонь.


        1. haqreu
          12.07.2024 18:57
          +9

          На всякий случай ссылка на объяснение работы бублика (ну и собственно, анимация там тоже есть для тех, кому лень компилировать код)

          https://www.a1k0n.net/2011/07/20/donut-math.html


  1. perfect_genius
    12.07.2024 18:57

    Надеюсь, в ближайшем будущем подобным начнёт удивлять нейросеть. Т.е. будет конкурировать с людьми и даже превзойдёт.


    1. Wesha
      12.07.2024 18:57
      +1

      Надеюсь, в ближайшем будущем подобным начнёт удивлять нейросеть.

      Как бы помягче сказать...


    1. haqreu
      12.07.2024 18:57
      +1

      В демосцене? Это вряд ли.


  1. RolexStrider
    12.07.2024 18:57
    +6

    https://www.youtube.com/watch?v=G1Q9LtnnE4w - вот это было, есть и будет для меня эталоном. Графика, музыка, полноценный 3D-движок, ВЕСЬ контент генерируется процедурно, никаких зависимостей. Чистый DOS. 4K.


    1. grigr
      12.07.2024 18:57

      Это была Легенда ))


    1. haqreu
      12.07.2024 18:57

      Ну вот это да, это настоящие 4k.