Computer Review#14(86)

От простого к сложному

Демомейкерам-любителям посвящается

Для тех, кто не знает: демомэйкер (demomaker) - это человек, который пишет демонстрационные программы (не демо-версии игр, а программы, демонстрирующие возможности компьютера в графике и музыке). Существует множество терминов, характеризующих различные типы демонстрационных программ. Вот как это описано в фидошном demo.design FAQ:

  1. demo (demonstration) - размер более 100k
  2. intro (introduction) - размер не более 100k. Intro - грубо говоря, маленькое demo. Это, например, те intros, которые участвуют в competition'ax. Формально ничем, кроме размера, от demo не отличаются. Условно можно разделить на:
    • Invitation intro - intro, написанное с целью позвать народ на какой-либо party (дословно с английского, party - вечеринка). Содержит описание условий соревнований, используемого оборудования, сроков, места проведения и т.п.
    • BBS intro - представляет собой рекламу BBS. Обычно небольшого размера, с тем или иным способом появляющимся текстом и одним-двумя эффектами, и иногда музыкой (часто Adlib'овской). Эти демки стремятся запихнуть в архивы, проходящие через BBS.
    • Crack intro - интpо, написанное в честь взлома группой/cracker'om чего-либо. О нем можно сказать практически то же, что и о BBS intro.
  3. Trackmo (TRACKING deMO) - на PC/Amiga - demo или intro, в котором все действие (т.е. изображение) жестко завязано на музыку таким образом, что смотрится на одном дыхании. Музыка - обычно техно (удобнее всего синхронизировать). Hа Commodore 64 так называют demo, не требующее в процессе показа вмешательства человека (нажатия пробела для продолжения и т.п.).
  4. Dentro (DEmo-INTRO) - demo preview. Выпускается с целью пробудить интерес к демке, которая еще не готова, но ожидается. Являет собой иногда просто набор картинок (slideshow) с музыкой и перечислением эффектов, которые можно будет увидеть в демке.
  5. SlideShow - картинки (рисованные или pендеpенные), показываемые под музыку.

В теории большинство демонстрашек пишется на ассемблере, реже применяют С/С++, Pascal. При написании демок используется множество дополнительных программ, как-то: 3D-Sudio, различные графические и музыкальные редакторы, а также куча утилит, написанных самими демомэйкерами для специфических целей. Действительно хорошая демка требует тяжелой многодневной работы, над программой трудится большое количество народа: программисты, художники, дизайнеры и музыканты. Вот как отзываются пятеро создателей о своей демке Fulcrum: "You saw 10 months of hard work in 10 minutes". В переводе на русский звучит так: "Вы видели 10 месяцев тяжелой работы в 10 минутах". Однако, чтобы начать писать демо-программы, не обязательно быть семи пядей во лбу. Можно начать с обычного BASIC'a. Не верите? Тогда читайте дальше.

Хоть BASIC и не уважается большинством программистов, у него есть немалые возможности, которые можно раскрыть при правильном подходе. Например, использование BASIC'a на начальной стадии обработки алгоритмов позволяет отточить сам алгоритм (говоря проще, чем быстрее заработает на BASIC'e, тем быстрее будет на ассемблере). Чтобы не быть голословным, приведу несколько примеров.

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

Множество Мандельброта Фрактал "Джулия" (Julia) "Лист папоротника"

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

Разряд молнии Круговой разряд.
Подобные алгоритмы используются и для изображения Солнца и для оформления шрифта.
Различные взрывы
Плоская карта ландшафта в трехмерном виде с "отражением в воде" и простейшим "рендерингом".
Слова "отражение" и "рендеринг" заключены в кавычки, потому что это не настоящие алгоритмы, а только их имитация. Но для создания картинки на BASIC'е и это неплохо J. Раз уж заговорили о 3D, то BASIC позволяет и это. Вот несколько примеров:

Трехмерная фигура, вращающаяся в реальном времени Почти такая же фигура, но с затенением ребер и удалением невидимых линий Достаточно сложная 3D-фигура ("елочка"), отрисованная с наложением световых эффектов
Но статичные или монотонно вращающиеся фигурки/картинки быстро навевают скуку L. Для разнообразия нужно ввести алгоритмы движения. Самый простой из них знают все, кто когда-нибудь играл в Popcorn или Arcanoid. Это алгоритм отскока от стенок: делаете случайный угол отскока от случайных стенок и получаете достаточно симпатичное движение. Мешает одно - некоторая угловатость движений. Для того, чтобы скрыть эту угловатость, используются разнообразные алгоритмы сглаживания. В самом простом случае применяются для расчетов достаточно большие величины, округляемые к малым. Тогда отскок под острым углом будет выглядеть как небольшая закругленность:

Простой алгоритм сглаживания от стенок прямоугольника Алгоритм "калейдоскопа" со сглаживанием от случайных граней
И один из самых сложных, но вместе с этим самых удобных способов заставить фигуру двигаться - это сплайны. (Splines (сплайны) - типы математических моделей, используемых для представления плавных кривых, проходящих через заданные точки). Если простые алгоритмы сглаживания обладают большой погрешностью и "вписать" их в готовый многоугольник достаточно сложно, то с помощью сплайнов сделать это легче легкого (если конечно, вы сможете построить сам сплайн ?. Вот как выглядят способы применения сплайнов на практике:

Невыпуклый многоугольник, в который вписан сплайн Движущийся сплайн на BASIC'e (сделан по идее хранителя экрана "Вечный двигатель" в Windows)
Ну и какая же демка без разнообразных и красивых подписей! BASIC позволяет работать со шрифтами в самых различных ракурсах: слова можно вращать, изгибать, заставлять летать по экрану, перетекать из одного в другое, можно... Можно все, это зависит только от вашей фантазии:
Использование различных шрифтов
Вплоть до трехмерных И даже с тенью!
Вот, в общем-то, и все, что я хотел рассказать о создании демонстрационных программ на BASIC'е. Единственное, что я не смог сделать более-менее качественно - это подключить музыку L... Можно, конечно, применить ассемблер, но, если вы умеете это делать, то лучше сразу писать демки на асме. И немного ресурсов в Internet, на которых хранится информация по демомэйкингу для начинающих:

  1. ftp.cdrom.com - огромная коллекция демонстрационных программ, исходных текстов (в том числе и на BASIC'е) и литературы. К сожалению, почти все на английском языке;
  2. www.enlight.ru - информация о российском конкурсе (party) демонстрационных программ, есть на что посмотреть и чему научиться;
  3. monster.da.ru - страничка А. Монастыренко. Здесь можно найти FAQ для SU.GRAPHICS и множество программ, эффектов и просто красивых алгоритмов;
  4. Можно подписаться на DEMO.DESIGN и DEMO.DESIGN.UUE в Fido в Internet - news-сервер ddt.demos.su;
  5. Все картинки, представленные в этой статье построены программами только на BASIC'е, исходные тексты которых вы можете найти на www.coderz.net/ABS - моей домашней страничке. Там же есть исходные тексты программ и эффектов на ассемблере. К сожалению, для некоторых программ требуется достаточно мощный компьютер, все-таки BASIC медленный язык L...
Если будет желание узнать что-нибудь еще о написании демок или создании каких-либо эффектов, пишите: cybershadow@mail.ru
С уважением, CyberShadow//SMF, г. Иркутск

Computer Review#14(86)

Copyright © 1998 "Компьютерное обозрение"
Поддержка - "Иркутский Издательский Дом" - www.iid.irk.ru
Дизайн - leidenwebdesign - http://leiden.irkutsk.ru