На каком движке quake 3

Обновлено: 07.07.2024

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 , чтобы быть оказана так быстро на оборудовании времени. О ( п 2 ) )> п

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

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

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


Так как у меня была одна неделя до моего следующего контракта, я решил закончить мой цикл статей id. После Doom,Doom Iphone, Quake1, Quake2, Wolfenstein iPhone и Doom3, я решил изучить код, который я еще не рассматривал: idTech3 — 3D движок Quake III и Quake Live.

Движок по сути усовершенствованный idTech2, но есть несколько интересных усовершенствований. Ключевые пункты могут выглядеть в результате следующим образом:

• Часть 2: двухъядерное средство визуализации с материалами на основе шейдеров (создано через OpenGL Fixed Pipeline)
• Часть 3: новая сетевая модель, основанная на snapshots
• Часть 4: виртуальные машины играют главную роль в движке, комбинирующие мобильность/безопасность Quake1 и скорость Quake2
• Часть 5: новый искусственный интеллект для ботов.
Я был особенно впечатлен:

• Системой виртуальных машин и соответствующим инструментарием, которые в целом составляют 30% кода. С этой точки зрения idTech3 представляет собой мини-операционную систему, обеспечивающую системные вызовы трех процессов.
• Изящная сетевая система на основе снимков и самоанализе памяти.

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

Первый контакт
Архитектура

Удобный способ понять архитектуру: надо сначала рассматривать ПО как черный ящик получающий входные сигналы (стрелки вверху слева) и генерирующий выходные (стрелки внизу):


Теперь посмотрим внутреннюю структуру в виде белого ящика с 6 модулями(quake3.exe, renderer.lib, bot.lib, game, cgame и q3_ui) взаимодействующими следующим образом:


Нужно понять 2 важные вещи в проекте:

• Явное разделение клиента и сервера (это было изложено в общих чертах в Q&A, который я сделал с Джоном Кармаком.

— Серверная часть ответственна за поддержание состояния игры, определение, что нужно клиентам и соединения их по сети. Она статически линкуется с bot.lib, который является отдельным проектом из-за его хаотической истории разработки.

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

С точки зрения кода, здесь частично развернутый цикл, иллюстрирующий обрабатываемые и отправляемые события клиента и сервера:

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


Статистика

Вот некоторые статистические данные от cloc:



На круговой диаграмме прекрасно видно, насколько необычны пропорции, так как 30% кода занимают инструменты.

Это объясняется отчасти потому, что в idtech3 реализованы функции ANSI C компилятора: Little C Compiler (LCC) с открытым исходным кодом используется, чтобы генерировать байт-код для виртуальных машин.

Выделение памяти

Здесь использовались два обычных аллокатора:
Zone Allocator: работает во время выполнения, выделение маленькой и кратковременной памяти
Hunk Allocator: работает во время загрузки уровня, большое и долговременное выделение памяти, в которую загружается содержимое pak файлов(геометрия, карты, текстуры, анимация).

Рекомендую почитать

По истории Quake — Masters of Doom.
Две лучшие книги по компиляторам, чтобы лучше понять виртуальные машины Quake.
Статья, чтобы понять что такое LCC Intermediate Representation

Движок разработанный в 1999 году id Software специально для quake 3 является прямым потомком id Tech 2(или Quake 2 Engine), во многом используя его наработки. На движке id Tech 3 было создано великое множество игр, которые сейчас уже являются классикой игростроя, в том числе Аmerican McGee's Alice, Return To Castle Wolfenstein, Jedi Academy, Call of Duty и Call of Duty: UO, Medal Of Honor: Allied Assault.

Кстати, хотелось бы заметить, что движок IW engine от Infinity Ward, поддерживающий HDR и многие другие современные технологии использует сильно модифицированную версию id Tech 3 1999 года.

4-е место. RAGE (Rockstar Advanced Game Engine)

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

RAGE работает вместе с euphoria – которая является не только физическим движком, а более комплексным средством. Именно благодаря интеграции euphoria в RAGE мы можем наблюдать наиболее реальное поведение персонажей на выстрелы/удары/толчки по ним. Каждый раз используется новая анимация, даже если проигрывается одна и та же сцена. Скелетно-мускульная система позволяет герою при подъеме по лестнице не просто перебирать ногами, а каждый раз становится на ступеньку.

3-е место. CryEngine.

Разработанный в 2002 году частной компанией Crytek для игры Far Cry, CryEngine был достаточно мощным и имел множество особенностей, среди которых была прекрасная система рендера, неплохой искуственный интеллект и отличная физическая система.

Вторая версия этого движка буквально совершила революцию в графическом плане: игра Crysis, выпущенная Crytek в 2007 году, подняла графическую планку на недосягаемую на тот момент другими разработчиками высоту. Динамическое освещение, великолепные шейдеры, глубина резкости и "блюр" - все это было выполнено на высочайшем уровне.

2-е место. Unreal Engine.

Игровой движок, разрабатываемый и поддерживаемый компанией Epic Games. Появившись в 1998 году с выходом игры Unreal, этот движок претерпевал множество изменений, он модифицировался и выходили новые версии. С тех пор, этот движок использовался в не поддающемся исчислению количеству отличнейших игр, среди которых Deus Ex, Lineage II, Thief: Deadly Shadows, Postal 2, сериях игр Brothers in Arms, Tom Clancy’s Splinter Cell, Tom Clancy’s Rainbow Six, а также в известных игровых сериях Unreal и Unreal Tournament от самих Epic Games. Будучи приспособленным в первую очередь для шутеров от первого лица, движок использовался и при создании игр других жанров.

1-e место. Source engine.
При написании этой статьи у меня были сомнения в распределении мест, однако первая строчка у меня была в голове заранее, и я надеюсь, что мое решение не вызвало ни у кого сомнений.

Движку уже семь лет, однако он все еще неплохо держится, несмотря на не самую современную графику. С момента выхода Half-Life 2 движок подвергался обновлениям бесчисленное количество раз и продолжает активно поддерживаться разработчиками. Сильно усовершенствованная система Havok делает физику Source очень успешно реализованной и множество головоломок в играх от Valve замешаны именно на физике.

Великолепная лицевая анимация снискала одобрение у игроков с первых геймплейных кадров Half-life 2, ведь глядя на лицо игрового персонажа можно было легко угадать его эмоции.
С выходом Episode Two на свет появилась технология «Кинематографической физики» - которая позволяет создавать сцены с разрушением объектов (зачастую больших) максимально красиво и реалистично.
Когда на свет появился Left 4 Dead, то свет увидела технология называемая «ИИ режиссером» (про расчлененку я вообще молчу) - изменение уровня в реальном времени согласно многим факторам, дабы сделать игру максимально интересной и захватывающей. Никто кроме Valve на сегодняшний день подобными технологиями не владеет.
Еще один несравненный плюс – сравнительная простота и удобство в создании модификаций. Выпущено довольно много редакторов, каждый из которых заточен под определенную Source-игру, однако практически все компоненты взаимозаменяемы.
Даже если вы не умеете работать в специализированных редакторах, то можно создавать статичные/динамичные сцены в Garry's Mod.


id Tech 3 , широко известный как движок Quake III Arena , - игровой движок, разработанный id Software для их видеоигры Quake III Arena . Он был принят во многих играх. В свое время он конкурировал с Unreal Engine ; оба двигателя были широко лицензированы.

Хотя id Tech 3 основан на движке id Tech 2 , большая часть кода была переписана. Преемник id Tech 4 был основан на id Tech 3, как и движок Infinity Ward IW, использованный в Call of Duty 2 и далее.

На QuakeCon 2005 Джон Кармак объявил, что исходный код id Tech 3 будет выпущен под лицензией GNU General Public License v2.0 или более поздней версии , и он был выпущен 19 августа 2005 года. Первоначально распространяемый по id через FTP , код может быть загружено из учетной записи id на GitHub .

СОДЕРЖАНИЕ

Функции

Графика

В отличие от большинства других игровых движков, выпущенных в то время, включая своего основного конкурента Unreal Engine , id Tech 3 требует для работы графического ускорителя, совместимого с OpenGL . Движок не включает программный рендерер .

id Tech 3 представила сплайновые изогнутые поверхности в дополнение к плоским объемам, которые отвечают за многие поверхности, присутствующие в игре.

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

Все игровые видеоролики используют проприетарный формат под названием «RoQ», который изначально был создан Грэмом Девайном , соавтором Quake 3 , для игры The 11th Hour . Внутренне RoQ использует векторное квантование для кодирования видео и DPCM для кодирования звука. Хотя сам формат является проприетарным, он был успешно реконструирован в 2001 году, а фактический декодер RoQ присутствует в версии исходного кода Quake 3 . RoQ практически не используется вне игр, основанных на движках id Tech 3 или id Tech 4 , но поддерживается несколькими видеоплеерами (такими как MPlayer ) и существует несколько сторонних кодеров. Заметным исключением является игра Postal 2: Apocalypse Weekend , основанная на движке Unreal Engine , в которой файлы RoQ используются для вступительных и заключительных роликов, а также для шутливых роликов, которые воспроизводятся после миссии в конце первой части.

id Tech 3 загружает 3D-модели в формате MD3. Формат использует движения вершин (иногда называемые анимацией по вершинам ) в отличие от скелетной анимации для хранения анимации. Анимация показывает в формате MD3 превосходят в ид Tech 2 «s MD2 формат , потому что аниматор может иметь переменное число ключевых кадров в секунду вместо стандартных 10 ключевых кадров MD2 в секунду. Это позволяет создавать более сложные анимации, менее «шаткие», чем модели в Quake II .

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

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

В версии исходного кода под лицензией GPL большая часть кода, связанного с файлами скелетной анимации MD4, отсутствовала. Предполагается, что id просто так и не закончила формат, хотя почти все лицензиаты создали свои собственные системы скелетной анимации из того, что было. Ritual Entertainment сделали это для использования в игре Heavy Metal: FAKK² , SDK для которой лег в основу поддержки MD4, выполненной кем-то, кто использовал псевдоним Гонго.

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

Другие особенности рендеринга

Другие визуальные особенности включают объемный туман , зеркала, порталы, декали и искажение вершин формы волны.

Звуковая система id Tech 3 выводит на два канала с использованием выходного буфера зацикливания, микшированного из 96 дорожек со стереопространством и эффектом Доплера . Все микширование звука выполняется внутри движка, что может создать проблемы для лицензиатов, надеющихся реализовать EAX или поддержку объемного звука . Также отсутствуют некоторые популярные эффекты, такие как эхо.

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

Quake 3 также интегрировал относительно сложную систему защиты от читерства, которая называется «чистый сервер». Для любого клиента, подключающегося к чистому серверу, автоматически включается чистый режим, а пока включен чистый режим, можно получить доступ только к файлам внутри пакетов данных. Клиенты отключаются, если их пакеты данных не проходят одну из нескольких проверок целостности. Cgame.qvm файл, с его высоким потенциалом для накрутки связанной модификации, подлежит дополнительной проверке целостности. Разработчики должны вручную деактивировать чистый сервер для тестирования карт или модов, не входящих в пакеты данных, с использованием формата файла PK3. Более поздние версии дополнили чистый сервер поддержкой PunkBuster , хотя в выпуске исходного кода отсутствуют все привязки к нему, потому что PunkBuster - это программное обеспечение с закрытым исходным кодом, и включение его поддержки в выпуске исходного кода привело бы к нарушению всеми распространителями / повторными пользователями кода. GPL .

Виртуальная машина

id Tech 3 использует виртуальную машину для управления поведением объекта на сервере, эффектами и прогнозированием на клиенте и пользовательском интерфейсе. Это дает много преимуществ, поскольку авторам модов не нужно беспокоиться о сбое всей игры из-за плохого кода, клиенты могут отображать более продвинутые эффекты и игровые меню, чем это было возможно в Quake II, а пользовательский интерфейс для модов был полностью настраиваемым.

Файлы виртуальных машин разрабатываются на ANSI C с использованием LCC для их компиляции в 32-битный формат псевдосборки RISC . Затем инструмент под названием q3asm преобразует их в файлы QVM, которые представляют собой многосегментные файлы, состоящие из статических данных и инструкций на основе сокращенного набора входных кодов операций. Если не используются операции, требующие определенного порядка байтов , файл QVM будет работать одинаково на любой платформе, поддерживаемой Quake 3.

Виртуальная машина также содержала компиляторы байт-кода для архитектур x86 и PowerPC , выполняющие инструкции QVM через интерпретатор .

ioquake3


Автоматическое отображение отражений и нормалей в пререлизном клиенте ioQuake3, Tremulous 1.3

Ioquake3 - это проект игрового движка, целью которого является создание версии исходного кода id Tech 3 для удаления ошибок, очистки исходного кода и добавления более продвинутых графических и звуковых функций через SDL и OpenAL . ioquake3 также призван действовать как чистый базовый пакет, на котором могут быть построены другие проекты. Движок игры поддерживает формат Ogg Vorbis и видеозахват демонстраций в формате .avi .

Проект был начат вскоре после выхода исходного кода с целью создания черепашки -бесплатно, расширение с открытым исходным кодом Quake III Дистрибутив исходного кода двигателя , на котором могут быть основаны новые игры и проекты. Кроме того, проект направлен на создание улучшенной среды, в которой можно будет играть в Quake III: Arena , пакет расширения Team Arena и все популярные моды . Среди заметных функций, добавленных проектом, - встроенная поддержка VoIP , анаглифный стерео-рендеринг (для просмотра в 3D-очках) и многочисленные исправления безопасности. Список некоторых функций доступен на проекта веб - сайта .

Ioquake3 был основой нескольких игровых проектов, основанных на движке id Tech 3, таких как OpenArena (имитирующая Quake III Arena ), Tremulous , Smokin 'Guns , Urban Terror , Turtle Arena и World of Padman, а также проектов игровых движков, таких как efport ( проект по воссозданию движка Star Trek: Voyager - Elite Force Holomatch ), ioJedi Outcast, ioJedi Academy, ioDoom3 и OpenMoHAA . Движок и связанные с ним игры были включены в несколько дистрибутивов Linux и BSD .

Исходный код движков Return to Castle Wolfenstein и Wolfenstein: Enemy Territory был выпущен под лицензией GNU GPL-3.0 или более поздней версии 12 августа 2010 года. Разработчики ioquake3 объявили о начале соответствующих проектов движков (iortcw, iowolfet, Enemy Territory: Наследие) вскоре после этого.

Проект ioquake3 также использовался в академической сфере в качестве основы для различных исследований в таких учреждениях, как Центр компьютерных исследований в музыке и акустике Стэнфордского университета (CCRMA), Нотр-Дам в качестве основы для исследований виртуальной реальности и Университет Суинберна. Технологический центр передовых интернет-архитектур. Есть даже совместные усилия исследователей из Университета Карнеги-Меллона и Университета Торонто, которые используют ioquake3 в качестве платформы для своих опубликованных исследований. Студенты использовали ioquake3 в качестве основы для продвинутой работы с графикой для своих диссертаций, например, работы Стефана Рейтера, который даже был отмечен в проекте LLVM благодаря его синтезу движка ioquake3, техники рендеринга с трассировкой лучей и LLVM.

Читайте также: