Quake engine («движок Quake») — игровой движок, разработанный в 1996 году американской компанией id Software для использования в шутере от первого лица Quake. Quake engine стал одним из первых движков, способным обрабатывать в реальном времени полностью трехмерную графику. Наработки движка были применены компанией при разработке игровых движков следующего поколения — id Tech 2 и id Tech 3, которые были созданы для игр Quake II и Quake III Arena соответственно.

Согласно традиции id Software, спустя некоторое время после успешного коммерческого лицензирования движок стал доступен для бесплатного использования по условиям лицензии GNU General Public License, которая подразумевает под собой право копировать, модифицировать и распространять его содержимое. Это оказало большое влияние на развитие мира открытого программного обеспечения, а также породило большое количество форков — сторонних игровых движков, основанных на Quake engine.

Подобно движку Doom, Quake engine использует систему BSP-деревьев. Движок также использует затенение по методу Гуро для подвижных объектов и карт освещения — для статических.

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

История разработки

Движок был написан американским программистом Джоном Кармаком () в 1996 году на языке Си специально для игры Quake. К разработке также был причастен Майкл Абраш (), который помогал Кармаку с алгоритмами и оптимизацией кода на ассемблере.

Разработка движка оказала влияние на развитие индустрии компьютерных игр. Фактически, это был один из первых движков, имеющих открытую архитектуру. Это подразумевает то, что разработчики могут гибко использовать и модифицировать игры, потому что все используемые ресурсы содержатся в отдельных архивах с расширением .PAK. Кроме того, движок содержит консоль, в которой используется своя система команд. Примечательной возможностью является также использование специальных конфигурационных файлов для настройки, которые пользователь может открыть в любом текстовом редакторе. Такие текстовые файлы содержат параметры игры, касающиеся как обработки графики, так и управления. Посредством изменения параметров в текстовом файле пользователь может настроить игру по собственному усмотрению.

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

Основным конкурентом игры Quake на то время являлся Duke Nukem 3D, который использовал игровой движок Build. Эта технология использовала спрайтовые модели и устаревшие методы моделирования уровней, из-за чего сильно проигрывала Quake engine в плане графики, а, следовательно, не пользовалась таким успехом при лицензировании сторонними разработчиками. Движок Quake был положен в основу при разработке GoldSource — технологии, на которой была создана игра Half-Life. Игры и модификации на этом движке активно выходят до сих пор.

Технические характеристики Сокращение трёхмерной сложности для увеличения скорости

Компьютерная игра Quake стала одной из первых в мире «полноценных» трёхмерных игр.

Игра использует специальную систему проектирования карт, которая выполняет предварительную обработку и предварительный рендеринг трёхмерного окружения с целью уменьшения необходимой мощности для обработки изображения во время процесса игры. Данная возможность была востребована, так как во время выхода игры стандартные процессоры имели частоту 50-75 МГц. Трёхмерная среда, в которой происходят действия игры, относится к карте даже при том, что эта среда трёхмерная по природе, а не плоское двухмерное пространство. Программа для редактирования карт использует многие простые выпуклые трёхмерные геометрические объекты, известные как «браши» (от  — ), которые имеют возможность устанавливать свой размер и степень поворота — такими объектами могут быть различные предметы окружения.

Кисти размещаются и поворачиваются так, чтобы создать закрытые, пустые, объёмные пространства. Когда дизайн карты закончен, эта карта пропускается через препроцессор рендеринга. Этот препроцессор используется для определения местонахождения двух типов пустого пространства на карте: пустого пространства, созданного кистями, в котором будет находиться игрок во время игры; и другого пустого пространства, которое находится снаружи кистей и которое игрок никогда не увидит. Потом препроцессор убирает невидимые поверхности с отдельных кистей, которые находятся вне игрового пространства, и оставляет только те полигоны, которые определяют лишь внешний периметр внутреннего игрового пространства — таким образом достигается значительная оптимизация движка, и как следствие, ускоряется его работа.

У обработанного файла с картой количество полигонов может быть существенно меньшим, чем у первоначального необработанного файла. На компьютерах того времени, центральные процессоры которых имели частоту в районе 50—70 МГц, было нормальным, что операция по отсечению занимала много часов.

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

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

После того, как карта была предварительно обработана, она уже не подлежит изменению. Вместо этого первоначальные данные из редактора карт вместе с кистями сохраняются и используются для создания новых версий карты. Несмотря на это, возможно редактировать обработанную карту, открыв её в специальном вершинном () редакторе и редактировать необработанные вершинные данные, или же добавлять или удалять конкретные полигоны. Читеры использовали такую методику для создания «окон» в стенах, чтобы видеть передвижения противников во время сетевой игры. В современных играх сделать подобное является затруднительным, так как игры обычно сверяют контрольную сумму каждого файла при помощи античитерской программы, и если файл не совпадает с оригинальным — вход в сетевую игру не допускается.

Предвычисление освещения и затенения Движок Quake также задействует использование карт освещения и трёхмерных источников света, в отличие от статического освещения, основанного на секторах, которое использовалось в прошлых играх. Эта инновационная методика id Software начала использоваться во многих играх, которые были выпущены после Quake, особенно в шутерах от первого лица. При этом сама id Software переключилась на использование новой модели унифицированного освещения и затенения (), применив её в движке id Tech 4 (первая игра на его основе — Doom 3).

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

Секционирование карты для увеличения скорости

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

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

Этот эффект может быть замечен в игре как маленькие туннели с изгибами под прямым углом, ведущими от одного большого пространства в другое большое пространство (данный дизайнерский прием особенно заметен в игре Half-Life, где небольшие коридоры за прямым углом скрывают следующий игровой уровень). Маленький туннель используется для блокировки взгляда в смежное неотрендеренное пространство, и специальный тип прозрачной кисти (называемый visportal) используется для определения краёв того места, где движок должен прекратить рендеринг смежного пространства. В игре Quake возможность видеть через всю длину карты является довольно редкой, открытые пространства часто являются очень узкими и высокими, прежде всего используя расстояния «выше» — открытое небо и «ниже» — лава (а не «шире» и «дальше»); таким образом, создаётся низкополигональная иллюзия открытого пространства.

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

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

Аппаратное 3D-ускорение Движок Quake, кроме того, что являлся одним из первых в мире трёхмерных движков, также являлся первым движком, который поддерживал аппаратную 3D-акселерацию (ускорение). Первоначально игра Quake (и, соответственно, движок) имела лишь поддержку программного рендеринга. Однако позже Джон Кармак создал версию движка, которая использовала преимущества графического чипа Vérité 1000 компании Rendition (эта версия движка получила внутреннее имя VQuake).