Комментарии 42
не 3D модель — это алгоритмы
Что, в данном случае, имеется в виду под "3D модель" ?
Всё таки это 3D модель + программа шейдер. :)
Если вы не видите разницы между массивом чисел и вычисляемой во время работы функцией, которая этот массив формирует, то я видимо не смогу вам ее объяснить.
Это не совсем так. Модель как правило уже рассчитана заранее и захардкожена, а функцией на неё наращивается мясо и производятся всяческие трансформации над ней. Можно конечно исходную модель рассматривать как комплексный набор исходных параметров функции, если Вы настаиваете. :)
3д модель обычно содержит информацию о геометрии объекта, которой в данном случае нет - только набор параметров функций, чтобы сгенерировать её. Собственно про это и говорит автор поста - нет модели, только шейдеры.
нет модели, только шейдеры.
Эм нет, в оригинале все еще круче: шейдеров тоже нет ))
Шейдеры есть в портированной на WebGL версии, оригинал создает статичную картинку девушки в худи одними только алгоритмами.
В оригинальной демо нет никаких внешних библиотек кроме одной, отвечающей за формат изображения.
Настолько все круто.
Шейдер это не внешняя библиотека, а минипрограмма предназначенная для исполнения на GPU - фактически небольшой набор инструкций и вызовов функций. Не знаю как работает оригинал, но вызов алгоритмов по сути и есть тот самый шейдинг. Поэтому не важно, отправляет ли он эти инструкции куда-то на GPU или же исполняет их тут же на процессоре и выплёвывает PNG.
Почитал обсуждение.
Похоже, что обычная ситуация нишевой терминологии, когда в одном случае термин "математический расчёт" брендировался красивым термином, а в другом - самим термином "математический расчёт". :)
Меш. Там SDF-функции и булевы операции вместо меша. И реймаршер, который это рисует.
Кстати, для желающих пощупать демосцену за пиксели и эти ваши чиптюны есть бодрый движок на луях https://github.com/hugeping/rein родом из наших палестин.
Недавно узнал, что есть целая виртуальная демосценерская консоль TIC-80, её тоже на Луях...
FreeBSD - мягко говоря не самая подходящая система для занятия оптимизированной графикой
А что с ней не так? Иксы и иксы, как и везде. Эдак можно сказать, что любой юникс - не самая подходящая среда, но помнится, первую "Матрицу" рендерили именно на кластере FreeBSD-машин.
первую "Матрицу" рендерили именно на кластере FreeBSD-машин.
Вот это поворот, чего не знал того не знал:
Manex Visual Effects used 32 Dell Precision 410 Dual P-II/450 Processor systems running FreeBSD as the core CG Render Farm. Charles Henrich, the senior systems administrator at Manex, says, "We came to a point in the production where we realized we just did not have enough computing power on our existing SGI infrastructure to get through the 3-D intensive sequences. It was at that point we decided on going with a FreeBSD based solution, due to the ability to get the hardware quickly as well as the reliability and ease of administration that FreeBSD provides us. Working with Dell, we purchased 32 of these systems on a Wednesday, and had them rendering in production by Saturday afternoon. It was truly an amazing effort on everyone’s part, and I don’t believe it would’ve been possible had we chosen to go with any other Operating System solution."
Но если откинуть все фанатские эмоции и обратить внимание на год, то станет понятно что речь все же про CPU и раскидывание нагрузки по отрисовке между мощными рабочими станциями. Это не совсем тоже самое что и программная отрисовка на экране.
Большое спасибо за статью. Всё попробовал, покомпилял и посмотрел на FreeBSD 13.3-RELEASE на ноутбуке Lenovo. Вставлю свои пять копеек.
Ghosts of Mars собралась и чудесно работает, графика отпадная. Использует встроенную видюху (amdgpu).
Yog-Sothoth при работе выдает в stdout текст шейдеров на языке GLSL и статистику их компиляции - весьма интересно.
SDL отпадная ультра-кроссплатформенная и весьма минималистичная библиотека для всякой графики и звука. Но для приложений лучше использовать более современный её вариант - SDL2. Она поддерживает Vulkan и прочие фишки современных акселераторов, при этом остается такой же минималистичной в плане зависимостей. Правда из неё убраны некоторые совсем уж архаичные платформы (Atari MiNT, AmigaOS, Windows 95, BeOS, MacOS9).
БК как и Atari - компы моего детства. Рад, что кто-то продолжает для них кодить. Последнее что я видел для БК это Good Apple.
В 90-х я тоже немного баловался с написанием демок и занимался code bumping-ом (оптимизацией кода на асме с целью уталкивания в заданные размеры). Мой рекорд был 97 байт .COM файл отрисовывающий множество Жюлиа. Но dirojed.com просто убил меня. Убил и сьел! 32 байта это как ? При этом оно еще умудряется опрашивать клавиатуру (in al,60h). Вот все 15 ассемблерных команд этого шедевра:
C:\>2ASM.EXE DIROJED.COM

PS: Всем нашим маленьким коллективом этим августом побывали на Chaos Constructions 2024 в Питере - демок и аппаратуры было мало, организация была слабой, но всё равно мы вернулись довольные. :-)
Ghosts of Mars собралась и чудесно работает, графика отпадная. Использует встроенную видюху (amdgpu).
Надо было скриншоты выкладывать, а лучше - видео ) На дискретной графике будет разумеется сильно быстрее и красивей все бегать.
Правда из неё убраны некоторые совсем уж архаичные платформы (Atari MiNT, AmigaOS, Windows 95, BeOS, MacOS9).
Не эксперт по Амиге, видел ее лишь в эмуляторе, но нашел вот такое:
https://github.com/AmigaPorts/SDL
Но в любом случае насколько успел изучить вопрос - подразумевается кросс-компиляция в случае Амиги, не сборка на ней самой.
Chaos Constructions 2024 в Питере
В 2023м же отменяли? Думал все - с концами. Но рад что кто-то еще занимается )
У меня в ноуте две видюхи с ускорителем: встроенная в Ryzen5 (amdgpu) и дискретная Nvidia RTX 3050. Демка ghosts_of_mars запускается на обеих картах, качество графики и динамика одинаковая. Возможно, что на Nvidia число FPS будет поболее, но на глаз это не оценить.
Демка ghosts_of_mars на FreeBSD 13.3 и встроенной amdgpu


Демка ghosts_of_mars на FreeBSD 13.3 и Nvidia RTX 3050

Но dirojed.com просто убил меня. Убил и сьел! 32 байта это как
Это все магия ;)
Сам dirojed не нашел, зато есть вот такой интересный порт другой демо этого автора на WebGL.
С характерной строчкой из описания:
It is not an entirely accurate translation of the algorithm, but it is fairly close. It is also nowhere near 256 bytes - it is closer to 4k, not counting the parts that aren't related to the effect as such.
А как оно отрисовку делает? 013h?
Из кода видно, что демка устанавливает режим 13h (VGA 320x240) через Int 10h и потом пишет в область памяти на которую указывает пара DS:BX, при этом предварительно инициализирует её командой lds bx,[bx]. Я немного потрассировал прогу в отладчике AFD.EXE. Пара DS:BX до инициализации ссылается на нулевую ячейку сегмента кода, после загрузки DS:BX становится равным 9FFF:20CD. Учитывая что в реальном режиме у нас всего 20-ти битные адреса, то получаем адрес 0xA20BD который случайным образом попадает в область видеопамяти, она начинается с 0xA0000 (или A000:0000). Далее идет приращение BX по непонятному алгоритму.
Кстати, финские демки у меня тоже собрались в бинарь обьемом более мегабайта, хотя они заявлены как 4k intro. Не представляю каким способом такой бинарь можно ужать до 4К. strip уже сделан, отладочной инфы в эльфе нет.
Не представляю каким способом такой бинарь можно ужать до 4К.
Надо внимательно смотреть скрипты сборки в каждой демке, хотя авторы не всегда выкладывают часть которая отвечает за минимизацию и подготовку.
Может быть вот такое:
SFLAGS = -K .bss -K .text -K .data -R .comment -R .note -R .note.ABI-tag -R .fini -R .gnu.version #-R .data
Те тут вырезается далеко не только отладочная информация.
Я пробовал натравить strip с этими параметрами на ghost_of_mars, но это не дало результата - размер файла остался прежним и составил 1285472 байта. Я загляну в него readelf-ом и увидел, что размеры секций .text и .rodata составляют 943762 и 129328 байт соответвенно. Эти секции, как Вы понимаете, удалить из эльфа не выйдет. Единственное что с ними можно сделать это сжать каким нибудь алгоритмом, но это должен быть суперэффективнй алгорим, чтобы из 1073090 байт получить исполняемый файл размером не более 4096 байт. Короче, вопрос "почему демки из компо 4K into имеют размер бинарника более мегабайта" для меня остался нераскрытым.
PS: Утилита компрессии исполняемых файлов upx под Фрю есть в пакеджах, но с фрюшными эльфами работать отказывается, пишет UnknownExecutableFormatException.
почему демки из компо 4K into имеют размер бинарника более мегабайта
Это же сцена а не обычный билд )
Может быть все что угодно включая ручную правку HEX-редактором.
Короче, вся магия находится в dnload.py который вызывается из скрипта ./release.sh.
dnload.py - Minimal binary generator for *nix operating systems.

Прямо бальзам на душу старого фрюховода. ;)
После установки dnload.py и запуска ./release.sh получил следующие бинари:

Эти финские парни отморожены на обе головы. Побольше бы таких. :)
Вот, состряпал на скорую руку по мотивам одного из видео. Только для FreeBSD:
Генерация звука для демки
% cat test1.c
#include <stdio.h>
#include <stdlib.h>
char *dsp_dev = "/dev/dsp1.0";
int main(int argc, char *argv[]) {
int samples = 1000000;
if(argv[1])
samples = atoi(argv[1]);
FILE *dsp = fopen(dsp_dev, "a+b");
if(!dsp) {
perror("fopen");
return -1;
}
for(int t=0;samples;t++,--samples)
fputc((t&t%255)-(t*3&t>>13&t>>6), dsp);
return 0;
}
% cc -o test1 test1.c
% ./test1
Добавил еще пару вариантов и выложил на Github: https://github.com/pointcheck/generated_music
Появилась видеозаметка про прошедший недавно в Питере Chaos Constructions 2024.
heaven seven по возрасту около 20 лет. Ещё в начале 2000-х её видели.
На Ассемблере нечто эффектное попроще вмещали в 4Кб! У современного человека будет шок от таких размеров.
Демосцена и FreeBSD