AAA-движок для GTA San Andreas в браузере: как я переписал Three.js под WebGPU
Запустить GTA San Andreas в браузере — задача, которая еще недавно казалась фантастикой, но теперь становится реальностью. Энтузиаст, публикующийся на Habr, продолжает разработку собственного AAA-движка, способного запускать старые игры и их моды прямо в окне браузера. В свежей статье автор рассказы

Запустить GTA San Andreas в браузере — задача, которая еще недавно казалась фантастикой, но теперь становится реальностью. Энтузиаст, публикующийся на Habr, продолжает разработку собственного AAA-движка, способного запускать старые игры и их моды прямо в окне браузера. В свежей статье автор рассказывает, как уперся в ограничения Three.js и принял радикальное решение: переписать рендеринг на собственный фреймворк, работающий поверх WebGPU. Результат впечатляет: движок стал значительно быстрее, а разработка получила новый виток развития.
Как возникла идея переписать Three.js
Изначально движок использовал Three.js — популярную библиотеку для 3D-графики в браузере. Однако по мере роста сложности сцены и количества объектов, характерных для GTA San Andreas, автор столкнулся с серьезными проблемами производительности. Three.js, несмотря на свою универсальность, имеет архитектурные ограничения, которые мешают эффективно использовать все возможности WebGPU — современного графического API, пришедшего на смену WebGL.
Основная проблема заключалась в том, что Three.js изначально проектировался под WebGL и лишь позже получил поддержку WebGPU в качестве экспериментальной функции. Это привело к тому, что многие внутренние механизмы библиотеки не оптимизированы для нового API: например, управление ресурсами и батчингом происходит недостаточно эффективно. В результате рендеринг сложных сцен с большим количеством полигонов и текстур, типичных для GTA San Andreas, вызывал заметные просадки FPS.
Автор попробовал различные оптимизации, такие как уменьшение количества draw-вызовов и использование инстансинга, но этого оказалось недостаточно. Тогда он принял смелое решение: написать собственный рендерер с нуля, используя WebGPU напрямую. Это позволило полностью контролировать процесс отрисовки и выжать максимум из современного графического API.
Почему WebGPU стал ключом к производительности
WebGPU — это новый стандарт для графики в браузере, разработанный W3C. В отличие от WebGL, который базируется на OpenGL, WebGPU предоставляет более низкоуровневый доступ к GPU, что позволяет разработчикам реализовывать продвинутые техники рендеринга с меньшими накладными расходами. Для игрового движка это означает более эффективное использование ресурсов и возможность поддерживать сложные сцены с высокой детализацией.
Одним из главных преимуществ WebGPU является поддержка compute shaders, которые позволяют выполнять параллельные вычисления на GPU. Это открывает возможности для реализации таких эффектов, как постобработка, симуляция физики частиц и даже трассировка лучей в реальном времени. Кроме того, WebGPU имеет более предсказуемую модель управления памятью и синхронизацией, что упрощает создание высокопроизводительных приложений.
Переход на собственный фреймворк позволил автору реализовать несколько ключевых оптимизаций. Во-первых, он внедрил более агрессивный батчинг — группировку объектов с одинаковыми материалами в один draw-вызов. Это резко снизило количество вызовов отрисовки и повысило общую производительность. Во-вторых, он оптимизировал управление текстурами и буферами, что уменьшило задержки при загрузке ресурсов.
В результате движок стал работать заметно быстрее: в некоторых сценах прирост FPS составил до 50% по сравнению с версией на Three.js. Это позволило запускать GTA San Andreas с более высокими настройками графики и стабильной частотой кадров даже на средних по мощности устройствах.
Чем отличается новый движок от Three.js
Главное отличие — в архитектуре. Three.js — это универсальная библиотека, которая поддерживает множество сценариев использования, но за это приходится платить производительностью. Авторский фреймворк, напротив, заточен под конкретные задачи — рендеринг игровых сцен с большим количеством объектов и модов. Это позволяет ему использовать узкоспециализированные оптимизации, которые недоступны в общем случае.
Например, движок использует собственную систему управления сценой, которая учитывает особенности формата данных GTA San Andreas. Модели, текстуры и коллизии загружаются напрямую из игровых файлов, минуя лишние преобразования. Это сокращает время загрузки и снижает потребление памяти.
Также новый движок поддерживает современные графические эффекты, которые сложно реализовать в Three.js без серьезных доработок. Например, динамические тени, отражения и туман теперь работают более реалистично. Автор планирует добавить поддержку трассировки лучей, что позволит достичь еще более высокой степени реализма.
Как это повлияет на запуск модов
GTA San Andreas славится огромным сообществом моддеров, создающих новые модели, текстуры и целые игровые миры. Запуск модов в браузере — одна из главных целей проекта. Новый движок должен упростить этот процесс, поскольку он напрямую работает с файлами игры и поддерживает популярные форматы, используемые моддерами.
Автор отмечает, что многие моды, которые ранее вызывали проблемы с производительностью из-за большого количества полигонов или текстур высокого разрешения, теперь работают стабильно. Это открывает возможность играть в любимые модификации без установки игры на компьютер, достаточно открыть браузер.
Кого затронет это событие
Прежде всего, это интересно геймерам, которые хотят переиграть в классику без лишних хлопот. Возможность запустить GTA San Andreas с модами прямо в браузере — это удобно, особенно на устройствах, которые не могут запустить игру нативно, например, на Chromebook или планшетах.
Разработчики игровых движков и веб-разработчики также могут почерпнуть полезные идеи из опыта автора. Переписывание Three.js под WebGPU — это показательный пример того, как можно добиться значительного прироста производительности, если отказаться от универсальных решений в пользу специализированных.
Для сообщества моддеров это тоже хорошая новость: их труды получат новую жизнь, а потенциальная аудитория вырастет за счет тех, кто не готов устанавливать игру на свой компьютер.
Что будет дальше
Автор планирует продолжить развитие движка: добавить поддержку большего количества игр, улучшить совместимость с различными модами и оптимизировать производительность на слабых устройствах. В ближайших планах — реализация полноценной поддержки геймпадов и интеграция с облачными сервисами, что позволит играть в GTA San Andreas на любом устройстве с интернетом.
Также автор рассматривает возможность открыть исходный код движка, что позволит другим разработчикам присоединиться к проекту и внести свой вклад. Это могло бы ускорить развитие и привести к созданию полноценной платформы для запуска ретро-игр в браузере.
Итог
Переписывание Three.js на собственный WebGPU-фреймворк стало ключевым шагом в создании AAA-движка для браузера. Это позволило не только решить проблемы производительности, но и открыло новые возможности для графики и совместимости с модами. Проект демонстрирует, что современные веб-технологии способны на многое, и, возможно, скоро мы увидим полноценные AAA-игры в браузере. Следить за развитием этого амбициозного проекта определенно стоит.