Browser Timings
Esta página detalha as restrições técnicas da arquitetura WebGL que dizem respeito ao parâmetro Application.targetFrameRate.
Quando um projeto Unity é compilado para WebGL, o parâmetro Application.targetFrameRate não altera apenas o limite interno de frames da engine, mas também modifica a API de base do navegador através da qual o loop principal corre.
Uncapped (Sem Limite) (requestAnimationFrame)
Se você remover o limite da taxa de frames (dependendo da versão do Unity, configurando Application.targetFrameRate para -1 ou 0), o compilador Emscripten ligará o loop principal do Unity diretamente à API do navegador window.requestAnimationFrame.
- Vantagens: É o método de renderização mais nativo, suave e preciso na web. O navegador irá sincronizar automaticamente a chamada com a taxa de atualização do monitor do jogador (VSync).
- Análise: As métricas
cpuMainThreadFrameTime(lidas pelo WebAP) irão refletir o tempo real que a CPU gastou calculando física e scripts.
Artificialmente Limitado (setTimeout)
Se você forçar estritamente uma taxa de frames (por exemplo, Application.targetFrameRate = 30), o Emscripten será obrigado a abandonar o requestAnimationFrame. Em vez disso, utilizará a API setTimeout() ou combinações complexas de temporizadores internos para atrasar o loop artificialmente.
Distorção de Métricas de CPU (A Armadilha do Emscripten)
Temporizadores artificiais introduzem uma discrepância enorme ao medir o tempo da CPU. O processador pode concluir todos os cálculos da lógica do jogo num tempo super-rápido de 5 ms e entrar em inatividade, mas a corrotina WaitForEndOfFrame não continuará até que o temporizador do setTimeout acabe.
Como resultado: O FrameTimingManager gravará este tempo de espera dentro dos timings da CPU. O profiler (e o Tracker do WebAP) irão deduzir que tem um Gargalo de CPU (CPU Bottleneck), mesmo que o processador esteja funcionalmente inativo e os frames estejam simplesmente à espera do temporizador do navegador.
A Estratégia Correta de Configuração
Para o Web Adaptive Performance funcionar da melhor forma no navegador:
- Não use
Application.targetFrameRate. Deixe em-1(sem limites). - Especifique o seu FPS desejado nas configurações do plugin (
Target Min FPS = 60). O WebAP irá utilizar esse valor não como um limite rígido, mas como a base para tomar decisões sobre a qualidade de renderização.
