Двигатель Quake - Quake engine

Quake Engine
Разработчики) id Software , ( Джон Кармак , Майкл Абраш , Джон Кэш)
Окончательный релиз
1.09 / 21 декабря 1999 г . ; 21 год назад ( 1999-12-21 )
Репозиторий github.com/id-Software/Quake
Написано в C , Assembly (для рендеринга и оптимизации программного обеспечения)
Платформа DOS , AmigaOS , Microsoft Windows , macOS , Linux , Amiga , PowerPC , Nintendo 64 , RiscPC , Zeebo
Предшественник Двигатель судьбы
Преемник Движок Quake II , GoldSrc
Лицензия GNU GPL-2.0 или новее
Веб-сайт www .idsoftware .com Отредактируйте это в Викиданных

Quake двигатель является игровой движок , разработанный ID Software , чтобы привести их в 1996 году видео игры Quake . В нем реализован настоящий 3D -рендеринг в реальном времени, и теперь он распространяется на условиях GNU General Public License v2.0 или более поздней версии .

После релиза он сразу же раздвоился , как и дизайн уровней. Большая часть движка осталась в Quake II и Quake III Arena . Quake двигатель, как Думы двигатель , используется бинарное разбиение пространства (BSP) для оптимизации мировой визуализации. Quake двигатель также используется Гуро для движущихся объектов, а также статический лайтмап для неподвижных объектов.

Исторически движок Quake рассматривался как отдельный движок от его преемника, движка Quake II . Однако теперь оба движка считаются вариантами id Tech 2 . Хотя кодовые базы для Quake и Quake II были отдельными выпусками под лицензией GPL.

История

Quake двигатель был разработан с 1995 по видео игры Quake , выпущенный 22 июня 1996 года Джон Кармак сделал большую часть программирования двигателя, с помощью Абраш в алгоритмах и сборке оптимизации . На нем был основан движок Quake II (id Tech 2).

Джон Ромеро изначально задумывал Quake как экшн, действие которого происходит в полностью трехмерном многоугольном мире, вдохновленное трехмерной файтинг-игрой Virtua Fighter от Sega AM2 . Quake также должен был включать в себя рукопашный бой от третьего лица под влиянием Virtua Fighter . Однако id Software посчитала это рискованным, и на разработку движка ушло бы больше времени. Поскольку проект затягивался, рукопашный бой от третьего лица в конечном итоге был прекращен.

Конструкция двигателя и основные этапы развития

Снижение сложности 3D для увеличения скорости

Упрощенный процесс уменьшения сложности карты в Quake

Quake была первой истинно-трехмерной игрой, в которой использовалась специальная система проектирования карт, которая предварительно обрабатывала и отрисовывала некоторые элементы трехмерной среды, чтобы уменьшить объем обработки, необходимой при игре на процессорах 50–75 МГц того времени. Трехмерная среда, в которой происходит игра, называется картой , даже если она трехмерная по своей природе, а не плоское двухмерное пространство. Программа редактора карт использует ряд простых выпуклых трехмерных геометрических объектов, известных как кисти , размер и вращение которых позволяют построить среду. Кисти размещаются и ориентируются так, чтобы создать замкнутое пустое объемное пространство, а когда дизайн завершен, карта проходит через препроцессор визуализации. Препроцессор используется для определения местоположения двух типов пустого пространства на карте: пустого пространства, окруженного кистями, в котором будет проходить игра, и другого пустого пространства за пределами кистей, которое игрок никогда не увидит. Затем препроцессор удаляет задние грани отдельных кистей, которые находятся за пределами игрового пространства, оставляя только несколько полигонов, определяющих внешний периметр замкнутого игрового пространства.

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

Обработанный файл карты может иметь гораздо меньшее количество полигонов, чем исходная необработанная карта, часто на 50–80%. На компьютерах того времени с частотой 50–75 МГц этот этап обрезки обычно занимал много часов на карте, и часто выполнялся за ночь, если дизайн карты был чрезвычайно сложным.

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

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

Предварительный расчет освещения и теней

В Quake также использовались карты освещения и трехмерные источники света, в отличие от статического освещения на основе секторов, которое использовалось в играх прошлого. Инновации id Software использовались во многих 3D-играх, выпущенных с тех пор, особенно в шутерах от первого лица, хотя id Software перешла на унифицированную модель освещения и затенения для Doom 3 (однако, начиная с RAGE , они вернулись к световому или полуосвещенному методу). ). После того, как карта была удалена от лишних полигонов, была использована вторая система предварительной обработки для предварительного расчета и запекания световых карт в игровую карту, чтобы еще больше снизить нагрузку на ЦП во время игры. Однако полная обработка света может занять очень много времени, поэтому для начального процесса проектирования карты может быть выполнена обработка света меньшего качества, но за счет создания неровного ступенчатого освещения вокруг источников света.

Разбиение карты на части для увеличения скорости

