На каком движке сделан doom

Обновлено: 07.07.2024

Движок был написан на Си на рабочих станциях NEXTSTEP . Изначально использовался компилятор Watcom C . Утилиты были написаны под NeXT на Objective-C . Движок Doom был прогрессивным для своего времени.

Все вычисления проводятся в Рендеринг

Для ускорения отображения используется Сетевой код

Doom основан на модели « Игры на движке Doom’а

Мод Ghostbusters для Doom

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

В декабре 1997 года исходный текст Doom для 1998 года выпустить свободной GNU General Public License . Остальные ресурсы так и остаются платными.

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

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

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

Идея мододела под ником gamehacker состояла в том, чтобы перенести классические уровни Doom и Doom 2 на движок id Tech 4, сохранив дух классических игр. Doom Reborn использует исходную геометрию первых двух частей, поэтому вы по-прежнему будете лицезреть квадратное окружение и плоские стены. Однако световые эффекты и трёхмерные противники прибыли из Doom 3.

Doom Reborn ещё не закончена — свежая версия 1.61 помечена как предварительная «бета», куда перенесён не весь запланированный контент. Мод доступен для загрузки на Mod DB. Обратите внимание: чтобы использовать сохранения, нужно поставить патч, включённый в новую сборку.

Несмотря на то что большинство моделей из Doom 3 автор заменил собственными и перенёс мод на автономные рельсы, пожелать удачи в вопросах интеллектуальной собственности ему всё же стоит: недавно ZeniMax, владеющая id Software, потребовала закрыть любительский ремейк первой Doom.

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 года исходный код был позже переиздан под лицензией GNU General Public License v2.0 или более поздней версии, 3 октября 1999 года. Десятки неофициальных исходных портов Doom , которые были созданы с тех пор, позволяют Doom работать в ранее неподдерживаемых операционных системах, а иногда и радикально расширять функциональность движка с новыми функциями.

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

СОДЕРЖАНИЕ

Игровой мир

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

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

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

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

Основные объекты

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

Секторов

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

Sidedefs

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

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

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

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

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

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

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

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

Рендеринг

Рисуем стены

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

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

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

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

Пол и потолок

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

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

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

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

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

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

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

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

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

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

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

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

Себастьян Перейро

Не спорю - в технологии обработки изображения произошло много изменений, но всетаки чем-же вам нравится этот двигатель?

Никита Болков

Он создает атмосферу. Как ни парадоксально звучит, но современные движки не способны из-за обилия спецэффектов добиться от игрока полного погружения. А еще этот звук такой хрумкающий.

Игорь Ушаков

Дмитрий Трунов

Станислав Гудилин

псевдо 3д это оригинальное, но в то же время и единственно верное решение, позволившее максимально передать атмосферу зд экшна, так как машины, имеющиеся у юзеров в то время максимум, что могли - это Doom

Читайте также: