Введение
Web Adaptive Performance (WebAP) — это инструмент для динамической оптимизации Unity WebGL-приложений.
Он помогает найти баланс между качеством картинки и стабильным FPS на разных устройствах: от мощных ПК до слабых смартфонов. Вместо жестких лимитов, плагин анализирует тайминги кадров в реальном времени. Находит причину просадок, плавно снижает нагрузку до стабилизации, а при появлении запаса мощности возвращает качество обратно.
Адаптация под устройство
Установите максимальные настройки качества в Unity по умолчанию. Плагин сам снизит их в рантайме, если текущее устройство не справляется с нагрузкой.
Почему именно WebAP?
Почему не официальный пакет Adaptive Performance?
Официальный пакет от Unity мощный инструмент, но он фундаментально несовместим с WebGL. У него есть два типа провайдеров, и оба разбиваются об ограничения браузера:
- Нативные провайдеры (Android): Опираются на системные API для получения статусов перегрева (Thermal Headroom) и управления частотами. Браузерная песочница блокирует любой доступ к железу, делая этот подход невозможным. Новые веб-стандарты (вроде Compute Pressure API) видят только CPU и не дают точных данных для 3D-графики.
- 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).
