Как устроена браузерная версия GTA 5: фундаментальный разбор
Появление браузерной версии Grand Theft Auto V (webFive) перевернуло представления об ограничениях веб-платформы. В основе этого проекта лежит не облачный стриминг с удаленного сервера и не урезанный эмулятор эпохи Java, а прямая трансляция реального исходного кода GTA 5 (версии для PC / PS4) в бинарный стандарт WebAssembly (wasm64). Разработчики взяли за основу оригинальный код на C++ и скомпилировали его почти «как есть», заставив сложнейший движок AAA-класса исполняться внутри изолированной песочницы браузера.
[DEBUG_TRACE] Source tree mapped from: E:\P1\GTA5\Source\rage\render\dx11\...
[SUBSYSTEM] Initializing pthreads worker pool (threads: navigator.hardwareConcurrency)
Внутри бинарника сохранились даже отладочные пути разработчиков оригинальной студии (в духе E:\P1\GTA5\...), что подтверждает использование исходной логики игрового движка RAGE (R Advanced Game Engine) в отладочной сборке. Игре предоставлен доступ к вычислениям на стороне клиента, при этом она запускается без установки сотен гигабайт вспомогательного софта на локальный диск.
Графический пайплайн: трансляция DirectX 11 в WebGPU
Главная техническая сложность портирования нативных игр для Windows в браузер заключается в том, что ни один современный браузер не способен исполнять команды Microsoft DirectX 11. Для решения этой проблемы авторы проекта разработали специализированный трансляционный слой (Graphics Wrapper):
- Перехват системных вызовов рендеринга: Игровой движок функционирует в штатном режиме, «считая», что отправляет привычные команды отрисовки кадров конвейеру DirectX 11.
- Трансляция в WebGPU: Слой-прослойка перехватывает графические вызовы и в реальном времени конвертирует дескрипторы, шейдеры и буферы вершин в стандарты WebGPU (с фолбэком на WebGL 2.0 для старых систем). Это гарантирует минимальные накладные расходы процессора на вызов функций (Draw Calls).
- Прямой доступ к видеокарте: Благодаря современному API браузера видеокарта компьютера задействуется напрямую, что обеспечивает стабильные 60 кадров в секунду даже при плотном городском трафике и динамическом освещении.
Управление оперативной памятью в архитектуре wasm64
Стандартные веб-приложения жестко ограничены 32-битным адресным пространством WebAssembly (максимум 4 ГБ виртуальной памяти на вкладку). Оригинальной GTA 5 этого объема было бы критически мало.
Для решения проблемы порт использует расширение wasm64 с динамическим пулом памяти от 3 ГБ до 16 ГБ ОЗУ. Система активно использует многопоточность через Web Workers и pthreads, параллельно распределяя просчет геометрии, загрузку ресурсов и скриптовые цепочки миссий по всем физическим ядрам процессора пользователя.
Сохранение физики Euphoria и интерфейсов Scaleform
В отличие от упрощенных любительских клонов, в данном билде полностью сохранены все аутентичные технологические подсистемы:
- Процедурная физика тел Euphoria: Реакция пешеходов на удары машин, падения с высоты и поведение при перестрелках не заскриптованы, а рассчитываются физическим ядром ragdoll в реальном времени.
- Scaleform GFx: Оригинальный интерфейс мини-карты, спидометра, меню паузы и телефона работает на базе оригинальных векторных библиотек.
- Аудио-конвейер AudioWorklet: Звуки выстрелов, моторов и радиостанций микшируются в фоновом аудиопотоке через AudioWorklet с низкой задержкой, не прерываясь даже при кратковременных просадках частоты кадров.
- Удаление Bink Video: Чтобы снизить вес дистрибутива, из сборки были исключены «тяжелые» пререндеренные ролики Bink Video - сюжетные катсцены генерируются напрямую на движке игры.
Как удалось упаковать Лос-Сантос всего в 1 ГБ?
Оригинальный клиент GTA 5 занимает около 13 ГБ на жестком диске. Порт решает задачу оптимизации дискового пространства через гибридную инфраструктуру:
- Базовый стартовый чанк (1 024 МБ): В первый гигабайт упакованы только ключевые ассеты - исполняемый бинарный код, физические меши, текстуры центральной части Лос-Сантоса и базовые звуки. Это позволяет начать игру уже через 1–2 минуты.
- Потоковая HTTP-догрузка: Удаленные районы (округ Блейн, Палето-Бэй, горные массивы) буферизируются по протоколу HTTP/2 небольшими частями строго в момент, когда игрок направляется в их сторону.
- Персистентный кэш IndexedDB: Однажды загруженный гигабайт данных оседает в структурированном локальном хранилище браузера. При повторном визите трафик не расходуется, а запуск игры происходит моментально из дискового кэша.
- Интеграция с периферией: Управление курсором оптимизировано с помощью Pointer Lock API (полный перехват мыши), сохранение прогресса пишется в IndexedDB, а для любителей геймпадов активен нативный Gamepad API.