Quake Engine
?, выдержки Дятлова Н. С., источник
1. 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 обеспечивают широкие возможности для переноса программы на другие операционные системы или платформы (например, на игровую приставку).
2. Движок был написан американским программистом Джоном Кармаком (англ. John Carmack) в 1996 году на языке Си специально для игры Quake. К разработке также был причастен Майкл Абраш (англ. Michael Abrash), который помогал Кармаку с алгоритмами и оптимизацией кода на ассемблере. Разработка движка оказала огромное влияние на развитие индустрии компьютерных игр, а также на способы их разработки. Фактически, это был один из первых движков, имеющих открытую архитектуру. Это подразумевает то, что разработчики могут гибко использовать и модифицировать игры, потому что все используемые ресурсы содержатся в отдельных архивах с расширением .PAK. Кроме того, движок содержит консоль, в которой используется своя система команд. Примечательной возможностью является также использование специальных конфигурационных файлов для настройки, которые пользователь может открыть в любом текстовом редакторе. Такие текстовые файлы содержат параметры игры, касающиеся как обработки графики, так и управления. Посредством изменения параметров в текстовом файле пользователь может настроить игру по собственному усмотрению. Благодаря открытой архитектуре движка для игры Quake было разработано большое количество модификаций, некоторые из которых были способны до неузнаваемости изменить игру, добавить новые локации, оружие, персонажей и ввести свои правила в игровой процесс. Многие разработчики модификаций для Quake впоследствии основали собственные компании на рынке. В качестве примера можно привести студию Ritual Entertainment, разработавшую официальное дополнение для первой части Quake, а впоследствии и другие самостоятельные проекты, такие, как шутер SiN. Одновременно с этим создание Quake привело к новому этапу в развитии индустрии компьютерных игр, практически положив конец эпохе, когда коммерческую компьютерную игру мог разработать за короткие сроки один энтузиаст. Основным конкурентом игры Quake на то время являлся Duke Nukem 3D, который использовал игровой движок Build. Эта технология использовала спрайтовые модели и устаревшие методы моделирования уровней, из-за чего сильно проигрывала Quake engine в плане графики, а, следовательно, не пользовалась таким успехом при лицензировании сторонними разработчиками. Движок Quake был положен в основу при разработке GoldSource — технологии, на которой была создана игра Half-Life. Игры и модификации на этом движке активно выходят до сих пор.
3. Игра использует специальную систему проектирования карт, которая выполняет предварительную обработку и предварительный рендеринг трёхмерного окружения с целью уменьшения необходимой мощности для обработки изображения во время процесса игры. Данная возможность была востребована, так как во время выхода игры стандартные процессоры имели частоту 50-75 МГц. Трёхмерная среда, в которой происходят действия игры, относится к карте даже при том, что эта среда трёхмерная по природе, а не плоское двухмерное пространство. Программа для редактирования карт использует многие простые выпуклые трёхмерные геометрические объекты, известные как «браши» (от англ. brush — рус. кисть), которые имеют возможность устанавливать свой размер и степень поворота — такими объектами могут быть различные предметы окружения. Кисти размещаются и поворачиваются так, чтобы создать закрытые, пустые, объёмные пространства. Когда дизайн карты закончен, эта карта пропускается через препроцессор рендеринга. Этот препроцессор используется для определения местонахождения двух типов пустого пространства на карте: пустого пространства, созданного кистями, в котором будет находиться игрок во время игры; и другого пустого пространства, которое находится снаружи кистей и которое игрок никогда не увидит. Потом препроцессор убирает невидимые поверхности с отдельных кистей, которые находятся вне игрового пространства, и оставляет только те полигоны, которые определяют лишь внешний периметр внутреннего игрового пространства — таким образом достигается значительная оптимизация движка, и как следствие, ускоряется его работа. У обработанного файла с картой количество полигонов может быть существенно меньшим, чем у первоначального необработанного файла. На компьютерах того времени, центральные процессоры которых имели частоту в районе 50—70 МГц, было нормальным, что операция по отсечению занимала много часов. Процесс предварительной обработки не может быть осуществлён, если есть хоть одно небольшое отверстие или «утечка» (англ. leak), которая связывает внутреннее игровое пространство с внешним пустым пространством. Эта проблема была обычным делом для сложных карт с многими строительными объектами, так как дизайнер уровней не мог уследить за всеми утечками на карте. Чтобы предотвратить утечки, кисти должны были накладываться одна на другую и немного проникать друг в друга. Попытка отлично выровнять кисти с необычной формой вдоль их краёв и граней могла привести к возникновению очень маленьких щелей, которые было очень трудно найти. Небо с облаками в картах игры Quake фактически не является открытым, однако оно покрыто и закрыто от внешнего пустого пространства большими кистями, а также текстурируется специальной скайбокс-текстурой, которая всегда и в любых точках обзора выглядит одинаково. Благодаря этому создаются иллюзия бескрайнего горизонта. После того, как карта была предварительно обработана, она уже не подлежит изменению. Вместо этого первоначальные данные из редактора карт вместе с кистями сохраняются и используются для создания новых версий карты. Несмотря на это, возможно редактировать обработанную карту, открыв её в специальном вершинном (англ. vertex) редакторе и редактировать необработанные вершинные данные, или же добавлять или удалять конкретные полигоны. Читеры использовали такую методику для создания «окон» в стенах, чтобы видеть передвижения противников во время сетевой игры. В современных играх сделать подобное является затруднительным, так как игры обычно сверяют контрольную сумму каждого файла при помощи античитерской программы, и если файл не совпадает с оригинальным — вход в сетевую игру не допускается. Движок Quake также задействует использование карт освещения и трёхмерных источников света, в отличие от статического освещения, основанного на секторах, которое использовалось в прошлых играх. Эта инновационная методика id Software начала использоваться во многих играх, которые были выпущены после Quake, особенно в шутерах от первого лица. При этом сама id Software переключилась на использование новой модели унифицированного освещения и затенения (англ. unified lighting and shadowing model), применив её в движке id Tech 4 (первая игра на его основе — Doom 3). После того, как карта избавлялась от лишних полигонов, использовалась вторая система предварительной обработки, которая рассчитывала и внедряла карты освещения в игровую карту, тем самым ещё более уменьшая нагрузку на центральный процессор во время игры.
4. Для оптимизации рендеринга разработана методика, которая позволяет не выполнять обработку тех частей пространства, которые в данный момент не видны игроку (например, находятся за стеной). Если игрок во время игры не может видеть какую-то область карты, находящуюся поблизости, то движок загодя может не включать невидимые объекты в процесс рендеринга, что существенно уменьшает загрузку центрального процессора.
5. В игре Quake возможность видеть через всю длину карты является довольно редкой, открытые пространства часто являются очень узкими и высокими, прежде всего используя расстояния «выше» — открытое небо и «ниже» — лава (а не «шире» и «дальше»); таким образом, создаётся низкополигональная иллюзия открытого пространства.
6. Процесс использует большое количество памяти, так как он должен взять О (количество полигонов * количество полигонов) битов (необходима только видимая/скрытая информация). Джон Кармак понял, что одна область видит только маленькую часть других областей, и он сжимал эту информацию, используя кодирование длин серий (RLE-кодирование). Именно это позволило такой сложной для того времени графике работать довольно быстро на аппаратных средствах того времени. Движок Quake, кроме того, что являлся одним из первых в мире трёхмерных движков, также являлся первым движком, который поддерживал аппаратную 3D-акселерацию (ускорение). Первоначально игра Quake (и, соответственно, движок) имела лишь поддержку программного рендеринга. Однако позже Джон Кармак создал версию движка, которая использовала преимущества графического чипа Verite 1000 компании Rendition (эта версия движка получила внутреннее имя VQuake). Поддержка OpenGL была вскоре добавлена в движок для ОС Windows 95 и выше (внутреннее имя этой версии — GLQuake). Многие полагают, что именно это создало своеобразную революцию в производстве и продаже специализированных видеокарт, которые были нужны тогда для перекладывания обработки графики с центрального процессора, а GLQuake стал первым приложением, которое действительно демонстрировало возможности графического чипсета Voodoo от компании 3dfx. Только две другие карты были способны показывать изображение на GLQuake: карта Intergraph 3D OpenGL и карта PowerVR. Обе эти карты были профессиональными и очень дорогими.
7. Это значит, что все игроки, чтобы начать совместную игру, соединяются с выделенным сервером, который высылает им ответ на события в игре. Кроме того, использование такого принципа защищает игроков от де-синхронизации сервера. В зависимости от специфического маршрута к серверу, различные клиенты имеют разный пинг (скорость передачи пакета информации в локальной сети). Высокий пинг у игрока вызывает лаги, которые затрудняют его движения и делают его более уязвимым для других игроков. Сетевой код игрового движка был переработан, а для игры Quake выпущено отдельное дополнение — QuakeWorld — которое позволило игрокам играть друг с другом по интернет-соединению, используя игровые режимы, которые впоследствии стали классическими. Мультиплеер оригинального Quake впоследствии приобрел в сообществе игроков название LAN-Quake (от англ. Local Area Network, LAN — локальная сеть). Одним из нововведений в QuakeWorld является предсказывание поведения клиента (англ. client-side prediction). Этот режим позволяет компьютеру игрока предсказывать движения объектов до ответа сервера, что позволило значительно снизить требования к скорости интернет-соединения, тем самым открыв доступ к одновременной игре на сервере огромному количеству людей.
8. Практически все игры, вышедшие после Quake, и все современные игры, используют трёхмерную оптимизацию под названием препроцессинг для того, чтобы увеличить скорость игры на персональных компьютерах пользователей и игровых приставках. Именно поэтому 3D-игры способны выводить такую качественную визуальную картинку и эффекты — большинство лишних данных было удалено ещё до того, как игрок смог бы их увидеть. Суть препроцессинга заключается в том, что ненужные объекты выгружаются из оперативной памяти после их использования, например — игрок стреляет из оружия, и использованные патроны, которые вылетают из него, тут же исчезают (при этом выгружаясь из памяти). Все игры существенно отличаются от профессиональных пакетов трёхмерного моделирования (CAD). Профессиональные программы не имеют никаких временных ограничений на рендеринг изображения. Ничто не может быть выброшено для увеличения скорости рендеринга трёхмерной технической модели, так как любая часть дизайна этой модели может измениться в любой момент. По этой причине профессиональные графические платы были значительно более дорогими и мощными, чем те графические карты, которые использовались в домашних компьютерах для запуска компьютерных игр. Профессиональные видеокарты должны обладать существенно большей мощностью обработки, так как имеют дело с полной сложностью необработанного трехмерного пространства. Поскольку Quake была первой полностью трёхмерной игрой в своём виде, она должна была иметь возможность работать на компьютере, который не имеет видеоакселератора, поэтому в нее были включены широкие возможности, касающиеся программной обработки изображения, то есть процесс вывода графики ложится не на видеокарту, а на процессор. В то время видеоакселераторы составляли новый и непредсказуемый рынок, и была неопределённость, будут ли они пользоваться спросом или нет. Сейчас видеокарты составляют известный и высоко развивающийся рынок и являются необходимым компонентом любого нового компьютера. Преимущественное большинство современных компьютерных игр не может вообще работать, если не доступно аппаратное трёхмерное ускорение, то есть видеокарта, в то же время игры того времени преимущественно использовали процессор для вывода графики.
9. Quake engine был положен в основу при разработке другой технологии id Software, движка id Tech 2 (ранее известного как Quake 2 engine). Последующие движки компании, такие как Id Tech 3 (для игры Quake III Arena) и id Tech 4 (впервые использованный в Doom 3), вероятно также содержат небольшие кусочки исходного кода от первого движка серии, потому что они были основаны на предыдущих версиях. Исходный код id Tech 2, id Tech 3 и id Tech 4 также был открыт. Компания Valve во время разработки Half-Life использовала игровой движок Quake со встроенным сетевым кодом QuakeWorld. Будучи сильно переписанным, он получил название GoldSrc (GoldSource). Ранее движок Half-Life описывался игровыми изданиями, как основанный на унифицированной технологии Quake 1. По некоторым данным, в движок были также интегрированы некоторые наработки движка Id Tech 2. На старых скриншотах игры, сделанных ещё в период разработки, видно, что движок активно использует динамические тени от объектов. Вероятно, их поддержка была убрана из финальной версии игры, так как разработчики решили, что домашние компьютеры тех времен ещё не готовы для таких сложных обработок. Игровой движок Half-Life 2 — Source основан на движке от Half-Life 1, и, следовательно, содержит небольшие участки кода движка Quake.
10. Twilight Engine — движок, основанный на Quake с большим количеством нововведений. Полностью изменена файловая структура. Можно подсоединить сторонний рендерер (графический движок), например, OGRE.