В последнее время на международных demoparty в обязательном порядке присутствует номинация, которая специально создана для того, чтобы привлекать новых (или давно не появляющихся) программистов, и позволяет делать демо без оглядки на какие-либо ограничения. Ограничений в такой номинации на платформу, технологии, размер попросту отсутствуют. Твори на чем можешь и как хочешь! Условие только одно: в данной номинации демо может содержать только один эффект, другими словами, разрешена только одна сцена. На фестивале CC2021 была такая номинация, называлась она One Scene demo compo (combined).
Про былое... Последний раз, когда я писал демо для demoparty - это был 1999 год. Да, 22 года назад в г. Ростов-на-Дону проходила demoparty Paradox-99. Тогда я сделал сразу 2 демо: Spear на номинацию 512 byte и Storm на номинацию 256 byte. Демо Storm писалась вдвоем с Максимом Журовичем: Максим делал эффект волнующегося моря, а я добавлял звук. Это была первая в мире демо размером 256 byte со звуком для платформы PC. Сейчас уже научились делать демо размером 64 byte со звуком, но тогда засунуть в 256 byte и графику и звук - это было что-то немыслимое. В общем, памятуя о старом демосценерском опыте, я решил сделать новое демо для demoparty CC2021, чтобы поддержать отечественную демосцену.
Так как я пользуюсь ОС Linux, то демо решено было делать с помощью кроссплатформенных инструментов. А это значило, что для графики следует использовать OpenGL. Делать графику на процессоре во времена, когда существуют 3D-ускорители и шейдеры, мне не очень хотелось, поэтому я решил одним махом решить две проблемы: выбрать кроссплатформенный фреймверк для шейдеров и найти готовую обвязку по созданию контекста рисования 3D через OpenGL. Этим решением оказалась кроссплатформенная утилита Bonzomatic с открытым исходным кодом.
Утилита Bonzomatic предназначена для проведения Live Coding compo (Shader Showdown), и не совсем подходила для проигрывания демо: например, в ней при запуске сразу отображается редактор текста с кодом шейдера. Поэтому я форкнул Бонзоматик и добавил в него поддержку трех опций: отключение показа кода шейдера при запуске, отключение курсора мышки, чтобы он не мешал просмотру, настройка выхода по кнопке ESC, как того требуют правила compo. Далее было дело техники: нарезка текстур, написание GLSL шейдера для сцены и собственная реализация Ray Marching, прикручивание проигрывания музыки в фоне.
В результате я написал демо Retrogram, которое заняло I место в One Scene demo compo:
Смотреть Live видео на Youtube
Вместе со мной первое место разделил товарищ Norduk, который известен в интернетах по стримам с прохождением игр на ретроплатформах ZX Spectrum и Радио-86РК. Его гипножаба тронула сердца всех спектрумистов, присутствующих на demoparty :). Одинаковое количество очков - два первых места, и такое бывает.
В момент показа демо возникло сразу две проблемы: новомодная карточка NVidia RTX 2080 Super не захотела понимать шейдеры, прекрасно работающие на более старых карточках NVidia, Radeon и Intel под Win и Lin (было заранее протестировано четыре конфигурации), и плата захвата не захотела выдавать изображение на проектор. В общем, первое впечатление не удалось, но организаторы быстро подсуетились и показали демо через HDMI с моего ноутбука с древней видюшкой Intel HD Graphics 4000, которая для демосцены не подходит от слова "совсем", но которая каким-то чудом выдавала сносный FPS.
Готовую сборку Retrogram можно скачать с официальной странички Retrogram на этом сайте. Исходники доступны на GitHub https://github.com/xintrea/retrogram. Эта сборка содержит итоговую версию Retrogram, работающую на GPU Radeon, Intel, NVidia в операционных системах Windows 7/10 и Linux Debian 10.
* * *
В следующей части обзора Chaos Constructions 2021 я выложу видео неофициальной части фестиваля с кулуарными разговорами с Norduk-ом. Алкоголь и ретрокомпьютеры - что может быть лучше?