Stutter de shaders: por que jogos travam mesmo com FPS alto
Pequenas pausas podem surgir quando o jogo encontra um efeito pela primeira vez, porque média de quadros e regularidade de entrega medem problemas diferentes.
R42 / RESUMO
O stutter de compilação acontece quando um jogo precisa preparar shaders ou estados do pipeline enquanto já está renderizando. Esse trabalho momentâneo pode alongar um único quadro e produzir uma pausa perceptível, mesmo quando a média de FPS permanece alta. Pré-compilação e caches de PSO reduzem o problema, mas dependem da cobertura feita pelo jogo, da API gráfica, do driver e do hardware.
PONTOS-CHAVE
- FPS médio alto não impede um quadro isolado de demorar muito mais que os demais.
- Shaders são programas da GPU; PSOs reúnem shaders e outros estados necessários para renderizar.
- Quando uma combinação inédita é compilada durante o jogo, o quadro pode sofrer uma pausa.
- Pré-compilação e caches ajudam, mas atualizações podem invalidar ou deixar combinações sem cobertura.
Um jogo pode indicar 90 ou 120 quadros por segundo e ainda parecer travado por uma fração de segundo ao entrar em uma área, encontrar um inimigo ou ativar um efeito pela primeira vez. Esse comportamento costuma ser chamado de shader compilation stutter: uma interrupção causada quando parte do trabalho necessário para a GPU renderizar a cena só é preparada durante a partida.
O detalhe importante é que FPS médio e regularidade dos quadros não são a mesma medida. Sessenta quadros por segundo correspondem, em média, a cerca de 16,7 milissegundos por quadro. Se quase todos chegam nesse intervalo, mas um deles leva 80 ou 120 milissegundos, a média pode continuar boa enquanto o jogador percebe uma pausa clara. Por isso, reduzir resolução ou ativar um modo de desempenho nem sempre elimina esse tipo de problema.
O que shaders e PSOs fazem
Shaders são pequenos programas executados pela GPU para tarefas como posicionar vértices, calcular iluminação, aplicar materiais e determinar a cor dos pixels. Em APIs modernas, eles trabalham dentro de uma configuração mais ampla do pipeline gráfico. No Direct3D 12, a Microsoft reúne shaders e estados como rasterização, mistura de cores e profundidade em objetos imutáveis chamados Pipeline State Objects, ou PSOs.
A criação desses objetos permite que hardware e driver convertam previamente a configuração em instruções adequadas à GPU. O custo aparece quando uma combinação ainda não preparada é necessária imediatamente. Em vez de apenas desenhar o quadro, o sistema precisa compilar ou finalizar o pipeline antes de continuar. A documentação da Epic classifica como “missed” o PSO que não foi pré-compilado e como “too late” aquele solicitado antecipadamente, mas que não ficou pronto a tempo.
Por que o primeiro encontro costuma ser pior
Jogos modernos combinam materiais, efeitos, formatos de vértice, iluminação e diferentes caminhos de renderização. Cada variação pode exigir um pipeline específico. Uma explosão inédita, uma habilidade nova ou uma área com outro tipo de superfície pode revelar uma combinação que não estava no cache.
Depois da primeira compilação, o resultado pode ser armazenado e reutilizado. Isso explica por que repetir a mesma sequência às vezes parece mais suave. Entretanto, não é uma regra universal: o cache pode ser incompleto, pertencer ao driver ou ao próprio jogo e ser invalidado após mudanças no driver, no executável, na API gráfica ou nas configurações. O projeto Vulkan documenta mecanismos para identificar shaders e guardar binários de pipelines justamente para evitar recompilações e buscas tardias durante a renderização.
Pré-compilar transfere o custo para outro momento
A solução mais consistente é descobrir os pipelines necessários e prepará-los antes que apareçam na tela. A Unreal Engine oferece precaching automático de PSOs e pode compilar tarefas de forma assíncrona. Também permite que uma tela de carregamento permaneça ativa enquanto pedidos essenciais ainda estão pendentes.
Esse método não torna a compilação gratuita; ele desloca o custo. O jogador pode enfrentar uma etapa inicial mais longa, maior uso momentâneo de CPU ou arquivos de cache adicionais, em troca de quadros mais regulares durante a partida. Cobertura também importa: se o jogo não enumerar uma combinação ou pedir o PSO tarde demais, o travamento ainda pode ocorrer.
Nem todo stutter vem de shaders
Carregamento de arquivos, descompressão, criação de objetos, coleta de memória, simulação de CPU e problemas de driver também podem alongar um quadro. Um SSD pode ajudar quando o gargalo é leitura de dados, mas não resolve automaticamente a compilação feita no meio da renderização. Da mesma forma, limitar FPS estabiliza a carga em alguns cenários, porém não cria os pipelines ausentes.
A geração de quadros pode elevar o número exibido de FPS, mas não corrige uma pausa na produção dos quadros-base. Se o jogo interrompe a renderização para preparar um shader, não há fluxo regular para a técnica interpolar naquele instante.
Para o usuário, compilar shaders quando o jogo oferece essa opção e manter o software atualizado são medidas razoáveis, mas a solução definitiva pertence principalmente ao desenvolvimento: mapear PSOs, pré-compilar com cobertura suficiente, testar com caches vazios e medir o tempo de cada quadro. O sintoma aparece na tela do jogador; a causa está na forma como o pipeline foi preparado.
Misael
Responsável pela apuração e redação desta matéria na Rota42.
R42 / FAQ
O que é stutter de compilação de shaders?
É uma pausa perceptível causada quando o jogo ou o driver precisa compilar um shader ou preparar um estado de pipeline durante a renderização, em vez de concluir esse trabalho antes da partida.
Por que o jogo trava mesmo mostrando FPS alto?
A média de FPS pode continuar alta apesar de um quadro isolado demorar muito mais para ser entregue. O jogador percebe essa irregularidade como um pequeno congelamento ou salto.
Jogar novamente elimina o stutter?
Pode reduzir quando o resultado compilado é armazenado em cache e reutilizado, mas não é garantido. Novas áreas, efeitos, configurações, drivers ou atualizações podem exigir outras combinações.
Instalar o jogo em um SSD resolve?
Um SSD ajuda em travamentos ligados ao carregamento de arquivos, mas não corrige por si só uma compilação de shader feita no meio do quadro. As duas causas podem produzir sintomas parecidos.