O jogo para porque precisa ler arquivos e compilar shaders logo antes de desenhar uma área, um monstro ou um efeito que aparece pela primeira vez.
Por quê Entrada em uma área nova; skill, equipamento ou monstro que aparece pela primeira vez → Efeito A thread principal espera a leitura de arquivos e a compilação de shaders → Na tela Só na primeira vez, a tela trava por 0,1–1 s; da segunda vez em diante, tudo normal
Em movimento ou ao trocar de mapa, Ao fazer ações específicas
Responsável
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Usar carregamento assíncrono e pré-carregamento (prewarming), compilar os shaders antes da hora na tela de carregamento ou na primeira execução, aproveitar as telas de carregamento.
Números de referência
Compilar um shader leva dezenas de ms, às vezes mais de 100 ms. Carregar texturas leva de dezenas a centenas de ms, conforme a velocidade do disco.
No gráfico
Pico logo após abrir ou manutenção · Número de picos de frame (logo após patch ou atualização de driver)
Onde olhar
Gravar o mesmo trajeto duas vezes com o PresentMon e comparar a primeira visita com a segunda. Em build de desenvolvimento, no Unreal, ativar r.PSOPrecache.Validation e verificar stat PSOPrecache e “PSO PRECACHING MISS” no log; no Unity, os trechos de carregamento e de shader dos frames com pico na Timeline do Profiler
Confirma se
Picos de 0,1–1 s só em lugares visitados ou skills usadas pela primeira vez, que somem na segunda vez. Os reports se concentram logo após um patch ou uma atualização do driver de vídeo e depois diminuem
Descarta se
Pico toda vez no mesmo lugar: descarta problema de cache de shaders. Se só se repete a cada deslocamento e apenas em PCs com disco lento: “Streaming de assets atrasado por disco lento”; se a memória dedicada da GPU está cheia: “Falta de memória de vídeo (VRAM)”
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo
Saiba mais
No PC, o driver de vídeo guarda no cache de shaders cada shader já compilado e o reutiliza depois. Por isso, logo após uma atualização do driver de vídeo ou um patch do jogo, esse cache é invalidado, e até quem não tinha problema volta a ter engasgos por um tempo. O report típico é “depois do patch, dá um engasgo em todo lugar que visito pela primeira vez”.
Fontes
Shader loadingUnity Na primeira vez que uma variante de shader é usada, o driver de vídeo precisa prepará-la para a GPU, o que pode causar uma pausa visível; depois de pronta, ela fica em cache e não causa nova pausa
Direct3D 12 Return CodesMicrosoft D3D12_ERROR_DRIVER_VERSION_MISMATCH: um cache de PSO criado com outra versão do driver não pode ser reutilizado (recompilação após atualizar o driver)
PSO Precaching for Unreal EngineEpic Games Com r.PSOPrecache.Validation ativado, stat PSOPrecache mostra estatísticas dos PSOs que escaparam do pré-cache e o log registra “PSO PRECACHING MISS”; criar um PSO em tempo de execução por mais de 20 ms (padrão) conta como hitch