Чтобы еще больше снизить нагрузку на 3D-рендеринг, был разработан механизм для разделения больших областей карты, которые в настоящее время не видны игроку, чтобы движку не нужно было отображать эти невидимые пространства. Механизм 3D-рендеринга без какой-либо такой оптимизации должен отрисовывать каждую часть мира, а затем пытаться определить, какие полигоны являются ближайшими, а затем скрыть все полигоны, расположенные за этими ближайшими полигонами (метод, известный как Z-буферизация ). Тот факт, что многоугольник не виден, не означает, что он исключен из расчетов сцены.

Quake двигатель был оптимизирован специально , чтобы устранить эту проблему. Движку можно было сказать заранее, чтобы он не вычислял рендеринг для всех объектов в любом пространстве вне поля зрения игрока, что значительно снизило нагрузку рендеринга на ЦП. Этот эффект заметен в игре в виде небольших туннелей с крутыми поворотами на 90 градусов, ведущих из одного большого пространства в другое. Этот небольшой туннель служит для блокировки обзора прилегающего неотрисованного пространства, и в него помещается специальный тип прозрачной кисти (называемый визпорталом ), определяющий край, на котором движок должен прекратить визуализацию прилегающего пространства. В оригинальном Quake редко можно видеть по всей длине карты, а открытые пространства часто бывают очень высокими и узкими, в основном за счет расстояния вверху в открытое небо или внизу в лаву, чтобы создать низкополигональную иллюзию простора. .

Как выполняется секционирование

Двоичного разбиения (BSP) строится дерево с карты, что упрощает сложность поиска для данного многоугольника на O (количество полигонов). Каждый лист создает некоторую область трехмерного пространства (представьте, как разрезать пирог на произвольные кусочки). С листьями этого двоичного дерева связаны многоугольники исходной карты, которые затем используются для вычисления видимости каждой области. Для каждой области алгоритм VSD находит части карты, для которых существует прямая видимость. Это называется потенциально видимым набором (PVS).

Этот процесс использует большой объем памяти, так как он должен занимать (где - количество полигонов) биты (требуется только видимая / скрытая информация). Джон Кармак понял, что в одной области видна лишь небольшая часть других областей, поэтому он сжал эту информацию, используя кодирование длин серий (RLE). Это то , что позволило Quake " сложной геометрии s , чтобы быть оказана так быстро на оборудовании времени.

Ускорение рендеринга и порядок рендеринга

Чтобы уменьшить перерисовку (рендеринг нового пикселя, который скрывает ранее визуализированную точку, что означает, что предыдущая работа была бесполезной и потраченной впустую), сначала отображалась среда, спереди назад. Чтобы скрыть части стен, скрытые другими стенами, глобальный список краев сортирует края уже визуализированных полигонов; новые полигоны сначала были обрезаны относительно предыдущих краев, чтобы в буфер кадра попадали только видимые части.

Также во время рендеринга среды z-буфер был заполнен, но никогда не читался при рендеринге среды, поскольку дерево BSP и глобальный список краев гарантировали, что каждый пиксель был визуализирован только один раз. Позже ZBuffer использовался для правильной визуализации персонажей и других движущихся объектов, которые были частично скрыты окружающей средой.

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

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

Персонажи освещались окружающим светом и постоянным дальним светом, оба в зависимости от уровня освещенности места на полу, где стоял персонаж. Персонажи, расположенные рядом, были закрашены по Гуро и имеют аффинную текстуру, тогда как удаленные символы были визуализированы с использованием треугольного подразделения.

Аппаратное ускорение 3D

Quake была одной из первых игр, поддерживающих аппаратное ускорение 3D . Хотя изначально он был выпущен только с программным рендерингом , Джон Кармак создал версию исполняемого файла Quake, которая использовала преимущества графического чипа Vérité 1000 от Rendition ( VQuake ). Поддержка OpenGL была добавлена ​​в виде исполняемого файла GLQuake для Windows 95 и выше. Другими картами, способными отображать GLQuake, были профессиональные (и очень дорогие) карты Intergraph 3D OpenGL, а затем карты PowerVR .

Чтобы оптимизировать механизм программного рендеринга, карты освещения разделялись полигонами, расположенными близко в пространстве и находящимися в одном листе дерева BSP. Это означает, что довольно часто полигоны, использующие одну и ту же основную текстуру, не могут быть визуализированы одновременно с 3D-ускорением из-за того, что второй блок мульти-текстурирования должен быть перенастроен с помощью другой карты освещения. Это архитектурное решение снизило производительность рендеринга с аппаратным ускорением.

Сетевая игра

Quake включает в себя кооперативные и Deathmatch многопользовательские режимы над LAN или Интернет . Позже с помощью модов были добавлены дополнительные многопользовательские режимы .

