Движок Doom

редактировать
iD Tech 1
Разработчик (и) id Software, (Джон Кармак, Джон Ромеро, Дэйв Тейлор)
Окончательный выпуск 1.9 / 1 февраля 1995 г.; 25 лет назад (1995-02-01)
Репозиторий github.com/id-Software/DOOM
Написано наC, языке ассемблера
Платформа DOS, Microsoft Windows, MacOS, Amiga Workbench, NeXTSTEP, Macintosh, Commodore Amiga, NeXT, Atari Jaguar, Sega 32X, Sony PlayStation, Panasonic 3DO, Nintendo 64, Sega Saturn, Game Boy Advance, Nintendo Switch
ПреемникQuake Engine
Лицензия Стандартная общественная лицензия GNU. MIT лицензия

id Tech 1, также известная как Doom Engine, это игровой движок, на котором id Software игры Doom и Doom II: Hell on Earth. Он также используется в Heretic, Hexen: Beyond Heretic, Strife: Quest for the Sigil, Hacx: Twitch 'n Kill, Freedoom и другие игры, выпущенные лицензиатами. Его создал Джон Кармак, а вспомогательные функции написали Майк Абраш, Джон Ромеро, Дэйв Тейлор и Пол Радек. Первоначально разработанный на компьютерах NeXT, он был перенесен в DOS для первоначального выпуска Doom, а затем был перенесен на несколько игровых консолей и операционные системы.

исходный код версии Doom для Linux был выпущен для общественности по лицензии, которая предоставила права на некоммерческое использование 23 декабря 1997 г. версией Doom II для Linux примерно неделю спустя, 29 декабря 1997 г. Исходный код был позже переиздан под Стандартной общественной лицензией GNU 3 октября 1999 г. Десятки неофициальных Порты исходных кодов Doom, которые были созданы с тех пор, позволяют Doom работать в ранее неподдерживаемых операционных системах и иногда радикально расширяют функциональность движка за счет новых функций.

Хотя механизм визуализирует трехмерное пространство, это пространство проецируется из двухмерного плана этажа. Линия обзора всегда параллельна полу, стены должны быть перпендикулярны полу, создание многоуровневых конструкций или наклонных участков (полов и потолков с разными углами) невозможно. Несмотря на эти ограничения, этот движок представляет собой технологический скачок по сравнению с предыдущим движком id Wolfenstein 3D. Движок Doom позже был переименован в id Tech 1, чтобы отнести его к списку длинного ряда игровых движков id Software.

Содержание
  • 1 Игровой мир
  • 2-уровневая структура
    • 2.1 Базовые объекты
    • 2.2 Секторы
    • 2.3 Sidedefs
  • 3 Разделение двоичного пространства
  • 4 Рендеринг
    • 4.1 Рисование стен
    • 4.2 Пол и потолок
    • 4.3 Объекты (спрайты)
  • 5 Игры, использующие движок Doom
  • 6 См. Также
  • 7 Примечания
  • 8 Ссылки
  • 9 Внешние ссылки
Игровой мир

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

Структура уровней

A простая настройка, демонстрирующая, как Doom представляет уровни внутри

Представление карты в редакторе

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

Базовые объекты

Базовой единицей является вершина, которая представляет одну 2D-точку. Затем вершины (или «вершины», как они называются внутри) объединяются в строки, известные как «определения строк». Каждый linedef может иметь одну или две стороны, которые называются «sidedef». Затем боковые определения группируются вместе, образуя многоугольники ; они называются «секторами». Секторы представляют собой определенные области уровня.

Секторы

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

Sidedefs

Sidedefs используются для хранения текстур стен ; они полностью отделены от текстур пола и потолка. Каждый sidedef может иметь три текстуры; их называют средней, верхней и нижней текстурами. В односторонних линейных определениях для текстуры стены используется только средняя текстура. В двусторонних определениях строк ситуация более сложная. Нижняя и верхняя текстуры используются для заполнения промежутков, где соседние секторы имеют разную высоту пола и потолка: например, нижние текстуры используются для ступеней. У sidedefs также может быть средняя текстура, хотя у большинства этого нет; это используется для того, чтобы текстуры зависали в воздухе. Например, когда видно, что прозрачная текстура полосы образует клетку, это пример средней текстуры на двухстороннем linedef.

