Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Quake двигатель является игровой движок , разработанный ID Software , чтобы привести их в 1996 году видео игры Quake . В нем реализован настоящий 3D -рендеринг в реальном времени, и теперь он распространяется на условиях Стандартной общественной лицензии GNU (GPL).

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

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

История [ править ]

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

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

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

Снижение сложности 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). [5]

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

Ускорение рендеринга и порядок рендеринга [ править ]

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

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

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

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

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

Аппаратное 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, что позволило программистам редактировать движок и добавлять новые функции. Вскоре программисты выпускали в сеть новые версии движка. Некоторые из наиболее известных двигателей:

  • GoldSrc - первый движок, созданный Valve . Он был использован в Half-Life серии , привели к двигателю источника .
  • DarkPlaces - значительно модифицированный движок, используемый в нескольких автономных играх и модах Quake . [6] Хотя его последний стабильный выпуск был 13 мая 2014 г., с тех пор он получил множество обновлений через репозиторий SVN . [7] В то время как домашняя страница DarkPlaces и исходный код размещены на Icculus.org , Team Xonotic предоставляет зеркала исходного кода DarkPlaces на различных платформах социального кодирования [8] [9], поскольку игра построена и распространяется с разрабатываемой версией двигатель.
  • Tenebrae - производная версия, которая первой ввела в движок Quake освещение и затенение в реальном времени .
  • Telejano - модификация, которая добавляет много дополнительных функций и эффектов частиц.
  • Tomaz Quake - одна из первых модификаций движка Quake в сети. Tomaz Quake последний раз обновлялся до версии 1.481 8 июня 2010 г.
  • Twilight Engine - самый быстрый из известных движков Quake , эта модификация основана на производительности, а не на дополнительных функциях.
  • vkQuake - использует API Vulkan для рендеринга, запрограммированный сотрудником id Software Акселем Гнейтингом, выпущенный под GPLv2 . [10] [11]

Игры на движке Quake [ править ]

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

  • QuArK - многоцелевой инструмент дляигрнадвижке Quake .

См. Также [ править ]

  • Список игровых движков
  • Движок шутера от первого лица
  • id Tech
  • Quake II движок

Ссылки [ править ]

  1. ^ "Выпуск движка Quake под лицензией GPL" . Проверено 24 мая 2020 .
  2. ^ "id Tech 2 GPL release" . Проверено 24 мая 2020 .
  3. ^ "Джон Ромеро все еще любит стрелять в людей?" . Следующее поколение . № 30. июнь 1997. С. 9–12.
  4. ^ Край , май 1997, Моя первоначальная идея состояла в том, чтобы сделать что - то вроде Virtua Fighter в 3D мире, с полным рукопашным боем, но вы бы также иметь возможность работать через мир, и делать те же вещи , что вы делаете в Quake , только когда вы попадаете в эти рукопашные схватки, камера откроется в перспективе от третьего лица. Это было бы здорово, но никто другой не поверил, что попробует. Проект длился слишком долго, и всем хотелось прибегнуть к самому безопасному - формуле.
  5. ^ Abrash, Майкл. «Трехмерный движок Quake: общая картина» . Проверено 22 августа 2012 года .
  6. ^ "Домашняя страница DarkPlaces" . icculus.org . Проверено 6 ноября 2017 .
  7. ^ "Репозиторий подрывной деятельности Darkplaces" . svn.icculus.org . Проверено 9 августа 2019 .
  8. ^ "DarkPlaces Quake Engine на Xonotic GitLab" . Проверено 3 февраля 2020 .
  9. ^ "DarkPlaces Quake Engine на Xonotic GitHub" . Проверено 6 ноября 2017 .
  10. ^ Gneiting, Axel (2016-07-20). «Мой порт Vulkan Quake 1 работает с модом« In the Shadows ». Некоторые вещи все еще отсутствуют. Код находится здесь https://github.com/Novum/vkQuake» . Twitter . Проверено 6 августа 2016 .
  11. ^ "Порт Vulkan Quake на основе QuakeSpasm" . github.com/Novum/vkQuake . Проверено 6 августа 2016 .

Внешние ссылки [ править ]

  • Модель освещения Quake : кэширование поверхности , Майкл Абраш.
  • Анализ кода движка Quake от Фабьена Сангларда
  • Исходный код для winquake, glquake, quakeworld и glquakeworld