Движок Doom

Движок Doom
Doom engine
Тип Игровой движок
Разработчик id Software
ОС изначально
Лицензия изначально проприетарная, теперь GNU GPL
Сайт Сайт id Software

Doom engine (русск. движок Doom) (также известный, как Id Tech 1) — псевдотрёхмерный игровой движок, разработанный американской компанией id Software и применяемый в компьютерных играх Heretic,

Содержание

Улучшения движка (по сравнению с Wolfenstein 3D)

  • Пол и потолок могут иметь любую высоту.
  • Стены не обязательно ориентированы в направлении «север-юг» или «запад-восток».
  • Варьирующаяся освещённость, повышавшая реалистичность графики.
  • Лифты, дистанционно открывающиеся двери, опускающиеся и придавливающие потолки, поднимающиеся ступеньки и другие движущиеся элементы.
  • Появление противников, обладающих способностями к полёту (пробежать под которыми, либо пролететь сверху в прыжке всё равно не представлялось возможным).
  • Звуковая подсистема поддерживала стереозвук и микширование до 8 эффектов одновременно.
  • Персонаж при движении покачивался вверх-вниз, что создало бо́льшую иллюзию ходьбы (в Wolfenstein точка обзора находилась на постоянной высоте примерно на уровне живота, игрок словно ехал в инвалидной коляске).
  • Разрешалось (хоть и не поощрялось) подключение дополнительных модулей (Джона Кармака, который сам модифицировал игры и хотел, чтобы другие это делали.

Ограничения

Однако у движка были ограничения:

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

Технические особенности

Движок был написан на Си на рабочих станциях NEXTSTEP. Изначально использовался компилятор Intel C, но в дальнейшем перешли на Watcom C. Утилиты были написаны под NeXT на объектном стиле.

Все вычисления проводятся в фиксированной запятой 16,16, с машинной единицей, равной одному текселю (рост игрока 56 текселей — значит, 1 тексель примерно равен 3 см). Для угловых величин применяется фиксированная запятая, в которой 65536 = 360°.

Запись демо-роликов и мультиплеер основаны том, что на цифровой ЭВМ один и тот же код с одними и теми же данными приводит к одному и тому же результату, а поведение целочисленной арифметики жёстко заспецифицировано и не зависит от модели процессора. Игра записывает в демо-ролик (и передаёт по сети) команды управления; если в игре нет грубых ошибок, различные машины, интерпретируя одни и те же команды управления, получают один и тот же результат. Впрочем, ошибки, приводящие к рассинхронизации, в игре всё-таки есть: в частности, если в одиночной игре зайти в меню, игра останавливается, но ролик продолжает писаться. Недостаток такого подхода — невозможность перемотать ролик; его можно только прокрутить с начала.

В режиме записи демо-роликов точность поворотов снижалась до 256 на 360 градусов; внимательный игрок мог заметить, что в режиме демо-записи наводка становится грубее. Это служило исключительно для экономии памяти в демо-роликах и реально не требовалось.

Каждый такт игра проводит цикл управления каждым монстром. Для того, чтобы сэкономить процессорные такты, существует битовая матрица REJECT: для любых двух секторов, если ни из одной точки сектора А не видна никакая точка сектора Б, на этом месте в матрице ставится единица. Если на пересечении строки, соответствующей сектору игрока, и столбца, соответствующего сектору монстра, стоит 0, проводится проверка, видит ли монстр игрока; если 1 — монстр гарантированно не видит игрока. Матрица REJECT очень сложна для построения, и большинство пользовательских редакторов не строили её (существовало очень мало утилит, которые проводили эту работу; основные — RMB и ZENNODE).

Рендеринг

Для ускорения отображения используется BSP-дерево (в отличие от порталов в Duke Nukem 3D). Объекты изображаются в виде спрайтов, в отличие от Quake.

Движое рекурсивно проходится по BSP-дереву, отрисовывая стены от дальних к ближним.

функция ПроходПоДереву(узел)

  если ОхватывающийПрямоугольник(узел) не в конусе видимости
    то выход

  если узел является развилкой

    то   // узел является развилкой - рекурсивно пройти
      если камера слева от секущей плоскости
        то ПроходПоДереву(узел.левый); ПроходПоДереву(узел.правый)
        иначе ПроходПоДереву(узел.правый); ПроходПоДереву(узел.левый)

    иначе // узел является подсектором
      нарисовать(узел)

Во время этого цикла рисуются только глухие стены (то есть, средние текстуры для односторонних стен, и верхние и нижние — для двусторонних). Объекты, полы и решётки записываются в отдельные массивы и отрисовываются на более поздних стадиях. Кстати, массив, в котором хранятся полы, сделали довольно малым, и у самодеятельных конструкторов довольно часто случалось переполнение и выход с сообщением «No more visplanes!»

После того, как отрисованы стены, по строкам рисуются полы, записанные в visplanes.

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

Текстуры стен и спрайты хранятся в

Doom для DOS работал в четырёхстраничном X-режиме VGA 320×200 с тройной буферизацией, для Linux — использовал обычный режим VGA 13h. При этом цифра разрешения была закодирована в ассемблерных процедурах в двух местах; версии игры, которые использовали переменное разрешение, динамически модифицировали код, подставляя нужное разрешение. Впрочем, в частях игры, которые к движку не относятся, встречалось крайне много магических чисел, связанных с разрешением экрана и экранными координатами различных объектов, поэтому первые порты Doom’а страдали «расползающейся» в SVGA-режимах графикой меню.

Длительная загрузка

Doom известен своей длительной загрузкой (больше минуты на компьютерах своего времени). Основным пожирателем времени была инициализация некого «Doom refresh daemon». За этим непонятным названием стоит построение базы текстур.

Doom распространялся на дискетах и через textures) состояла из фрагментов (patches): например, стена с выключателем может состоять из картинки стены и картинки выключателя, или плиточная стена — из трёх-четырёх плиток, хаотически разбросанных по большой текстуре. Текстуры, как сказано выше, рисуются по столбцам. Doom проходился по всем столбцам всех текстур и проверял, какие фрагменты покрывают тот или иной столбец; строилась соответствующая структура данных. Эту структуру можно было закэшировать, или строить при загрузке уровня, достраивая динамически по мере надобности — в этом случае Doom загружался бы намного быстрее.

