stringtranslate.com

Двигатель Doom

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

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

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

Игровой мир

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

Структура уровня

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

Вид карты в редакторе

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

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

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

Сектора

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

Sidedefs

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

Двоичное разбиение пространства

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

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

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

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

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

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

Рендеринг

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

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

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

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

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

Пол и потолок

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

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

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

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

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

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

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

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

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

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

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

Игры с использованиемРокдвигатель

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

Игры, созданные непосредственно наРокдвигатель

Игры, основанные наРокилиДум IIкод

В 1990-х годах несколько разработчиков приобрели лицензии на распространение полных версий Doom , и после публикации исходного кода в 1997 году на этом движке было создано несколько отдельных игр, включая бесплатные , фанатские и коммерческие. [14]

Смотрите также

Примечания

Ссылки

  1. ^ "Исходный код Doom, под лицензией GNU GPL". gamers.org . Архивировано из оригинала 31 мая 2023 г.
  2. ^ "Doom3do/LICENSE at master · Olde-Skuul/Doom3do". GitHub . 17 декабря 2022 г. Архивировано из оригинала 19 февраля 2022 г. Получено 14 февраля 2019 г.
  3. ^ "NeXT Computers - Компания - История вычислений". www.computinghistory.org.uk . Архивировано из оригинала 2022-03-29 . Получено 2022-03-29 .
  4. Staff (29 декабря 1997 г.). «Doom II Source Available». PC Gamer US . Архивировано из оригинала 18 февраля 1998 г. Получено 20 ноября 2019 г.
  5. ^ https://web.archive.org/web/*/ftp://ftp.idsoftware.com/idstuff/source/* ftp://ftp.idsoftware.com/idstuff/source/ [ постоянная мертвая ссылка ]
  6. ^ "Исходный код Doom, под лицензией GNU GPL - Doomworld /idgames database frontend". Архивировано из оригинала 2021-03-28 . Получено 2021-03-28 .
  7. Исходный код Doom с 3ddownloads.com. Архивировано 24 февраля 2004 г. на Wayback Machine — выпущено в 1997 г., сейчас распространяется под лицензией GNU GPL v2 или более поздней версии.
  8. ^ "id Tech 1 (Concept)". Giant Bomb . Архивировано из оригинала 2019-02-15 . Получено 2019-02-14 .
  9. ^ Schuytema, Paul C. (август 1994). «The Lighter Side Of Doom». Computer Gaming World . стр. 140, 142. Архивировано из оригинала 2018-01-02 . Получено 2019-02-14 .
  10. ^ ab Абраш, Майкл. "Quake's 3-D Engine: The Big Picture" . Получено 22 августа 2012 г. .
  11. ^ Аптед, Эндрю. "СПЕЦИФИКАЦИЯ для GL-узлов". Архивировано из оригинала 2 сентября 2012 г. Получено 22 августа 2012 г.
  12. ^ Санглард, Фабьен. "Обзор кода движка Doom". Архивировано из оригинала 3 сентября 2012 года . Получено 23 августа 2012 года .
  13. ^ Слизистый след - The Doom Wiki
  14. ^ Тарасон, Доминик (2019-04-01). "Modder Superior: The many free descendants of Doom". Rock Paper Shotgun . Архивировано из оригинала 2023-08-06 . Получено 2024-07-14 .
  15. ^ Ю, Дерек (2008-01-09). "Action Doom 2: Urban Brawl". tigsource . Получено 2008-01-09 .
  16. ^ Гиллен, Кирон (2009-11-18). "Гармония в моей голове: Гармония". Rock Paper Shotgun . Архивировано из оригинала 2023-02-23 . Получено 2023-02-22 .
  17. ^ Доу, Лиам (2018-04-19). «Приключения Квадрата — это слегка забавный ретро-шутер от первого лица, который доступен бесплатно, и второй эпизод уже вышел». GamingOnLinux . Получено 2023-02-19 .
  18. ^ Смит, Адам (03.08.2016). «Blade Of Agony — невероятный мод WolfenDoom». rockpapershotgun . Получено 03.08.2016 .
  19. ^ Тарасон, Доминик (2018-01-07). "Shadow & Rise Of The Wool Ball turn Wolfenstein cute". Rock Paper Shotgun . Архивировано из оригинала 2024-07-15 . Получено 2024-07-14 .
  20. ^ Циро, Рания (2018-07-12). «Doomguy Is Now Some Kind Of Viking In The Rekkr Game». VGR . Архивировано из оригинала 2024-07-15 . Получено 2024-07-14 .
  21. ^ Глаговски, Питер (17.08.2018). "Мод Doom 2 Annie поднимается после 12-летнего периода разработки". destructoid . Получено 17.08.2018 .
  22. ^ Тарасон, Доминик (2018-09-24). «Отважно пройдите через апокалиптическую пустошь 80-х в Doom-конверсии Ashes 2063». rockpapershotgun . Архивировано из оригинала 2021-06-17 . Получено 2018-09-24 .
  23. ^ Доу, Лиам (2018-11-05). «Total Chaos — это впечатляющая и пугающая полная конверсия Doom 2, превращающая его в игру ужасов выживания». gamingonlinux . Получено 2018-11-05 .
  24. ^ Тарасон, Доминик (14.01.2019). «Hocus Pocus Doom переносит платформер Apogee для DOS в третье измерение». rockpapershotgun . Получено 14.01.2019 .
  25. ^ Digre, Alyxx (2019-05-16). "Hedon – PC Game Review". VGR . Архивировано из оригинала 2024-07-15 . Получено 2024-07-14 .
  26. ^ Болдинг, Джонатан (27.12.2019). "Уничтожьте несколько космических ужасов в моде Doom 2 Shrine". pcgamesn . Получено 27.12.2019 .
  27. ^ Пападопулос, Джон (16.03.2020). «Кто-то создал ремейк Alien Breed 3D в GZDoom, и вы можете скачать его прямо сейчас». DSOGaming . Получено 22.06.2024 .
  28. ^ Тарасон, Доминик (27.06.2021). "Castlevania: Simon's Destiny — это настоящее удовольствие от Doom-мода". rockpapershotgun . Получено 27.06.2021 .
  29. ^ Glagowski, Peter (2021-08-11). "Vomitoreum Review". Tech Raptor . Архивировано из оригинала 2024-07-15 . Получено 2024-07-14 .
  30. Доу, Лиам (22.05.2022). «Темно-фэнтезийный FPS на базе GZDoom 'Hands of Necromancy' уже вышел». GamingOnLinux . Получено 15.07.2024 .
  31. ^ Лейн, Рик (15.08.2022). "Обзор 'Fashion Police Squad': вечный жених". nme . Получено 15.08.2022 .
  32. ^ Вернер, Адриан (2022-04-22). "CountryCide - Новая версия потрясающего темного мода для Doom 2". gamepressure . Получено 2022-04-22 .
  33. ^ «Проект Absentia». 30 октября 2022 г.
  34. ^ Хэндли, Зои (08.10.2023). "GZDoom FPS Beyond Sunset начинает свой ранний доступ сегодня". destructoid . Получено 08.10.2023 .
  35. Chalk, Andy (05.08.2023). «Supplice — это новый ретро-FPS, созданный моддерами Doom, и он действительно похож на Doom старой школы». PCGamer . Получено 05.06.2023 .
  36. ^ Zwiezen, Zack (29.09.2023). «Новый мод Doom — это, по сути, крутая игра про Индиану Джонса». kotaku . Получено 29.09.2023 .
  37. ^ Tamaster, Tamaster (21.03.2023). «Apocalyptic Vibes – захватывающее путешествие по потускневшей постъядерной Земле!». indie-hive . Получено 21.03.2023 .
  38. ^ Макхью, Алекс (17.09.2024). «Новый ретро-FPS Hands of Necromancy 2 черпает вдохновение в Heretic». pcgamesn . Получено 17.09.2024 .
  39. ^ Смит, Мова (14.12.2023). «Retro FPS Beyond Sunset — это тщательно созданная киберпанковская смесь всех великих мегавадов, которые были до нее». pcgamer . Получено 14.12.2023 .
  40. ^ Zwiezen, Zack (2024-05-31). «Новый FPS, созданный с использованием технологии Doom, лучше большинства шутеров AAA». Kotaku . Архивировано из оригинала 2024-07-15 . Получено 2024-07-14 .

Внешние ссылки