Introdução
Web Adaptive Performance (WebAP) é uma ferramenta para a otimização dinâmica de aplicações Unity WebGL.
Ela ajuda a encontrar o equilíbrio entre qualidade visual e FPS estável num amplo espetro de dispositivos, desde PCs poderosos até smartphones mais fracos. Em vez de depender de limites rígidos, o plugin analisa os timings dos frames em tempo real. Ele detecta a causa raiz das quedas de performance, reduz suavemente a carga até alcançar a estabilidade, e restaura a qualidade quando ganha Performance Headroom (Margem de Desempenho).
Adaptação de Dispositivo
Configure o seu projeto Unity para as configurações de qualidade máxima por defeito. Se o dispositivo atual não conseguir lidar com essa carga, o plugin irá reduzi-las automaticamente durante o runtime.
Porquê escolher o WebAP?
Porquê não o pacote oficial Adaptive Performance?
O pacote oficial da Unity é uma ferramenta formidável, mas é fundamentalmente incompatível com WebGL. Ele baseia-se em dois tipos de provedores, ambos prejudicados por restrições do navegador:
- Provedores Nativos (Android): Baseiam-se em APIs do sistema para obter informações térmicas e gerir a frequência. A sandbox do navegador impede qualquer acesso ao hardware, tornando esta abordagem impossível. Padrões web emergentes (como a Compute Pressure API) apenas monitorizam o CPU e não fornecem dados precisos para gráficos 3D.
- Basic Provider: O provedor matemático multiplataforma da Unity. Ele depende do
FrameTimingManager. Contudo, para funcionar, a engine requer temporizadores de GPU de hardware de alta precisão que, por motivos de segurança (para prevenir ataques Spectre/Meltdown), são forçosamente bloqueados ou severamente ofuscados no navegador. Consequentemente, o Basic Provider oficial não consegue, na prática, inicializar no WebGL.
A Solução WebAP: Arquitetámos uma abordagem adaptada especificamente às idiossincrasias da web. O WebAP também aproveita o FrameTimingManager, mas em vez de depender estritamente de temporizadores de GPU bloqueados, o plugin emprega análises heurísticas seguras. Ele contorna anomalias do navegador (como distorção de métricas causada pelo setTimeout no Emscripten) e usa matemática pura para calcular gargalos (CPU vs GPU). Isto proporciona um sistema de otimização de grau AAA que opera de forma legal e estável em qualquer navegador.
Porquê não os scripts de scalers padrão?
As soluções clássicas simplesmente reduzem a resolução do ecrã aos primeiros sinais de atraso. Isto é inútil se a aplicação estiver a falhar devido a cálculos de CPU (física, scripts, lógica) em vez de renderização.
Como funciona o WebAP:
- Detenção de Gargalos (Bottleneck Detection)
O plugin determina matematicamente o que está a restringir o frame: CPU ou GPU. Se a física estiver atrasada, o sistema simplifica a física sem degradar a resolução da tela. Mais de 12 Scalers independentes (Sombras, LODs, Culling de camadas, etc.) são fornecidos para este propósito. - Anti Yo-Yo Penalty System
Resolve a praga comum da resolução dinâmica quando a qualidade cintila (Quality flickering). Se melhorar os gráficos provocar uma queda imediata nos FPS, o sistema implementa um Penalty Lockout temporário para bloquear aumentos adicionais. - Preservação da Clareza da UI
Se optar pelo modo de escala viaRenderTexture, a resolução do mundo 3D é reduzida, mas a interface permanece na escala nativa do navegador (Native Browser Scaling). O componente personalizadoWebScaledPhysicsRaycasterrecalcula automaticamente as coordenadas dos raios para que os cliques em objetos 3D operem de forma impecável, independentemente da compressão do frame. - Arquitetura Zero-GC
Todo o projeto é projetado com estrita economia de memória em mente. O núcleo utiliza buffers circulares O(1) e executa zero alocações no loop deUpdate. Como resultado, o plugin não aciona o Garbage Collector (GC). - Limpeza Rigorosa da Build
Muitos assets incham as builds de lançamento, colocando os seus prefabs e texturas na pastaResources(forçando a engine a incluí-los na build). A arquitetura do WebAP evita este erro. A menos que seja expressamente adicionado à cena, todos os Utilitários e a Interface do Dashboard são automaticamente removidos durante a compilação. Apenas o núcleo leve chega ao projeto final. - Integração Plug-and-Play
As configurações são consolidadas dentro de uma interface unificada nas Project Settings. O plugin injeta-se automaticamente na build — você não precisa colocar prefabs de gestores manualmente nas suas cenas.
Compatibilidade
- Versão Unity:
2020.3 LTSe mais recente. O plugin aproveita APIs modernas e adota automaticamente os novos recursos da engine (por exemplo, suporte paraMesh LOD Thresholda partir do Unity 6000.2+). - Pipeline de Renderização: Suporte contínuo tanto para o Built-in Render Pipeline (BiRP) quanto para o Universal Render Pipeline (URP).
