:)

Заговор


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

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

В некотором смысле, то, что мы делаем в качестве демонстраций, относится к компьютеру таким, какой он есть на самом деле - большой коллекцией вычислительных ресурсов, которые не должны быть потрачены впустую. Это, в некотором смысле, также означает, что демосцена и демо в целом служат средой для вовлеченных людей, чтобы продемонстрировать свои навыки, передать свой художественный взгляд или сообщение или даже шокировать аудиторию: files.scene.org

Что означает исполняемый файл?

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

Что означает реальное время?

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

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

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


Что на самом деле означает «64k»?

Это означает, что то, что вы смотрите (или просто смотрели), является продуктом файла, размер которого не превышает 64 килобайт (или ну, кибибайт),или 65536 байт. Это довольно небольшой объем данных. Для сравнения, 4-минутная песня, записанная в формате MP3, может составлять от 4 до 10 мегабайт; Размер в 64 раза больше. Видео высокой четкости, сопровождающее эту песню, может составлять от 35 до 50 мегабайт; более чем в 500 раз больше размера. Даже самые маленькие известные носители информации на ПК, дискеты в 80-х годах,были способны хранить более мегабайта; наши интро могли поместиться на них более десятка раз.

Как вы можете уместить все это в 64k? Что это за «процедурные» вещи? 

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

Если это звучит немного сухо, вот относительно обыденный пример: 

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

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

Что мы делаем, так это проектируем простых «роботов», которые в нашем случае являются фрагментами кода, которые могут рисовать или издавать звуки, а затем пытаемся найти шаги, которые в конечном итоге создают наиболее яркие изображения и звуковые ландшафты. Как только это будет сделано, результирующий код и данные должны быть достаточно маленькими, чтобы их можно было обработать до 64 КБ.


Означает ли это, что ваши методы могут уменьшить размер, например, коммерческих игр с нескольких гигабайт до чего-то, что поместилось бы на дискете? 

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

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


Но вы используете кучу вещей из операционной системы! Эти библиотеки DLL составляют несколько сотен мегабайт! Это все еще 64k? Разве это не обман? 

Нет, по нашему мнению: мы считаем операционную систему (а вместе с ней драйверы и другие привязки API) неотъемлемой частью компьютера, чем-то, что необходимо для того, чтобы иметь возможность управлять аппаратным обеспечением, которое находится внутри машины. Чем мощнее становится аппаратное обеспечение, тем сложнее ОС и драйверы должны быть в состоянии справиться с ним, и тем больше мы, разработчики, зависим от чего-то, что является прочной основой для построения. 

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


Какой язык программирования вы используете? Все это написано в машинном коде, верно? 

Мы в основном используем C/C++; Большая часть того, что мы делаем, — это управление данными и абстракция, поэтому нам нужен был язык более высокого уровня, чтобы сохранить наше здравомыслие. Кроме того, компиляторы сегодня достаточно умны, чтобы быть на одном уровне или лучше, чем люди, когда дело доходит до оптимизации. 

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


Почему 64 килобайта? Почему не 128 или 32? 

Традиционно категория 64 килобайта формировалась потому, что в то время 64k была верхней границей COM-файла — это было связано с ограничением размера сегмента в определенном стиле программирования в то время. Техническое ограничение, конечно, было отменено позже, но произвольный верхний предел застрял. 

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

Есть отличное интервью с одним из наших старых друзей, Ryg из Farbrausch, где он объясняет, что, по его мнению (и по нашему), 64k - это отличное упражнение в создании плотных связок кода и искусства, где действительно нет места для бесплатных библиотек или ненужной абстракции - вам постоянно приходится следить и планировать то, что вы делаете, и каждая строка кода или фрагмент контента должны быть учтены. Это тот вид программирования и художественного упражнения, который действительно привлекает нас.

Как это делать?

Сегодня, в 2022 году, есть изобилие: Scratch, Processing, Shadertoy, PICO-8, TIC-80, Unity, UE, даже Javascript - языки / среды, которые ориентированы на быстрые, визуальные результаты с тонной ресурсов, учебных пособий, видео и т.д.

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

В то же время почти все «высококачественное» аудиовизуальное программное обеспечение (от видеоигр до презентационных технологий) написано на C++ и Direct3D / OpenGL, где производительность и масштабируемость требуют более сложного набора систем...

... и даже C++ не так монолитен, как раньше, с такими вещами, как Rust и C#, Python и FPC, откусывающими все больше и больше пирога, и люди с многолетним опытом не стесняются переключаться с одного на другой.

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

Стоит упомянуть, однако, что они не являются дизъюнктивными наборами знаний: понимание, например, векторов, матриц, преобразований, стеков - как только вы выучите их на одном языке, знания в основном переносятся на другой.

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

Нам повезло, что узкий набор опций заставил нас довольно быстро перейти к глубокому концу - конечно, мы используем D3D11 сейчас, и мы использовали OpenGL1.1 еще в 2003 году, но, по сути, изменения были в основном постепенными.

Существует опасность того, что, если вы окажетесь в комфортной обстановке, вы застрянете там, потому что «это работает», и выбор между комфортом и вызовом возвращается к первому. И если ваша цель — просто повеселиться, это нормально.

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

Таким образом, изменение ландшафта обусловливает необходимость изменения, о котором идет речь: не существует "наилучшего", а есть только "подходящее для определенной цели".

Если вы чувствуете, что готовы к глубокому концу, начните комплекс. Если вы просто хотите повеселиться, начните с простого. Если у вас есть долгосрочные планы, но вы чувствуете, что вам нужно сначала учиться, начните с малого, но следите за призом.