Знаете, что бывает, когда неосторожный альпинист в горах что есть мочи закричит “Минтон!”?
Демомейкеры больше всего на свете любят три вещи: повторяющиеся объекты, системы частиц и тригонометрические функции. Правильно, на него рухнет столетний слой снеговых осадков, и больше не будет повода радоваться за чистое горло. Вот примерно таким же образом в одном из прошлых номеров в статье “Всеобщая программная анархия” я затронул “больную тему”. И сразу же на мою голову спустилась лавина ваших писем, в каждом из которых чувствовалась боль за наши с вами мучения. И все были солидарны против нерадивых разработчиков. Но не это главное. Главное — то, что вы, уважаемые наши читатели, умеете замечать не только плохие, темные стороны жизни, но и хорошие, солнечные. Скептики наверняка вздохнут: “А они есть?”. Конечно же, есть! Например, замечательные явления Open Source и — демо-сцена. Некоторые из читателей прислали мне очень любопытные демо-сцены, поражающие своей красотой и микроскопическими размерами. И кто-то приписал: “Вот бы и разработчики игр так все делали!”. С этим сложно не согласиться. Но... я вот не соглашусь. Почему? Об этом в конце. А впереди у нас очень интересный пласт компьютерной истории и мощное, сплоченное сообщество, которое объединено одной общей идеей — демо-сценой. Мастера виртуального искусства
Итак, демка — это то двоичное состояние души нашего кремниевого
Вся эта сцена была сделана исключительно из примитивных объектов. Немного модификаторов - и посмотрите, какая красища! друга, когда великолепная графика, убойная музыка и зверский сюжет сплетаются в едином экстазе, доставляющем истинное наслаждение нам с вами. Это своего рода видеоклип на определенную тематику. Разница только в том, что этот клип не записан в цифровом видеоформате, а в реальном времени создается из программного кода. Самое главное — демо-сцены обычно весят во много раз меньше, чем их avi или mpeg собратья. Ведь изображение, звук и музыка в них не загружаются из потокового ресурса, а “на лету” генерируются по очень хитрым и сложным законам. Если у всего этого действа был еще и талантливый режиссер, получается поистине произведение искусства. Первое, что поражает человека, который впервые смотрит демо-сцену, — необычность подхода. Здесь вы редко встретите знакомые приемы и привычные объекты. В демках прошлого тысячелетия царили абстракционизм и сюрреализм. Понять и полюбить такой вид искусства мог не каждый. И если музыка с околокосмическим мотивом могла вызвать священный экстаз, то графическое действо многих приводило в ступор. Однако времена меняются, и нынче в демо-сцене популярным становятся вполне реальные, даже земные картины. Теперь уже и “простые смертные” могут по достоинству оценить их красоту. Но красивое визуальное исполнение — еще не вся соль демо-сцены. Есть и “второе дно”, которые многие не замечают. Это — соревнование программистов, пишущих алгоритмы для демо-сцен. Почему видеоролик, в котором реальных 4 Гб видео и 1 Гб звука, каким-то чудом умещается в 64 килобайтах? Мистика, да и только! Однако никакой мистики тут нет и в помине. Программисты оттачивают свое мастерство, пытаются сделать сверхминиатюрные демки еще миниатюрнее, добавить больше красивых и интересных эффектов. И правда — очень многие зрители изумляются, видя, как очередной сверхкрутой эффект из разряда “ожидается в GeForce 5” спокойно идет на престарелой TNT. На то они и мастера, чтоб удивлять честной народ! Демо-культура была создана простыми людьми. Такими, как мы с вами. Их объединяла общая любовь к красоте, причем не только визуальной. Хорошего программиста пара коротких и лаконичных строчек может привести в священный трепет так же, как иных — произведения Моцарта и Бетховена. И чем не красота? Общая идея, объединившая людей, привела к возникновению целого сообщества. Сами они себя называют “демомейкерами”. На самом деле — мастера и виртуозы в своей отрасли виртуального искусства. Они объединяются в группы (в одиночку хорошей демо-сцены не
В файле сцены все эти объекты занимают не больше 2 кб! создать), кучкуются, устраивают демо-посиделки, на которых обмениваются опытом и очередными творениями. В Интернете можно найти много сайтов, на которых любой желающий может научиться этому искусству. Но когда год (виртуальный, конечно) подходит к концу, демомейкеры собирают в могучую кучку все свои опусы и творения и слетаются на один большой демо-сбор, который называется демопати (party — вечеринка, сбор; демопати — сбор демомейкеров). А вот о демопати надо сказать особо. Это очень важный момент в жизни любого демомейкера. Собственно, они даже живут и считают время “от демопати до демопати”. Как все это выглядит? Примерно так же, как аналогичные неформальные компьютерные сборы. Такие, например, как международная хакерская конференция DefCon. Различных демопати существует очень много, но нас больше всего интересуют российские, среди которых можно особо отметить Millennium demoparty (которая проводится в Беларуси) и Paradox. Их отличие в том, что они почти никогда не проводятся в Москве. Так уж повелось, что большинству демомейкеров приходится тем или иным способом добираться до места сбора, иногда — через всю страну. Это создает дополнительный шарм и отсеивает “слабых духом”. Потом демомейкеры в своих мемуарах (коих в Сети великое множество) смачно описывают, как через все тернии и преграды они добрались-таки до демопати (чем преград больше — тем лучше). По сути своей, большинство демопати — события масштабные и основательные, поэтому под проведение вечеринок и конкурсов организаторы порой выбивают целые кинотеатры и павильоны. Вход в действо обычно свободный, никакой мзды организаторы обычно не берут. Участники соревнований (ибо демопати — это прежде всего состязания) загодя сдают свои работы, чтобы члены жури смогли и осмыслить, и подготовить компьютеры к их приему. К сожалению, редкая демопати обходится без какого-нибудь казуса, чаще всего — технического. Не запустившиеся на железе устроителей демки — почти стандартное происшествие. К слову, в этом бесполезно винить как устроителей, так и самих участников. В техническом плане у демопати очень много сложностей, которые порой нелегко преодолеть.
Трейлеры. Своеобразная профессиональная подпись демомейкеров. Например, один из турниров проводится по демкам, написанным под легендарный ZX Spectrum. Естественно, устроителям приходится иметь несколько Спектрумов, но и с ними часто случаются проволочки. Иногда программа, написанная под Спектрум, соглашается идти только под соответствующий эмулятор под PC, а иногда и вообще не соглашается. Программа демопати обширна и обычно рассчитана на несколько дней. В первый день проводится церемония открытия, пламенные речи, знакомство участников, заканчивающееся посиделками до глубокой ночи. Организаторы заранее беспокоятся о размещении участников. Обычно арендуются недорогие гостиницы или летние пионерские лагеря. Но все равно с жильем обычно туго. В России это удел всех подобных фестивалей, и демо-сцена — не исключение. Например, аналогичная ситуация почти всегда наблюдается на фестивалях ролевых и полевых игр, которые регулярно проводятся в нескольких великорусских городах. На второй день, кое-как устроившись и отоспавшись, сонные участники бредут к месту проведения действа. Вот тут и начинается самое интересное. Демо-конкурсы! Это то, чего каждый участник демопати ждет с
Нет, это не из Лувра, и даже не из Третьяковки. Сделано с использованием только 3D Studio MAX. Автор - Анатолий Меймухин. Впечатляет? трепетным предвкушением, а организаторы — с ужасом. На второй день начинаются конкурсы по конкретным дисциплинам, которые длятся несколько дней. Все конкурсы разделяются на четыре дивизиона: графика (статичная и отрендеренная), музыка (в основном — трекерная), собственно демки и realtime. Под realtime подразумевается то, что конкурсанты должны прямо здесь и сейчас на глазах у всех за крайне ограниченное время что-нибудь сваять. Конечно, демки тут не пишутся, но профессионал вполне может склепать неплохой трек или трехмерную модель. Графические работы разделяются на рисованные и моделированные. Моделируется графика как в популярных и известных пакетах (3D Studio MAX, Milkshape 3D и иже с ними), так и в специализированных программах, разработанных самими конкурсантами. Кстати, если вы думаете, что в трехмерных редакторах ничего красивого смоделировать нельзя — вы сильно ошибаетесь. Для примера посмотрите на великолепную наездницу драконов. Это было сделано исключительно в пакетах визуального моделирования! Музыкальные конкурсы включают в себя трекерную музыку по разным направлениям (трехканальная, шестиканальная...) и композиции в обычных форматах (mp3). Иногда на суд жюри выносятся специальные программы (плееры, трекеры, синтезаторы), созданные конкурсантами, или музыка в самодельных форматах (естественно, с прилагающимся проигрывателем или кодеком). Ну и гвоздь программы — конкурсы по демо-сценам. Они также имеют свое внутреннее деление. Intro 4 кб — здесь представляются демо-сцены, размер которых не превышает четыре килобайта! Да, и такие есть, в чем вы могли убедиться, посмотрев великолепную демо-сцену mesha.com, выкладывавшуюся на мартовском компакт-диске “Мании”. Некоторые спецы умудряются в 4 кб запихнуть несколько десятков минут графики и звука, да притом чертовски красивого! Intro 16 кб — проводится не на всех пати и являет собой конверсию Intro 4 кб. Просто демомейкеры имеют больше места для воплощения своих фантазий. Однако и требования к таким демкам выше.
Дикие трубки - ни что иное как NURBS. Если у четырехкилобайтной демки может быть сюрреалистический задел и полное отсутствие сюжета и режиссуры (такое, в принципе, прощается), то уж тут — обязательно. Intro 64 кб — венец демомейкерства. Здесь воплощаются все самые смелые наработки демомейкеров, и зрелище предстает поистине феерическое. Уже есть место, чтобы разгуляться, поместить несколько музыкальных треков, добавить высококачественную трехмерную графику и передовые эффекты. Ну и длина, соответственно, побольше. Кроме того, в 64 кб демки обычно включаются трейлеры — своеобразные подписи разработчиков. Это красивый и часто юморной текст, который дефилирует перед зрителем в конце демки. В нем разработчики рассказывают о себе, о том, сколько геморроев они наплодили, взращивая эту сцену, и сколькими байтами представлено в видеопамяти последнее слово, которое вы видите на экране. И, наконец, самые массивные и тяжеловесные демо-сцены из категории “Кому за 1024...”. Здесь соревнуются многомегабайтные демо-сцены, которые показывают совершенно фантастические эффекты и растягивают визуально-музыкальную нирвану на несколько часов. Правда, многочасовую феерию звука и цвета не каждый выдержит. Это, кстати, своеобразное испытание зрителей и членов жюри на прочность конструкции. В конце концов, все эти работы надо не только посмотреть, но и достойно оценить! Само движение демомейкинга очень похоже на движение Open Source. Та же взаимопомощь и взаимовыручка, те же общедоступные обучающие примеры, форумы, объединения, открытые группы, в которые может вступить любой. И таких сообществ в компьютерном мире очень много. На самом деле, в самой природе нормального человека живет коллективное (но не стадное) чувство. И это радует.
Теория vs. Практика
Тех, кто хочет узнать, как же они это все делают, попрошу Демо-сцена в Интернете
www.scene.org — самый главный портал всех демомейкеров. Здесь вы можете не только посмотреть на их работы, но и получить детальную консультацию, если решите заняться чем-то подобным. ftp.scene.org — FTP поддомен предыдущего сайта, где хранятся сотни интересных демок. www.demoscene.ru — русское представительство scene.org. Этот сайт мне понравился прежде всего регулярными и подробными новостями и отчетами со всех мировых и русских демо-пати. trackers.elkatel.ru — один из самых крупных русскоязычных ресурсов по трекерной музыке. www.render.ru — этот русский портал 3D графики будет интересен тем, кто хочет увидеть, какие чудеса творят наши соотечественники с помощью программ визуального моделирования. остаться. Остальным можно смело перелистывать страницу. Странно, вы еще здесь? Значит, всем интересно, как же из ма-аленького exe-файлика в 4 кб (в распечатке — две тетрадные страницы) получается такое зрелище? И почему у игроделов на то же самое ушло бы несколько десятков мегабайт? Ну что ж... могу рассказать. Я не претендую на детальное знание вопроса, тем более, что технологии от демки к демке сильно разнятся, и тем не менее — есть несколько общих моментов, которые присутствуют почти во всех демках. Вот о них и поговорим. Помнится, в одном компьютерном журнале давным-давно какой-то автор изрек мысль о том, что все демо-сцены строятся на сумасшедших формулах, которые и сами их создатели до конца понять не в состоянии. Что ж, возможно это было правдой лет десять назад, когда, нарисовав на экране гиперсложный фрактал, можно было получить первое место на демопати. Но не сейчас. Сейчас демомейкеры используют не какие-то призрачные алгоритмы, которые им снятся во сне, как Менделееву его таблица. Нет, это вполне понятные простому смертному алгоритмы. Итак, основной принцип демомейкеров — сделать программный код как можно меньше. И, надо сказать, они в этом преуспели. Начнем с графики. Будем рассматривать наиболее современный вариант демо-сцены, когда все графика выполнена в полном 3D. Образец 64 кб Intro, выполненного в полном 3D, вы можете найти на нашем компакте (fr-08). Как все эти анимированные трехмерные модели с высококачественными текстурами могли поместиться в маленький 64 кб файл? А ведь там еще и музыка! Да очень просто. Трехмерные объекты представлены не в стандартном виде, а в виде указаний своеобразному интерпретатору, что и как делать. Аналогичные методы использует векторная графика. Внимательно присмотритесь к начальному замку. Если присмотреться действительно внимательно, можно заметить, что весь замок состоит из простых геометрических объектов: кубов, параллелепипедов, сфер, цилиндров, конусов и т.д. Естественно, они немного деформированы (или хитро скомбинированы — обратите внимание на рога). Что будет, если этот замок сохранить в обычном формате? Ну, например, 3ds? Будет “файлик” размером 500-700 кб, то есть во много раз больше самой демки, в которой, кроме этого замка, еще куча вещей. А теперь
Все это создано при помощи одного-единственного синуса. давайте напишем небольшую подпрограммку, которая из текстовых указаний воспроизводила бы соответствующие объекты. Например, сочетание “sph” обозначает сферу, а “cub” — куб. Ведь замок мы описываем простейшими элементами, а также — указываем их координаты. Допустим, надо немного сжать сферу, которая будет служить базой для рогов. Значит, создаем алиасную команду сжатия “scl” и задаем ее параметры — ось и степень сжатия в процентах. В результате у нас получается крохотный файлик, в котором кодовыми маркерами и действиями представлен весь замок. То есть не сам замок, а что надо сделать, чтобы замок воссоздать. Итог: файл-описание замка занимает примерно 1 кб, а участок кода, который отвечает за его распаковку и воспроизведение, — примерно 0,7 кб. В целом, наш замок занимает 1,7 кб. Сравните это с первоначальными 500 кб. Вот что значит векторная форма представления! А как быть с анимацией? Ведь если просто описывать изменение координат объектов, получится приличный массив данных. “Ноу проблемос”, как говорят ирокезы! Здесь есть два подхода. Во-первых, есть такой математический метод — “исчисление конечный разностей”. Его суть состоит в том, чтобы из множества элементов вычислить закономерность их следования и рассчитать формулу, по которой легко вычисляются эти и им подобные элементы. Нет нужды говорить, что искомая формула “весит” во много раз меньше, чем исходный массив элементов. А программа “на лету” восстанавливает изменения координат объектов по формуле. Второй подход состоит в том, чтобы элементарно интерполировать кадры анимации. Он дает меньшую степень компрессии, но и менее трудоемок. Ну и, наконец, как быть с текстурами? Ведь все применявшиеся в этой деме текстуры в совокупности весят далеко за мегабайт! Дело в том, что все эти текстуры — процедурные. То есть они нигде специально не хранятся, а опять же “на лету” восстанавливаются из векторных файлов команд. В результате довольно большая текстура описывается очень маленьким файлом-скриптом. Поясню на простейшем примере. Как нарисовать простейшую линию? Во-первых, можно взять ее битовый образ (любое стандартное представление графических файлов — bmp, gif, jpg и т.д.) и переложить его на экран. Так делают игроделы. А можно взять и записать во внешнем файле всего одну команду, которая задает прорисовку такой-то линии таким-то цветом из такой-то точки в такую-то точку. Естественно, команда будет занимать намного меньше битового образа! С графикой разобрались — переходим к звуку. Общий принцип здесь примерно такой же. Поток данных (в данном случае — звуковых) разделяется на повторяющиеся
Обратите внимание: на этой композиции всего один-единственный объект, но - многократно размноженный. или образующие составляющие, а полученная последовательность команд и описаний являет собой законченный музыкальный блок, который затем проигрывается специальным плагином или подпрограммой. Так поступают, например, трекеры. Примерно по такому же принципу построены midi файлы. Разница только в том, что команды в midi подменяются сэмплами (маленькими участками музыки), которые записаны в синтезаторе звуковой карты, а трекерные мелодии содержат сэмплы в самих себе. Вроде бы, так немного увеличивается размер файлов, но зато качество по сравнению с midi возрастает во много раз. Когда приходит время объединить все это в одну цельную демку, в дело вступают кодеры. Их основная задача — написание подпрограмм-обработчиков всего того, что наваяли художники, моделлеры и трекеры, а также — компактное пакование получившейся программы. Да, именно пакование. Несмотря на то, что получившаяся демо-сцена уже и без того сверхминиатюрна, она может все еще не вписываться в тесные рамки компо-ограничений. О том, чтобы запаковать демку каким-нибудь WinZipом, и речи быть не может. Во-первых, в распакованном виде (а именно так они “взвешиваются”) демка все равно будет весить столько же, а, во-вторых, степень компрессии у того же WinZip ну очень далека от демомейкерского идеала. Выход — специальные утилиты-паковщики, которые заметно сокращают размер программы за счет более эффективного использования внутренних переменных (когда один адрес памяти отвечает за два или даже три значения), а также устранения повторяющихся микрокусочков кода (уже на уровне машинных кодов, так как в высокоуровневом коде повторяющихся элементов не остается благодаря мастерству программистов). Очень редко демомейкеры пользуются самодельными паковщиками. Обычно берется какой-нибудь популярный образец (например, UPX или ASPpack) и немного видоизменяется для лучшего соответствия поставленным задачам. В итоге, размер демки уменьшается в несколько раз и остается место для размещения финального трейлера. А демомейкеры это ох как любят. Почему у человека нет крыльев? Потому что у птицы нет рук.
В начале статьи я заявил,
Еще одна потрясающая работа А.Меймухина. Мастер-класс! что разработчики никогда не смогут так оптимизировать игры, как демомейкеры демо-сцены. Теперь разогретый народ жаждет авторитетного и логичного объяснения. Ну что ж, читайте. На то есть две причины. Первая — по своей сути и идеологии компьютерные игры и демо-сцены — вещи очень разные. Несмотря на веяния последних лет, демо-сцена всегда была вещью хаотичной. Тут скорее уместен вопрос не “как оптимизировать этот красивый глюк”, а “как оптимизировать этот глюк, чтобы он выглядел красиво”. То есть демо-мейкеры не вполне владеют своих произведением. Они начинают творить с прицелом на красоту, но на определенном моменте что-то выходит не так, как надо, и они пытаются изменить это “не так как надо” так, чтобы оно выглядело, как будто разработчики это предусмотрели. Итак, демо-сцена по своей природе хаотична. Конечный результат напрямую не зависит ни от мастерства кодеров, ни от задумок режиссера. А компьютерная игра — вещь строго правильная, разложенная по полочкам и регистрированная в каждом транзисторе процессора. И никакой глюк, каким бы он красивым ни был, никогда не удастся вогнать в строгие рамки “правильной” игры. Ну а вторая причина — чисто психологическая. Скажите, ну зачем оптимизировать игру, зачем тратить на это силы, деньги, а главное — время, когда на среднестатистическом компьютере игра будет летать со свистом? Ну а даже если не будет — ведь игрок побежит покупать новые железяки, и игра таки будет летать со свистом! Нет стимула — нет оптимизации. Такой подход к делу практически неискореним, и отдельные смельчаки тут ничего не могут изменить. Постскриптум
На нашем компакт-диске вас ждут: 1. Несколько очень приятных демо-сцен. 2. Одна из последних версий UPX, который очень хорошо умеет паковать exe-файлы. Побалуйтесь на досуге.