Skip to content

Введение

Web Adaptive Performance (WebAP) — это инструмент для динамической оптимизации Unity WebGL-приложений.

Он помогает найти баланс между качеством картинки и стабильным FPS на разных устройствах: от мощных ПК до слабых смартфонов. Вместо жестких лимитов, плагин анализирует тайминги кадров в реальном времени. Находит причину просадок, плавно снижает нагрузку до стабилизации, а при появлении запаса мощности возвращает качество обратно.

Адаптация под устройство

Установите максимальные настройки качества в Unity по умолчанию. Плагин сам снизит их в рантайме, если текущее устройство не справляется с нагрузкой.

Почему именно WebAP?

Почему не официальный пакет Adaptive Performance?
Официальный пакет от Unity мощный инструмент, но он фундаментально несовместим с WebGL. У него есть два типа провайдеров, и оба разбиваются об ограничения браузера:

  1. Нативные провайдеры (Android): Опираются на системные API для получения статусов перегрева (Thermal Headroom) и управления частотами. Браузерная песочница блокирует любой доступ к железу, делая этот подход невозможным. Новые веб-стандарты (вроде Compute Pressure API) видят только CPU и не дают точных данных для 3D-графики.
  2. Basic Provider: Кроссплатформенный математический провайдер Unity. Он опирается на FrameTimingManager. Однако для его работы движку требуются высокоточные аппаратные таймеры GPU, которые в браузерах принудительно заблокированы или сильно зашумлены из соображений безопасности (защита от атак Spectre/Meltdown). Из-за этого официальный Basic Provider в WebGL физически не инициализируется.

Решение WebAP: Мы создали архитектуру, заточенную исключительно под специфику веба. WebAP также использует FrameTimingManager, но вместо жесткой зависимости от заблокированных GPU-таймеров, плагин применяет безопасный эвристический анализ. Он обходит браузерные аномалии (такие как искажения метрик из-за setTimeout в Emscripten) и использует чистую математику для вычисления узких мест (CPU vs GPU). Это дает вам систему оптимизации AAA-уровня, которая легально и стабильно работает в любом браузере.

Почему не обычные скрипты масштабирования?
Классические решения просто снижают разрешение экрана при любых лагах. Это бесполезно, если приложение тормозит из-за расчетов CPU (физика, скрипты, логика), а не из-за рендера.

Как работает WebAP:

  • Поиск узких мест (Bottlenecks)
    Плагин математически определяет, во что уперся кадр: в CPU или GPU. Если тормозит физика — система упростит физику, не снижая разрешение экрана. Для этого предусмотрено более 12 независимых скейлеров (Shadows, LOD, Layer Culling и другие).
  • Anti Yo-Yo System
    Решает частую проблему динамического разрешения, когда качество постоянно скачет вверх-вниз. Если после улучшения графики FPS сразу падает, система временно блокирует дальнейшие повышения.
  • Сохранение четкости UI
    Если вы выберете режим масштабирования через RenderTexture, разрешение 3D-мира будет снижаться, но интерфейс останется в нативном разрешении браузера. Кастомный компонент WebScaledPhysicsRaycaster автоматически пересчитает координаты лучей, чтобы клики по 3D-объектам работали корректно при любом сжатии кадра.
  • Zero-GC архитектура
    Весь проект спроектирован с учетом жесткой экономии памяти. Ядро использует кольцевые буферы и не делает аллокаций в цикле Update, поэтому плагин не провоцирует сборщик мусора (Garbage Collector).
  • Строгая чистота билда
    Многие ассеты засоряют релизную сборку, помещая свои префабы и текстуры в папку Resources (из-за чего движок принудительно включает их в билд). Архитектура WebAP лишена этой ошибки. Весь инструментарий и UI Дашборда будут автоматически вырезаны при компиляции, если вы не добавили их на сцену. В итоговый проект попадает только легковесное ядро.
  • Plug-and-Play интеграция
    Настройки собраны в едином интерфейсе внутри Project Settings. Плагин автоматически инжектится в билд — вам не нужно вручную размещать префабы менеджеров на сценах.

Совместимость

  • Версия Unity: 2020.3 LTS и выше. Плагин использует современные API и автоматически подхватывает новые фичи движка (например, поддержку Mesh LOD Threshold для Unity 6000.2+).
  • Render Pipelines: Бесшовная поддержка как Built-in Render Pipeline (BRP), так и Universal Render Pipeline (URP).