Skip to content

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:

  1. 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.
  2. 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 via RenderTexture, a resolução do mundo 3D é reduzida, mas a interface permanece na escala nativa do navegador (Native Browser Scaling). O componente personalizado WebScaledPhysicsRaycaster recalcula 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 de Update. 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 pasta Resources (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 LTS e mais recente. O plugin aproveita APIs modernas e adota automaticamente os novos recursos da engine (por exemplo, suporte para Mesh LOD Threshold a 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).