Quake использует модель клиент-сервер , в которой сервер контролирует все игровые события. Все игроки подключаются к этому серверу для участия, при этом сервер сообщает клиентам, что происходит в игре. Сервер может быть выделенным сервером или сервером прослушивания . Даже в последней ситуации Quake по- прежнему использует модель клиент-сервер, в отличие от одноранговой сети, используемой в некоторых других играх. Таким образом, Quake не может пострадать от несинхронизированных сетевых игр, которые могут происходить от разных клиентов, не согласных друг с другом, поскольку сервер всегда является окончательной властью.

Производные двигатели

Семейное древо, иллюстрирующее происхождение движков Quake (этот график последний раз обновлялся в 2013 году)

21 декабря 1999 года Джон Кармак из id Software опубликовал исходный код движка Quake в Интернете на условиях GPL-2.0 или более поздней версии, что позволило программистам редактировать движок и добавлять новые функции. Вскоре программисты выпускали в сеть новые версии движка. Некоторые из наиболее известных двигателей:

  • DarkPlaces - значительно модифицированный движок, используемый в нескольких автономных играх и модах Quake . Хотя его последний стабильный выпуск был 13 мая 2014 года, с тех пор он получил множество обновлений через репозиторий SVN . Его домашняя страница размещена на Icculus.org , где также размещался его репозиторий до 2021 года, когда движок переключился на репозиторий Git, размещенный на GitHub . Team Xonotic предоставляет зеркала исходного кода DarkPlaces на различных платформах социального кодирования, поскольку игра построена на разрабатываемой версии движка и распространяется вместе с ней.
  • GoldSrc - первый движок, созданный Valve . Он был использован в Half-Life серии , привели к двигателю источника .
  • MarkV - (Производное от Fitzquake и Glquake) довольно простой исходный порт Quake, который включает в себя различные функции из темных мест и других движков, которые можно включать или выключать, такие как улучшенные визуальные эффекты, покачивание головой и стили рендеринга оружия.
  • Quakespasm - современный кроссплатформенный движок Quake 1 на базе FitzQuake. Он включает в себя поддержку 64-битных процессоров и настраиваемого воспроизведения музыки, новый звуковой драйвер, некоторые графические особенности, а также многочисленные исправления ошибок и другие улучшения. Рекомендован соучредителем id Software Джоном Ромеро.
  • Telejano - модификация, которая добавляет много дополнительных функций и эффектов частиц.
  • Tenebrae - производная версия, которая первой ввела в движок Quake освещение и затенение в реальном времени .
  • Tomaz Quake - одна из первых модификаций движка Quake в сети. Tomaz Quake последний раз обновлялся до версии 1.481 8 июня 2010 г.
  • Twilight Engine - самый быстрый из известных движков Quake , эта модификация основана на производительности, а не на дополнительных функциях.
  • vkQuake - (Производная от Quakespasm) Использует API Vulkan для рендеринга, запрограммированного сотрудником id Software Акселем Гнейтингом, выпущенным под лицензией GPLv2 .

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

Год Заголовок Разработчики) Издатель (ы)
1996 г. Землетрясение id Программное обеспечение GT Interactive
1997 г. Пакет заданий Quake №1: Бич Армагона Hipnotic Interactive 3D Realms
Пакет заданий Quake № 2: Растворение вечности Rogue Entertainment 3D Realms
Гексен II Программное обеспечение Raven id Software , Activision
Злоба Ratloop Квантовая Axcess
Люди Икс: Опустошители Апокалипсиса Развлечения в невесомости WizardWorks
1998 г. Набор миссий Hexen II: Портал Praevus Программное обеспечение Raven id Software , Activision
2000 г. Лазерная арена Trainwreck Studios ValuSoft
2001 г. Оперативник ЦРУ: Одиночные миссии 2015, Inc. , Trainwreck Studios ValuSoft
Городской наемник Moshpit Entertainment
2002 г. Вечная война: тени света Программное обеспечение Two Guys Программное обеспечение Two Guys
2005 г. Nexuiz Alientrap Alientrap
2011 г. Ксонотический Команда Xonotic Команда Xonotic
2021 г. Гнев: Эон разорения 3D Realms 3D Realms , 1С Развлечения

Инструменты движка Quake

  • QuArK - многоцелевой инструмент дляигрнадвижке Quake .
  • Trenchbroom 2.0 - редактор карт для игр на движке Quake .
  • PakExpl - используется для открытия файлов .pak, содержащих данные о модели, звуке и уровнях Quake , а также файл progs.dat .
  • fteqccgui - используется для открытия файла progs.dat для редактирования файлов quakec, которые управляют поведением объекта.
  • qME 3.1 - Последняя версия инструмента редактирования моделей Quake , может использоваться для преобразования традиционных файлов 3D-моделей в формат Quake .mdl.
  • qPAK - еще один инструмент для открытия архивов Quake .pak. Поставляется в комплекте с qME.

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

использованная литература

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