Думовый движок
Разработчик(и) | id Software (Джон Кармак, Джон Ромеро, Дэйв Тейлор) |
---|---|
Финальный выпуск | 1,9
/ 1 февраля 1995 г |
Репозиторий | github.com/id-Software/DOOM |
Написано в | С , язык ассемблера |
Платформа | MS-DOS , PC-98 Windows , Mac , Linux , Android , Amiga , NeXTSTEP , NeXT , Jaguar , 32X , PlayStation , 3DO , Nintendo 64 , Saturn , Game Boy Advance , Switch , BSD , Unix , другие |
Предшественник | Вольфенштейн 3D-движок |
Преемник | Квейк-движок |
Лицензия | GNU GPL-2.0 или новее [ 1 ] 3ДО : С [ 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 , компьютерах [ 3 ] он был портирован на MS-DOS и совместимые операционные системы для Doom первоначального выпуска , а позже был портирован на несколько игровых консолей и операционных систем .
Исходный код для Linux версии Doom был опубликован для общественности по лицензии, предоставляющей права на некоммерческое использование 23 декабря 1997 года, а последовала версия Doom II для Linux. примерно неделю спустя, 29 декабря 1997 года, [ 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 может иметь одну или две стороны, которые называются «sidedef». Затем боковые определения группируются в многоугольники ; они называются «секторами». Секторы представляют собой отдельные области уровня.
Секторы
[ редактировать ]Каждый сектор содержит ряд свойств: высоту пола, высоту потолка, уровень освещенности, текстуру пола и текстуру потолка. Например, чтобы иметь другой уровень освещенности в определенной области, для этой области необходимо создать новый сектор с другим уровнем освещенности. Таким образом, односторонние линии представляют собой сплошные стены, а двусторонние линии представляют собой линии моста между секторами.
Боковые защиты
[ редактировать ]Sidedefs используются для хранения текстур стен ; они полностью отделены от текстур пола и потолка. Каждый сайддеф может иметь три текстуры; их называют средней, верхней и нижней текстурами. В односторонних линейных определениях для текстуры на стене используется только средняя текстура. В двусторонних линейных определениях ситуация сложнее. Нижняя и верхняя текстуры используются для заполнения промежутков, где соседние сектора имеют разную высоту пола и потолка: нижние текстуры используются, например, для ступенек. Боковые защиты также могут иметь среднюю текстуру, хотя у большинства ее нет; это используется для того, чтобы текстуры висели в воздухе. Например, когда видна прозрачная полосчатая текстура, образующая клетку, это пример средней текстуры двустороннего определения линии.
Разделение двоичного пространства
[ редактировать ]Doom использует систему, известную как разделение двоичного пространства (BSP). [ 10 ] Инструмент используется для предварительного создания данных BSP для уровня. На большом уровне этот процесс может занять довольно много времени. невозможно передвигать стены Именно из-за этого в Doom ; хотя двери и лифты движутся вверх и вниз, ни один из них никогда не движется в сторону.
Уровень разделен на двоичное дерево : каждое место в дереве представляет собой «узел», который представляет определенную область уровня (корневой узел представляет весь уровень). На каждой ветви дерева имеется разделительная линия, разделяющая область узла на два подузла. В то же время разделительная линия делит определения линий на сегменты, называемые «сегтами». [ 11 ]
На листьях дерева расположены выпуклые многоугольники , где дальнейшее деление уровня не нужно. Эти выпуклые многоугольники называются подсекторами (или «SSECTORS») и привязаны к определенному сектору. Каждый подсектор имеет список связанных с ним сегментов. [ 10 ]
Система BSP сортирует подсекторы в правильном порядке для рендеринга. Алгоритм достаточно прост:
- Начните с корневого узла.
- Нарисуйте дочерние узлы этого узла рекурсивно. Дочерний узел, ближайший к камере, рисуется первым с использованием алгоритма Scanline . Это можно узнать, посмотрев, на какой стороне разделительной линии узла находится камера.
- Когда будет достигнут подсектор, нарисуйте его. [ 12 ]
Процесс завершается, когда заполняется весь столбец пикселей (т. е. больше не остается пробелов). Такое упорядочение гарантирует, что на рисование невидимых объектов не тратится время, и в результате карты могут стать очень большими без какого-либо снижения скорости.
Рендеринг
[ редактировать ]Возможно, этот раздел содержит оригинальные исследования . ( февраль 2023 г. ) |
Рисуем стены
[ редактировать ]Все стены в Doom нарисованы вертикально; именно из-за этого невозможно нормально посмотреть вверх и вниз. Можно выполнить поиск вверх/вниз с помощью «y-shearing» , и многие современные порты исходного кода Doom делают это, а также более поздние игры, использующие этот движок, такие как Heretic . По сути, это работает путем перемещения линии горизонта вверх и вниз по экрану, фактически обеспечивая «окно» в более высокую видимую область. Двигая окно вверх и вниз, можно создать иллюзию взгляда вверх и вниз. Однако это будет искажать вид по мере того, как игрок будет смотреть вверх и вниз.
Движок Doom визуализирует стены по мере прохождения BSP-дерева, рисуя подсекторы в порядке расстояния от камеры, так что ближайшие сегменты рисуются первыми. По мере рисования сегменты сохраняются в связанном списке. Это используется для обрезки других сегментов, отображаемых позже, чтобы уменьшить перерисовку. Это также используется позже для обрезки краев спрайтов.
Как только движок достигает сплошной (односторонней) стены в определенной координате x, больше не нужно рисовать линии в этой области. Для обрезки движок сохраняет «карту» областей экрана, где были достигнуты твердые стены. Это позволяет полностью обрезать удаленные части уровня, невидимые для игрока.
Графический формат Doom хранит текстуры стен в виде наборов вертикальных колонн ; это полезно для средства визуализации, которое по существу визуализирует стены, рисуя множество вертикальных столбцов текстур.
Пол и потолок
[ редактировать ]Система рисования полов и потолков («квартиры») менее изящна. [ по мнению кого? ] чем тот, который использовался для стен. Квартиры рисуются с помощью алгоритма, похожего на заливку заливкой . Из-за этого, если используется плохой конструктор BSP, иногда можно получить «дыры», в которых пол или потолок доходят до краев экрана, визуальная ошибка, обычно называемая «следом слизи». [ 13 ] Это также причина, по которой, если игрок выйдет за пределы уровня, используя чит-код noclip, полы и потолки будут казаться вытянутыми из уровня в пустое пространство.
Пол и потолок нарисованы в виде «виспланов». Они представляют собой горизонтальные участки текстуры от пола или потолка на определенной высоте, уровне освещенности и текстуре (если два соседних сектора имеют одинаковый пол, они могут быть объединены в одну визуальную плоскость). Каждая позиция x на визуальной плоскости имеет определенную вертикальную линию текстуры, которую необходимо нарисовать.
Из-за ограничения рисования одной вертикальной линии в каждой позиции x иногда необходимо разделить визуальные плоскости на несколько визуальных плоскостей. Например, рассмотрим пол с двумя концентрическими квадратами. Внутренний квадрат вертикально разделит окружающий этаж. В том горизонтальном диапазоне, где нарисован внутренний квадрат, необходимы две визплоскости для окружающего пола.
Это приводит к одному из классических ограничений Doom , которое расстраивает многих картографов. [ ВОЗ? ] надолго. В Doom было статическое ограничение на количество визуальных самолетов; в случае превышения произойдет «переполнение визплана», в результате чего игра выйдет в DOS с одним из двух сообщений: «Виспланов больше нет!» или «переполнение визплана (128 или выше)». Самый простой способ активировать ограничение визплана — это использовать большой шахматный узор на полу; это создает большое количество визуальных самолетов.
По мере рендеринга сегментов также добавляются визуальные плоскости, идущие от краев сегментов к вертикальным краям экрана. Они простираются до тех пор, пока не достигнут существующих визуальных плоскостей. Из-за того, как это работает, система зависит от того, что сегменты отображаются по порядку всем движком; необходимо сначала приблизить визпланы, чтобы они могли «отсечь» других, находящихся дальше. Если не остановить, пол или потолок «затекут» до краев экрана, как описано ранее. В конце концов, визуальные плоскости формируют «карту» определенных областей экрана, на которой можно рисовать определенные текстуры.
Хотя визпланы состоят по существу из вертикальных «полос», фактическая низкоуровневая визуализация выполняется в виде горизонтальных «промежутков» текстуры. После того, как все визуальные плоскости построены, они преобразуются в промежутки, которые затем отображаются на экране. Кажется, это компромисс: визплоскости легче построить в виде вертикальных полос, но из-за особенностей внешнего вида текстур пола и потолка их легче рисовать в виде горизонтальных полос.
Вещи (спрайты)
[ редактировать ]Каждый сектор уровня имеет связанный список вещей, хранящихся в этом секторе. По мере рисования каждого сектора спрайты помещаются в список спрайтов, которые нужно отрисовать. Если они находятся вне поля зрения, они игнорируются.
Края спрайтов обрезаются путем проверки списка ранее нарисованных сегментов. Спрайты в Doom хранятся в том же формате на основе столбцов, что и стены, что опять же полезно для рендерера. Те же функции, которые используются для рисования стен, используются и для рисования спрайтов.
Хотя подсекторы гарантированно будут в порядке, спрайты внутри них — нет. Doom хранит список спрайтов, которые нужно отрисовать («висспрайты»), и сортирует его перед рендерингом. Далекие спрайты рисуются раньше близких. Это вызывает некоторую перерисовку, но обычно она незначительна.
Остался последний выпуск средних текстур на двусторонних линиях, например, используемых в прозрачных полосах. Они смешиваются и рисуются со спрайтами в конце процесса рендеринга, а не с другими стенами.
Игры на Doom движке
[ редактировать ]Движок Doom получил большую часть своей известности благодаря классическому шутеру от первого лица Doom , и он использовался в нескольких других играх. Обычно считается, что Doom игры на движке «большой четверки» — это Doom , Heretic , Hexen: Beyond Heretic и Strife: Quest for the Sigil .
Игры, построенные непосредственно на Doom . движке
[ редактировать ]Год | Заголовок | Разработчик |
---|---|---|
1993 | Рок | программное обеспечение id |
1994 | Дум II: Ад на Земле | |
Еретик | Программное обеспечение Raven | |
1995 | Окончательная гибель | программное обеспечение id |
Мастер-уровни для Doom II | ||
Хексен: За гранью еретика | Программное обеспечение Raven | |
1996 | Последняя гибель | КомандаТНТ |
Еретик: Тень Змеиных Всадников | Программное обеспечение Raven | |
Гексен: Короли смерти Темной Цитадели | ||
Страйф: В поисках Сигила | Роуг Развлечения |
Игры на основе Doom или Doom II кода
[ редактировать ]В 1990-х годах несколько разработчиков приобрели лицензии на распространение полных конверсий , Doom а после выпуска исходного кода в 1997 году на движке было выпущено несколько отдельных игр, включая бесплатное ПО , фанатские игры и коммерческие игры. [ 14 ]
Год | Заголовок | Разработчик |
---|---|---|
1996 | Чекс Квест | Цифровое кафе |
1997 | Дум 64 | Мидуэй Студии Сан-Диего |
Chex Quest 2: Флемоиды захватывают Чекстрополис | Цифровое кафе | |
ХаксХ | Программное обеспечение Банджо | |
2000 | Соник Робо Взрыв 2 | Соник Тим Джуниор |
2003 | Свобода | Команда Свободы |
2008 | Чекс Квест 3 | Чарльз Якоби |
Богохульник | Команда Бласпемера | |
2009 | Гармония [ 15 ] | Томас ван дер Фельден |
2014 | Приключения Квадрата [ 16 ] | Игры БигБрик |
2017 | Восстание шерстяного клубка [ 17 ] | MSPaintR0cks |
2018 | РЭКР [ 18 ] | Пересмешник Софтворкс |
2019 | Гедон [ 19 ] | Zan_HedonDev |
2020 | Проект Осирис [ 20 ] | АрктурусДелюкс |
2021 | Рвота [ 21 ] | Подонок |
2022 | Руки Некромантии [ 22 ] | Команда ОНА |
2024 | Селако [ 23 ] | Студия измененной орбиты |
См. также
[ редактировать ]- Список игровых движков
- Движок шутера от первого лица
- id Tech
- Сборка (игровой движок)
- Квейк -движок
- Землетрясение (сериал)
- Список движков шутеров от первого лица
Примечания
[ редактировать ]- Спецификация узлов GL
- Утилиты для редактирования Doom и Doom2
- Обзор кода движка Doom от Фабьена Санглара
Ссылки
[ редактировать ]- ^ «Исходный код Doom под лицензией GNU GPL» . геймеры.орг . Архивировано из оригинала 31 мая 2023 года.
- ^ "Doom3do/ЛИЦЕНЗИЯ у мастера · Olde-Skuul/Doom3do" . Гитхаб . 17 декабря 2022 г.
- ^ «NeXT Computers — Компания — История вычислений» . www.computinghistory.org.uk . Проверено 29 марта 2022 г.
- ^ Персонал (29 декабря 1997 г.). «Доступен исходный код Doom II» . ПК-геймер США . Архивировано из оригинала 18 февраля 1998 года . Проверено 20 ноября 2019 г.
- ^ https://web.archive.org/web/*/ftp://ftp.idsoftware.com/idstuff/source/* ftp://ftp.idsoftware.com/idstuff/source/ [ постоянная мертвая ссылка ]
- ^ Исходный код Doom под лицензией GNU GPL — интерфейс базы данных Doomworld /idgames.
- ^ Исходный код Doom с 3ddownloads.com. Архивировано 24 февраля 2004 г. на Wayback Machine . Выпущен в 1997 г., теперь под лицензией GNU GPL v2 или более поздней версии.
- ^ «id Tech 1 (Концепция)» . Гигантская бомба .
- ^ Шуйтема, Пол К. (август 1994 г.). «Светлая сторона судьбы» . Мир компьютерных игр . стр. 140, 142.
- ^ Перейти обратно: а б Абраш, Майкл. «Трёхмерный движок Quake: общая картина» . Проверено 22 августа 2012 г.
- ^ Аптед, Эндрю. «СПЕЦИФИКАЦИЯ для GL-узлов» . Проверено 22 августа 2012 г.
- ^ Санглар, Фабьен. «Обзор кода движка Doom» . Проверено 23 августа 2012 г.
- ↑ След слизи — The Doom Wiki
- ^ Тарасон, Доминик (01 апреля 2019 г.). «Modder Superior: множество свободных потомков Doom» . Каменно-бумажный дробовик . Проверено 14 июля 2024 г.
- ^ Гиллен, Кирон (18 ноября 2009 г.). «Гармония в моей голове: Гармония» . Каменно-бумажный дробовик . Проверено 22 февраля 2023 г.
- ^ Доу, Лиам (19 апреля 2018 г.). «The Adventures of Square — это слегка забавный ретро-шутер от первого лица, который доступен бесплатно, уже вышел второй эпизод» . Игры в Linux . Проверено 19 февраля 2023 г.
- ^ Тарасон, Доминик (07 января 2018 г.). «Shadow & Rise Of The Wool Ball делает Wolfenstein милым» . Каменно-бумажный дробовик . Проверено 14 июля 2024 г.
- ^ Циро, Рания (12 июля 2018 г.). «Думгай теперь стал своего рода викингом в игре Rekkr» . ВГР . Проверено 14 июля 2024 г.
- ^ Дигре, Аликс (16 мая 2019 г.). «Хедон — обзор игры для ПК» . ВГР . Проверено 14 июля 2024 г.
- ^ Пападопулос, Джон (16 марта 2020 г.). «Кто-то создал 3D-ремейк Alien Breed в GZDoom, и вы можете скачать его прямо сейчас» . DSOGaming . Проверено 22 июня 2024 г.
- ^ Глаговский, Питер (11 августа 2021 г.). «Обзор Вомитореума» . Технологический Раптор . Проверено 14 июля 2024 г.
- ^ Доу, Лиам (22 мая 2022 г.). «Hands of Necromancy» в жанре темного фэнтези-шутера от первого лица на базе GZDoom уже доступен» . Игры в Linux . Проверено 15 июля 2024 г.
- ^ Цвизен, Зак (31 мая 2024 г.). «Новый шутер от первого лица, созданный с использованием технологии Doom, лучше, чем большинство шутеров AAA» . Котаку . Проверено 14 июля 2024 г.