По-видимому, фрагментирование текстур изначально было сделано для того, чтобы некоторые части текстур не затемнялись с расстоянием, как не затемняются спрайты снарядов (об этом говорит незадействованное поле в блоках TEXTURE1 и TEXTURE2). Как бы там ни было, яркие фонари на тёмных текстурах не вошли в игру.

Сетевой код

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

Поддержка того или иного сетевого протокола не включена в Doom. Для того, чтобы запустить игру по сети, игроки вызывают внешнюю программу — сетевой драйвер, который налаживает связь между машинами и вызывает EXE-файл Doom’а. Такая конструкция позволяет писать внешние драйверы для других сетевых протоколов — или программы запуска Doom’а по сети, более удобные, чем имеющиеся.

Каждый из игроков имеет свой цвет: первый — зелёный, второй — серый, третий — коричневый, четвёртый — красный. Номера игроков (и, соответственно, цвета) раздаются сетевым драйвером, а не игрой. В игре по MAC-адресов сетевых плат, в игре по модему или кабелю через SERSETUP — от случайных факторов.

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

Игры на движке Doom’а

Мод Ghostbusters для Doom

Движок Doom’а продавался другим компаниям. На нём был сделан ряд игр. Среди них:

Также фанами игры создавались пользовательские моды, полностью преображавшие игру. Первый из таких модов — Alien Doom — был сделан по фильму «Чужой». Впоследствии появились моды и по другим фильмам: «Охотники за привидениями», «Бэтмен» и «Секретные материалы». См. .

Открытие исходного кода

В 1996 году открыли исходные тексты сетевых драйверов. В декабре 1997 года случилась беспрецедентная (на то время) акция: полный исходный текст Doom для GNU/Linux был опубликован под несвободной бесплатной лицензией (версия для DOS не публиковалась из-за платной звуковой библиотеки DMX). Чи Хоан (Chi Hoang) был первым, кто сумел в январе 1998 года выпустить порт Doom для DosDoom.