Разделение двоичного пространства

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

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

На листьях дерева находятся выпуклые многоугольники, где дальнейшее деление уровня не требуется. Эти выпуклые многоугольники называются подсекторами (или «SSECTORS») и связаны с определенным сектором. У каждого подсектора есть список связанных с ним сегментов.

Система BSP сортирует подсекторы в правильном порядке для визуализации. Алгоритм довольно прост:

  1. Начните с корневого узла.
  2. Рекурсивно рисуйте дочерние узлы этого узла. Дочерний узел, ближайший к камере, сначала рисуется с использованием алгоритма Scanline. Это можно найти, посмотрев, на какой стороне разделительной линии узла находится камера.
  3. Когда достигнут подсектор, нарисуйте его.

Процесс завершается, когда весь столбец пикселей заполнен ( т.е. пробелов больше не осталось). Такой порядок гарантирует, что время не будет использовано для рисования невидимых объектов, и в результате карты могут стать очень большими без каких-либо потерь скорости.

Визуализация

Рисование стен

Все стены в Doom нарисованы вертикально; именно из-за этого невозможно правильно смотреть вверх и вниз. Можно выполнить вид поиска вверх / вниз с помощью "y-shearing", и многие современные исходные порты Doom делают это, а также более поздние игры, которые используют движок, такие как Heretic. По сути, это работает путем перемещения линии горизонта вверх и вниз по экрану, по сути, обеспечивая «окно» в более высокой видимой области. Перемещая окно вверх и вниз, можно создать иллюзию взгляда вверх и вниз. Однако это будет искажать вид по мере того, как игрок смотрит вверх и вниз.

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

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

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

Пол и потолок

Система рисования полов и потолков («квартиры») менее элегантна, чем та, что используется для стен. Плоскости отрисовываются с помощью алгоритма заливки. Из-за этого иногда возможно, если использовать плохой конструктор BSP, чтобы получить «дыры», где пол или потолок спускаются до краев экрана. Это также причина того, что если игрок выйдет за пределы уровня с помощью чит-кода noclip, полы и потолки будут вытягиваться с уровня на пустое пространство.

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

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

Это приводит к одному из классических ограничений Doom, которые долгое время расстраивали многих картографов. Doom содержал статический лимит на количество висспланов; в случае превышения может произойти «переполнение виссплана», в результате чего игра выйдет в DOS с одним из двух сообщений: «Больше никаких висспланов!». или «перелив виссплана (128 и выше)». Самый простой способ вызвать ограничение виссплана - это большой рисунок пола в шахматном порядке; это создает большое количество висспланов.

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

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

Вещи (спрайты)

Каждый сектор на уровне имеет связанный список вещей, хранящихся в этом секторе. По мере рисования каждого сектора спрайты помещаются в список спрайтов для рисования. Если они находятся вне поля зрения, они игнорируются.

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

Хотя порядок подсекторов гарантирован, спрайты внутри них - нет. Doom хранит список отрисовываемых спрайтов («висспрайты») и сортирует список перед отрисовкой. Далекие спрайты отрисовываются раньше близких. Это вызывает некоторое перерисовку, но обычно это незначительно.

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

Игры, использующие движок Doom

Движок Doom получил наибольшую известность в результате использования классического шутера от первого лица Doom, а также использовался в нескольких других игры. Обычно считается, что «Большая четверка» движков Doom - это Doom, Heretic, Hexen: Beyond Heretic и Strife: Quest for the Sigil.

Игры, построенные непосредственно на движке Doom
Игры, основанные на коде Doom или Doom II
См. также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
  • Портал видеоигр
Примечания
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-17 13:10:33
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте