Разработчики) | id Software , (Джон Кармак, Джон Ромеро, Дэйв Тейлор) |
---|---|
Окончательный релиз | 1.9 / 1 февраля 1995 г . |
Репозиторий | github.com/id-Software/DOOM |
Написано в | C , язык ассемблера |
Платформа | DOS , Microsoft Windows , MacOS , Linux , Android , Amiga Workbench , NeXTSTEP , Macintosh , Commodore Amiga , NeXT , SNES , Atari Jaguar , Sega 32X , Sony PlayStation , Panasonic 3DO , Nintendo 64 , Sega Saturn , Game Boy Advance , Nintendo Switch |
Преемник | Quake Engine |
Лицензия | GNU GPL-2.0 или более поздняя [1] Лицензия MIT [2] |
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 сортирует подсекторы в правильном порядке для рендеринга. Алгоритм довольно прост:
- Начните с корневого узла.
- Рекурсивно нарисуйте дочерние узлы этого узла. Дочерний узел, ближайший к камере, сначала рисуется с использованием алгоритма Scanline . Это можно найти, посмотрев, на какой стороне разделительной линии узла находится камера.
- Когда подсектор достигнут, нарисуйте его. [11]
Процесс завершен, когда весь столбец пикселей заполнен (т. Е. Больше не осталось пробелов). Такой порядок гарантирует, что время не будет тратиться на рисование невидимых объектов, и в результате карты могут стать очень большими без каких-либо потерь скорости.
Рендеринг [ править ]
В этом разделе не процитировать любые источники . Январь 2012 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) ( |
Рисование стен [ править ]
Все стены в 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
Ссылки [ править ]
- ^ https://www.gamers.org/pub/idgames/source/doomsrc.txt
- ^ https://github.com/Olde-Skuul/doom3do/blob/master/LICENSE
- ↑ Персонал (29 декабря 1997 г.). «Источник Doom II доступен» . PC Gamer US . Архивировано из оригинального 18 февраля 1998 года . Проверено 20 ноября 2019 года .
- ^ [1] ftp://ftp.idsoftware.com/idstuff/source/
- ^ Исходный код Doom под GNU GPL - интерфейс базы данных Doomworld / idgames
- ^ Дум исходный код из 3ddownloads.com архива 24 февраля 2004 года, в Wayback Machine - выпущенный в 1997 году,настоящее время под GNU GPL v2 или позже,
- ^ «ID Tech 1 (Концепция)» . Гигантская бомба .
- ^ Schuytema, Paul C. (август 1994). «Светлая сторона судьбы» . Компьютерный игровой мир . С. 140, 142.
- ^ a b Абраш, Майкл. «Трехмерный движок Quake: общая картина» . Проверено 22 августа 2012 года .
- ^ Аптед, Эндрю. «СПЕЦИФИКАЦИЯ для GL-узлов» . Проверено 22 августа 2012 года .
- ^ Санглард, Фабьен. «Обзор кода движка Doom» . Проверено 23 августа 2012 года .
Внешние ссылки [ править ]
- Двигатель Дум на Гибели Wiki
- Движок рендеринга Дум на Гибели Wiki
- Полный список игр Doom Engine
- Исходный код движка Doom