Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

id Tech 1 , также известный как движок Doom , - это игровой движок, который используется 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, а затем был перенесен на несколько игровых консолей и операционных систем .

Исходный код для Linux версии Гибели был выпущен для общественности в соответствии с лицензией, предоставленным правом некоммерческого использования на 23 декабря 1997 года, а затем версии Linux от Doom II примерно через неделю 29 декабря 1997 года [ 3] [4] Исходный код был позже переиздан под лицензией GNU General Public License v2.0 или более поздней версии 3 октября 1999 года. [5] [6] Десятки неофициальных исходных портов Doom , которые были созданы с тех пор, позволяют Doom запускается в ранее неподдерживаемых операционных системах и иногда радикально расширяет функциональность движка новыми функциями.

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

Игровой мир [ править ]

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

Структура уровней [ править ]

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

Просмотр карты в редакторе

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

Основные объекты [ править ]

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

Секторы [ править ]

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

Sidedefs [ править ]

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

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

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

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

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

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

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

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

Рендеринг [ править ]

Рисование стен [ править ]

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

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

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

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

Пол и потолок [ править ]

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

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

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

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

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

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

Вещи (спрайты) [ править ]

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

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

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

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

Игры на движке Doom [ править ]

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

Игры, построенные непосредственно на движке Doom
  • Гибель (1993)
    • Окончательная гибель (1995)
  • Гибель 2: Ад на Земле (1994)
    • Мастер-уровни для Doom II (1995)
  • Последний рок (1996)
  • Еретик (1994)
    • Еретик: Тень наездников на змеях (1996)
  • Гексен: За пределами еретика (1995)
    • Гексен: Короли смерти Темной Цитадели (1996)
  • Раздор: В поисках печати (1996)
  • Chex Quest (1996)
    • Chex Quest 2: Flemoids Take Chextropolis (1997)
Игры, основанные на коде Doom или Doom II
  • Гибель 64 (1997)
  • Hacx: Twitch 'n Kill (1997)

См. Также [ править ]

  • Список игровых движков
  • Движок шутера от первого лица
  • id Tech
  • Сборка (игровой движок)
  • Quake Engine
  • Землетрясение (сериал)
  • Список движков шутера от первого лица

Заметки [ править ]

  • Спецификация узлов GL
  • Утилиты для редактирования Doom and Doom2
  • Обзор кода движка Doom от Fabien Sanglard

Ссылки [ править ]

  1. ^ https://www.gamers.org/pub/idgames/source/doomsrc.txt
  2. ^ https://github.com/Olde-Skuul/doom3do/blob/master/LICENSE
  3. Персонал (29 декабря 1997 г.). «Источник Doom II доступен» . PC Gamer US . Архивировано из оригинального 18 февраля 1998 года . Проверено 20 ноября 2019 года .
  4. ^ [1] ftp://ftp.idsoftware.com/idstuff/source/
  5. ^ Исходный код Doom под GNU GPL - интерфейс базы данных Doomworld / idgames
  6. ^ Дум исходный код из 3ddownloads.com архива 24 февраля 2004 года, в Wayback Machine - выпущенный в 1997 году,настоящее время под GNU GPL v2 или позже,
  7. ^ «ID Tech 1 (Концепция)» . Гигантская бомба .
  8. ^ Schuytema, Paul C. (август 1994). «Светлая сторона судьбы» . Компьютерный игровой мир . С. 140, 142.
  9. ^ a b Абраш, Майкл. «Трехмерный движок Quake: общая картина» . Проверено 22 августа 2012 года .
  10. ^ Аптед, Эндрю. «СПЕЦИФИКАЦИЯ для GL-узлов» . Проверено 22 августа 2012 года .
  11. ^ Санглард, Фабьен. «Обзор кода движка Doom» . Проверено 23 августа 2012 года .

Внешние ссылки [ править ]

  • Двигатель Дум на Гибели Wiki
  • Движок рендеринга Дум на Гибели Wiki
  • Полный список игр Doom Engine
  • Исходный код движка Doom