Пионерами расширения Doom были Ли Киллоу (Boom — расширенная версия Doom, в которой были исправлены все ошибки оригинальной игры, а также серьёзно, почти в 1,5 раза, был ускорен движок), Денис Фабрис и Борис Перейра (Doom Legacy — версия Doom с качественным пользовательским интерфейсом и поддержкой высоких разрешений), а также Брюс Льюис — создал glDoom, первый порт Doom’а под резервной копии не было. Из-за этого Кармак перелицензировал исходные тексты под GNU General Public License: если бы лицензия не была такой ограничивающей, исходный текст обязательно нашёлся бы у кого-то.[1] Остальные ресурсы так и остаются платными.

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

  • Производные Boom, например, Smack My Marine Up, prBoom. Имеют мощные средства разработчика: скриптовый язык FraggleScript, дополнительные типы объектов, язык редактирования свойств объектов (BEX) и т. д. Как правило, у производных Boom совместимость с исходной игрой предельная — вплоть до того, что демо-ролики, записанные в Doom, под Boom никогда не рассинхронизируются.
  • Doom Legacy — имеет качественный пользовательский интерфейс, спортирован на DOS, Windows и GNU/Linux. Последние версии ограниченно поддерживают многоэтажные лабиринты. Есть игра вдвоём на одной машине двумя мышами (для второй, подключаемой по COM-порту, в игре есть встроенный драйвер!). Многое что взято из ныне замороженного Smack My Marine Up. Согласно описанию проекта, в нём ставится задача максимально глубокой обратной совместимости всех нововведений, то есть возможности возвращения к оригиналу путём выбора соответствующих настроек.
  • ZDoom — в отличие от большинства расширений Doom, которые написаны на чистом Си, игра полностью переписана на C++. Фокусируется на мультиплеерных возможностях, реализован даже захват флага. В проекте не ставится цель глубокой обратной совместимости, опытный игрок ощущает значительную разницу с оригиналом в геймплее буквально сразу же, но зато многие баги, использовавшиеся авторами модификаций как источники недокументированных эффектов, можно включить при необходимости из меню.
    • ZDaemon — самый популярный (с огромным отрывом от других) на сей день порт для сетевой игры. Он основан, в свою очередь, на порте ZDoom.
    • GZDoom — порт, основанный на ZDoom. Поддержка Официальный сайт GZDoom [1].
    • SkullTag — второй по популярности порт для сетевой игры, основан на портах ZDoom и GZDoom. Поддерживает Doom на полностью трёхмерный движок: графика под управлением «эффекту Ельцина» или «эффекту портрета». Одним словом, jDOOM преображает старый 2,5-мерный Doom, превращая его в полноценную современную 3D-игру. Основной недостаток jDOOM на настоящий момент — низкое качество любительских полигональных моделей.
      • Risen3D — порт, основанный на jDOOM.Поддерживает все графические навороты jDOOM, по утверждениям разработчиков (Официальный сайт [2]), применены улучшенные алгоритмы OpenGL-рендеринга, быстрее и качественнее отображаются текстуры высокого разрешения и трехмерные модели. Также поддерживаются наклонные поверхности и 3D-полы.

    В Doom Legacy и ZDoom присутствует возможность игры с ботами.

    Менее значимые моды кратко перечислены в списке портов серии Doom.

    Файлы данных Doom по сей день остаются платными. Для создания бесплатного FreeDoom [3]. Если к расширенной версии Doom добавить WAD из FreeDoom, получаем полностью свободную игру. По состоянию на апрель 2007 года, проект не готов, страдает плохим качеством изображения и ориентирован на Boom (под версиями, которые не являются производными Boom, непроходим уже первый уровень).

    Примечания


Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "Движок Doom" в других словарях:

  • Движок Doom 3 — id Tech 4 (Doom 3 Engine) Тип Игровой движок Разработчик id Software Написана на C++ ОС ПК (Microsoft Windows, Macintosh, PlayStation 3, Xbox 360[1] …   Википедия

  • Doom RPG — Разработчик id Software Fountainhead Entertainment Издатель JAMDAT Mobile (EA Mobile) Часть серии Doom Дата выпуска 13 сентября 2005 …   Википедия

  • Doom 64 — Разработчик Midway Games Издатель Midway Games …   Википедия

  • Doom engine — У этого термина существуют и другие значения, см. Doom (значения) …   Википедия

  • Doom — У этого термина существуют и другие значения, см. Doom (значения). Doom Фон игрового меню Разработчик id So …   Википедия

  • Движок Quake — Quake engine Тип Игровой движок Разработчик Джон Кармак id Software Написана на Си ОС Windows, Лицензия GNU GPL …   Википедия

  • Doom 3 — У этого термина существуют и другие значения, см. Doom (значения). Doom 3 Разработчик id So …   Википедия

  • Doom 4 — Эта статья описывает компьютерную игру, находящуюся в разработке. После выпуска игры сведения, приведённые здесь, могут оказаться неверными, и содержание статьи может значительно измениться …   Википедия

  • Doom II: Hell on Earth — У этого термина существуют и другие значения, см. Doom (значения). Doom II: Hell on Earth Обложка диска игры Разработчик …   Википедия

  • Doom 3: Resurrection of Evil — У этого термина существуют и другие значения, см. Doom (значения). Doom 3: Resurrection of Evil Разработчик Nerve Software …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»