Как все это может вписаться в 64 КБ?


45

Итак, я здесь, на собрании 2011 года, и там было сыграно это демо: http://www.youtube.com/watch?v=69Xjc7eklxE&feature=player_embedded

Это только один файл, это сказано в правилах. Итак, я повторяю, как они сделали это, чтобы вписаться в такой маленький файл?


Можно ли загрузить эту демоверсию? Хотелось бы посмотреть, как это работает при локальном запуске.
Дэвид

1
Да, вы можете найти это демо здесь: ftp.untergrund.net/users/atzAdmin/fltatz_uncovering_static.zip
Самули Лехтонен

Конечно , есть в несколько мегабайтов системных библиотек , без которых эта вещь не была бы в состоянии сделать один полигон ...
Hobbs

2
Как кто-то, кто активно создает 64-килобайтные вступления, я написал эту статью: ctrl-alt-test.fr/?p=494 (Как демосцены могут быть такими маленькими?). TL; DR: процедурная генерация, сжатие и много дополнительной работы.
Лоран

1
@TeamUpvote Нет, это все C ++. Чтобы опуститься ниже 12 КБ, вам нужно избавиться от стандартной библиотеки. Если вы используете Visual C ++, вы можете найти примеры здесь: github.com/laurentlb/Ctrl-Alt-Test/tree/master/F и iquilezles.org/code/framework64k/framework64k.htm .
Лоран

Ответы:


39

Это процедурное основание. Содержание не входит в exe, только правила того, как его нарисовать. При запуске программа рисует то, что ей нужно, чтобы во время выполнения она не была предварительно отрисована или предварительно сохранена в любой форме.

Это тот же метод, который используется в Elite для создания огромной вселенной звездных систем и т. Д.

Это довольно удивительно, что возможно сегодня, используя процедурную генерацию, я думаю, что игры будут включать в себя больше этого в будущем.


Я просто подумал, что текстуры довольно точные. Так что они просто рисуют это с помощью кода и без каких-либо текстурных файлов?
Самули Лехтонен

1
Да это правильно.
Гэри Уиллоуби

1
Для таких демонстраций звук также генерируется из кода (без сэмплов). Все синтезируется на лету ... и, конечно, некоторые титры и сцены исчезновения позволяют выполнять тяжелые предварительные вычисления :)
Karoly Horvath

2
Как бывший 3d художник, я давно хотел, чтобы процедурно сгенерированные текстуры были включены в качестве стандартного набора инструментов в основные программы 3D-графики. Вероятно, наиболее близким является использование встроенного языка сценариев ....
Darknight

Возможно, вас заинтересуют такие вещи, как Project Frontier и Procedural World , которые представляют собой два подхода к одной и той же проблеме через процедурную генерацию.
Kyte

10

Как говорит @Gary Willoughby, это в значительной степени процедурно.

Кроме того, требуется значительное ручное asmкодирование, а также обширные знания о том, сколько окон / платформ выбранных систем работают внутри.

Существует также демонстрационная категория 4K, если вы хотите увидеть еще более экстремальные примеры компактного кода.

Некоторые из групп DemoScene выпускают свои демо-версии онлайн, где вы можете скачать их и поиграть, если хотите.

Заговор
фарб-рауш

Также смотрите Википедию об истории демо-сцены

Примечание - много демок приведет к тому , антивирус для наркомана . По сути, кажется, что почти все демо-версии используют упакованные файлы .exe, и большинство демонстрационных групп выпускают свои собственные упаковщики. К сожалению, поскольку многие AV-компании не работают, они, как правило, утверждают, что любой упакованный двоичный исполняемый файл является своего рода вирусом.


1
Мне остается задаться вопросом, какую AV-компанию ты имеешь в виду, даже будучи не хромой ...
Джерри Коффин

+1 Потрясающие вещи. Они используют API-интерфейсы Nvidea или рисуют прямо на видеокарту?

1
Обычно они устанавливают минимальную платформу OpenGL и запускают некоторые шейдеры, чтобы сделать все остальное
Джаспер Беккерс

3
Это действительно впечатляющие вещи. Я думаю, что если бы я был на 15 лет моложе, это было бы тем, чем я бы занимался в свободное время.

Вот несколько демонстрационных сборок 2011 года: archive.assembly.org/2011
Самули Лехтонен,

4

Как все говорят, они широко полагаются на процедурно-сгенерированный код, но в этом демо есть еще кое-что, в частности, если вы остановитесь и посмотрите на некоторые детали, давайте рассмотрим, например, эти стены: посмотрите, какие кирпичи и как на них отражается свет. Они выглядят естественно.

Это потому, что они используют много вершинных шейдеров и фрагментных шейдеров, чтобы оживить сгенерированный контент.

Я потратил некоторое время, пытаясь понять, как они делают такие вещи, и чувствовал себя пораженным каждым фрагментом кода, который я извлекал из этих демонстраций.

Кстати, при выполнении этих демонстраций они также используют инструменты сжатия, чтобы сжать еще больше. проверьте этот процесс компиляции:

all:
nasm -f bin -o intro main.asm
nasm -f bin -o stub stub.asm
gzip -n --best intro
advdef -z -4 intro.gz
cat stub intro.gz > intro
chmod +x intro
rm intro.gz
rm stub

3

Существует презентация PowerPoint о том, как рендеринг был выполнен в этой конкретной демонстрации. Уже одно это не объясняет, как все вписывается в 64 килобайта, но является ключом к тому, как геометрия была создана в таком небольшом пространстве.

В его блоге также есть много интересного о других его демосценах.


1

Как уже говорили другие, многое из этого зависит от процедурно генерируемых активов.

В этом есть еще один элемент - сжатие. В демонстрациях 4k и 64k используются узкоспециализированные исполняемые компрессоры. Наиболее известными из них являются kkrunchy by farbrausch (для 64ks) и crinkler от TBC & Loonies (для 4ks). Более того, современные демо-версии активно используют шейдеры, которые представляют собой простой текст и, следовательно, значительно уменьшаются после сжатия.

Теперь, что касается интеграции в видеоигры, главная проблема в том, что все это требует времени. Генерация процедурного контента занимает много времени, а извлечение исполняемого файла занимает огромное количество времени. И люди обычно имеют больше места на своих жестких дисках, чем тратят время на ожидание загрузки игры, поэтому я не думаю, что мы увидим много этого в широко доступных играх в ближайшее время.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.