Você instala um jogo novo.
Abre pela primeira vez.
Antes mesmo de chegar ao menu principal, aparece uma mensagem:
“Compilando shaders…”
Uma barra começa a avançar.
10%.
35%.
70%.
100%.
Em alguns jogos, isso termina rapidamente.
Em outros, pode levar vários minutos.
Também existem casos em que essa compilação acontece enquanto você joga, podendo contribuir para aquelas pequenas travadas conhecidas como stuttering.
Mas afinal:
O que é Shader Compilation e por que os jogos precisam fazer isso?
Para entender, primeiro precisamos descobrir o que são shaders e por que eles se tornaram tão importantes nos gráficos modernos.
O Que São Shaders?
Shaders são pequenos programas executados principalmente pela GPU.
Eles ajudam a determinar como diferentes elementos gráficos serão processados durante a renderização.
Podem participar de tarefas relacionadas a:
- Iluminação.
- Sombras.
- Reflexos.
- Materiais.
- Cores.
- Texturas.
- Efeitos visuais.
Grande parte da aparência dos jogos modernos depende deles.
Imagine Uma Parede Dentro de Um Jogo
Um modelo 3D define o formato da parede.
Uma textura adiciona detalhes como tijolos, rachaduras ou pintura.
Mas ainda existem várias perguntas.
Como a luz deve reagir naquela superfície?
Ela deve refletir muito?
O material é áspero?
Está molhado?
Existe alguma sombra sobre ele?
Shaders ajudam a GPU a realizar cálculos necessários para produzir o resultado visual final.
Existem Diferentes Tipos de Shaders
Nem todos realizam a mesma função.
Dependendo da tecnologia e da etapa do pipeline gráfico, podem existir diferentes tipos.
Entre os mais conhecidos estão:
- Vertex shaders.
- Pixel ou fragment shaders.
- Geometry shaders.
- Compute shaders.
- Tessellation shaders.
APIs gráficas modernas também possuem shaders especializados para outras tarefas.
O Que Faz um Vertex Shader?
Vertex shaders trabalham com informações relacionadas aos vértices dos modelos.
Um modelo 3D é formado por inúmeros pontos conectados.
Esses shaders podem participar de cálculos relacionados à posição e transformação desses vértices antes que o objeto seja exibido na tela.
Eles são uma parte fundamental do pipeline gráfico moderno.
E o Pixel Shader?
Pixel shaders, também conhecidos como fragment shaders em determinados sistemas, ajudam a calcular características relacionadas aos pixels que formarão a imagem.
Eles podem influenciar:
- Cor.
- Iluminação.
- Reflexos.
- Sombras.
- Materiais.
São extremamente importantes para criar a aparência final dos objetos.
Então O Que Significa Compilar um Shader?
Os shaders são desenvolvidos utilizando linguagens e representações específicas.
Porém, a GPU precisa receber instruções em uma forma adequada para execução dentro daquele ambiente de hardware, driver e API gráfica.
A Shader Compilation é parte do processo de transformar e preparar esses shaders para que possam ser utilizados corretamente.
Em outras palavras, o jogo possui as instruções gráficas.
A compilação ajuda a prepará-las para execução no seu sistema.
Por Que o Jogo Não Vem Com Tudo Pronto?
Porque computadores podem possuir combinações muito diferentes.
Placas de vídeo diferentes.
Drivers diferentes.
APIs diferentes.
Configurações gráficas diferentes.
Recursos diferentes.
O código e os pipelines necessários podem depender dessas condições.
Por isso, determinados trabalhos de compilação ou preparação precisam acontecer no próprio dispositivo.
Consoles Possuem Uma Vantagem Nesse Aspecto
Um console possui uma configuração de hardware muito mais previsível.
Desenvolvedores sabem exatamente quais GPUs e ambientes precisam suportar.
No PC, a situação é muito mais complexa.
Existem inúmeras combinações de:
- CPU.
- GPU.
- Drivers.
- Sistemas.
- Configurações.
Isso aumenta bastante a complexidade da preparação dos shaders e pipelines.
Por Que Existem Tantos Shaders?
Jogos modernos possuem enormes quantidades de materiais e efeitos.
Imagine um único personagem.
Pele.
Cabelo.
Olhos.
Roupas.
Metal.
Vidro.
Cada material pode reagir de maneira diferente à iluminação.
Agora multiplique isso por milhares de objetos existentes em um jogo moderno.
A quantidade de combinações pode crescer rapidamente.
Configurações Gráficas Também Criam Variações
Imagine que o jogo possua diferentes combinações de configurações gráficas ao mesmo tempo. Além disso, cada uma dessas escolhas pode alterar profundamente a forma como a imagem é processada.
Na prática, isso inclui:
- sombras baixas
- sombras médias
- sombras altas
- ray tracing desligado
- ray tracing ligado
- diferentes níveis de qualidade
Como resultado, cada combinação pode exigir variantes diferentes de shaders ou até de pipelines gráficos.
É por isso que jogos modernos podem precisar preparar uma quantidade enorme de possibilidades, garantindo que qualquer configuração escolhida pelo jogador funcione corretamente sem quebrar a renderização ou reduzir a estabilidade.
Por Que Alguns Jogos Compilam Shaders Antes de Começar?
Essa é uma estratégia utilizada para tentar evitar interrupções durante a partida.
O jogo realiza grande parte do trabalho antecipadamente.
Você espera alguns minutos.
Depois começa a jogar com os shaders necessários já preparados.
A desvantagem é óbvia:
Você precisa esperar.
A vantagem é que o jogo pode apresentar uma experiência mais consistente posteriormente.
E Quando o Jogo Não Faz Isso Antes?
Nesse caso, parte da compilação pode acontecer conforme novos shaders ou pipelines são necessários.
Imagine que você entre em uma região que possui um efeito visual ainda não utilizado naquela sessão.
O jogo precisa preparar aquele recurso.
Se isso acontecer exatamente enquanto a cena está sendo renderizada, pode existir uma pequena interrupção.
É aí que surge um problema bastante conhecido.
O Que é Shader Compilation Stutter?
É uma pequena travada provocada quando o jogo precisa realizar trabalho de compilação ou criação de pipelines durante a execução.
Você está caminhando normalmente.
O jogo está a 60 FPS.
De repente:
Uma pequena travada.
Depois tudo volta ao normal.
Em alguns títulos, isso pode acontecer sempre que determinados efeitos ou situações aparecem pela primeira vez.
FPS Alto Não Elimina Stuttering
Esse é um detalhe importante.
Um jogo pode apresentar uma média de FPS elevada e ainda parecer inconsistente.
Isso acontece porque média de FPS não mostra perfeitamente como os quadros são distribuídos ao longo do tempo.
Se um único quadro demora muito mais para ser produzido, você percebe uma interrupção.
Por isso, estabilidade de frame time também é muito importante.
O Que é Frame Time?
Frame time representa o tempo necessário para produzir cada quadro.
Imagine um jogo rodando a 60 FPS.
Idealmente, cada quadro deveria levar aproximadamente 16,7 milissegundos.
Se alguns quadros demorarem muito mais, podem surgir pequenas travadas perceptíveis.
Shader compilation é uma das possíveis causas desses picos.
Shader Stutter e Texture Streaming São a Mesma Coisa?
Não.
Embora ambos possam provocar pequenas interrupções, são problemas diferentes.
Shader Compilation está relacionada à preparação de programas e pipelines gráficos.
Texture Streaming está relacionado ao carregamento e gerenciamento das texturas necessárias durante o jogo.
Os dois processos podem acontecer enquanto você joga, mas possuem funções diferentes.
O SSD Resolve Shader Compilation Stutter?
Não necessariamente.
Um SSD rápido ajuda muito no carregamento de arquivos e recursos.
Porém, a compilação envolve trabalho computacional.
Por isso, simplesmente instalar o jogo em um SSD extremamente rápido não elimina automaticamente problemas relacionados à compilação de shaders.
O armazenamento pode influenciar outras etapas, mas não resolve sozinho esse tipo de stuttering.
A CPU Participa da Compilação?
Sim.
Embora os shaders sejam executados pela GPU, a preparação e compilação podem envolver trabalho realizado pela CPU e pelo driver.
Por isso, esse processo pode utilizar bastante processamento.
É comum perceber uso elevado da CPU enquanto determinados jogos compilam shaders.
Por Que Minha CPU Fica em 100% Compilando Shaders?
Porque o jogo pode tentar utilizar vários núcleos simultaneamente para terminar a tarefa mais rapidamente.
Isso não significa necessariamente que exista algum problema.
Em determinados jogos, utilizar bastante CPU durante a compilação é esperado.
Depois que o processo termina, o consumo tende a mudar.
Quanto Mais Rápida a CPU, Mais Rápida a Compilação?
Geralmente, uma CPU mais rápida pode reduzir o tempo necessário.
Porém, o resultado também depende de como o jogo distribui o trabalho, do driver e de outros fatores.
Um processador com muitos núcleos não necessariamente terminará tudo instantaneamente.
O software precisa conseguir aproveitar esses recursos.
O Que é Shader Cache?
Depois que determinados shaders ou dados relacionados são preparados, eles podem ser armazenados em cache.
Isso evita repetir parte do trabalho desnecessariamente.
Na próxima vez que aquele recurso for necessário, o sistema pode reutilizar informações existentes.
Esse mecanismo ajuda a reduzir tempos de compilação e stuttering.
Onde Fica o Shader Cache?
Dependendo do jogo, API e driver, diferentes caches podem existir no computador.
Drivers gráficos também podem manter seus próprios dados relacionados aos shaders.
Por isso, atualizar drivers ou limpar determinados caches pode fazer alguns jogos realizarem novamente parte do processo.
Por Que Atualizar o Driver Pode Fazer os Shaders Compilarem Novamente?
O cache pode depender da versão do driver e de outros componentes do ambiente gráfico.
Quando alguma parte importante muda, determinados dados armazenados anteriormente podem deixar de ser válidos.
Nesse caso, eles precisam ser recriados.
Por isso, depois de atualizar o driver da GPU, alguns jogos podem apresentar novamente uma etapa de compilação.
Atualizar o Próprio Jogo Também Pode Fazer Isso
Uma atualização pode modificar:
- Shaders.
- Materiais.
- Efeitos.
- Pipeline gráfico.
- Motor do jogo.
Se os dados antigos deixarem de corresponder à nova versão, o cache pode precisar ser reconstruído.
É por isso que uma atualização aparentemente pequena pode provocar uma nova compilação.
Por Que Alguns Jogos Compilam Toda Vez?
Isso pode acontecer por diferentes motivos.
O jogo pode não estar conseguindo reutilizar corretamente o cache.
Algum arquivo pode estar sendo recriado.
Uma atualização pode ter invalidado os dados anteriores.
Ou o próprio projeto pode utilizar uma estratégia que exige novas preparações em determinadas situações.
Quando acontece em toda inicialização sem necessidade aparente, pode indicar algum problema de implementação.
DirectX 12 Tem Relação Com Isso?
Sim.
APIs gráficas modernas como DirectX 12 dão aos desenvolvedores maior controle sobre diversos aspectos do pipeline gráfico.
Esse controle pode oferecer vantagens importantes de desempenho.
Ao mesmo tempo, exige que os desenvolvedores gerenciem corretamente tarefas complexas, incluindo a criação e preparação de estados de pipeline.
Quando esse gerenciamento não é bem planejado, stuttering pode ficar mais perceptível.
Vulkan Também Utiliza Conceitos Semelhantes
A Vulkan também é uma API gráfica de baixo nível desenvolvida para oferecer alto desempenho e maior controle sobre o hardware.
Assim como outras APIs modernas, ela exige estratégias eficientes para gerenciamento de pipelines e shaders.
Por isso, compilação e cache continuam sendo assuntos importantes.
Ray Tracing Aumenta a Complexidade?
Pode aumentar bastante.
Ray tracing adiciona novos tipos de cálculos e shaders utilizados para processar raios, interseções e materiais.
Dependendo do jogo, isso aumenta a quantidade de combinações que precisam ser preparadas.
Quanto mais complexo o sistema gráfico, maior pode ser o desafio para gerenciar tudo sem interrupções.
Por Que Não Compilar Tudo Durante a Instalação?
Seria uma possibilidade em determinados cenários.
Mas existem dificuldades.
O hardware do usuário pode mudar.
O driver pode ser atualizado.
Configurações podem ser alteradas.
O jogo também pode receber atualizações.
Além disso, compilar absolutamente todas as combinações possíveis pode exigir muito tempo e armazenamento.
Por isso, desenvolvedores precisam encontrar um equilíbrio.
Compilar Antes de Jogar é Melhor?
Do ponto de vista da fluidez, frequentemente pode ser uma boa estratégia.
O usuário espera alguns minutos antes.
Depois, grande parte do trabalho já está pronta.
Muitos jogadores preferem uma espera inicial previsível a pequenas travadas aparecendo durante toda a experiência.
Porém, a implementação ideal depende de cada jogo.
Posso Pular a Compilação?
Alguns jogos permitem.
Mas isso nem sempre é uma boa ideia.
Se os shaders necessários não estiverem preparados, o trabalho pode precisar acontecer durante a partida.
O resultado pode ser mais stuttering.
Se o jogo recomenda esperar a compilação terminar, geralmente vale a pena aguardar.
Shader Compilation Significa Que o PC é Fraco?
Não.
Até computadores extremamente poderosos precisam compilar shaders.
Um hardware mais rápido pode terminar o processo em menos tempo.
Mas a necessidade de compilação não significa que existe algum problema com sua máquina.
É uma etapa normal em muitos jogos modernos.
Como Reduzir Problemas de Shader Stutter?
Nem sempre existe uma solução do lado do usuário.
Grande parte depende da implementação do próprio jogo.
Mesmo assim, algumas práticas podem ajudar:
- Aguarde a compilação terminar.
- Mantenha o jogo atualizado.
- Utilize drivers adequados.
- Evite apagar o shader cache sem necessidade.
- Reinicie o jogo depois de grandes atualizações quando recomendado.
Se o problema estiver no próprio motor ou na implementação do jogo, uma atualização dos desenvolvedores pode ser necessária.
Por Que Shader Compilation Ficou Tão Comentada?
Os jogos modernos estão cada vez mais complexos. Além disso, essa evolução aumenta significativamente a quantidade de dados que precisam ser processados em tempo real.
Na prática, isso inclui:
- mais materiais
- mais efeitos
- mais configurações
- ray tracing
- mundos maiores
- APIs gráficas de baixo nível
Como resultado, isso aumenta o número de combinações que precisam ser gerenciadas pelo sistema gráfico.
Ao mesmo tempo, jogadores estão cada vez mais atentos à estabilidade dos frame times, já que pequenas variações podem afetar a sensação de fluidez.
Por isso, o shader compilation se tornou um assunto bastante discutido, especialmente entre jogadores de PC, já que ele pode impactar diretamente a consistência da performance durante o gameplay.
Então O Que é Shader Compilation?
Shader Compilation é o processo de preparar os shaders para que possam ser utilizados corretamente pelo sistema gráfico.
Esses pequenos programas controlam diversos aspectos da renderização, incluindo iluminação, materiais, sombras e efeitos.
Quando a compilação acontece antecipadamente, você pode precisar esperar alguns minutos antes de jogar.
Quando acontece durante a partida, existe a possibilidade de surgirem pequenas travadas caso o trabalho não seja realizado de maneira eficiente.
É por isso que aquela aparentemente simples mensagem de “Compilando shaders” pode ser tão importante para a experiência final.
Conclusão
Shaders estão por trás de grande parte da aparência dos jogos modernos.
Eles ajudam a GPU a calcular iluminação, materiais, sombras, reflexos e inúmeros outros efeitos.
Porém, antes de serem utilizados, precisam passar por processos de preparação e compilação adequados ao ambiente gráfico.
É daí que surge a Shader Compilation.
A espera inicial pode parecer inconveniente, mas frequentemente existe por um bom motivo:
Evitar que parte desse trabalho aconteça no meio da partida.
Quando o processo não é bem gerenciado, podem aparecer aquelas pequenas travadas conhecidas como shader compilation stutter.
Por isso, quando abrir um jogo novo e encontrar uma barra dizendo “Compilando shaders”, talvez seja melhor não reclamar imediatamente.
Alguns minutos esperando podem evitar muitas pequenas travadas depois.
FAQ
O que é Shader Compilation?
É o processo de preparar e compilar shaders para que possam ser utilizados pelo sistema gráfico durante a renderização do jogo.
Por que jogos compilam shaders antes de iniciar?
Para realizar antecipadamente parte do trabalho necessário e reduzir a possibilidade de stuttering durante a partida.
Shader Compilation usa CPU ou GPU?
Os shaders são executados pela GPU, mas a compilação e preparação podem envolver bastante trabalho da CPU, do driver e do próprio jogo.
Atualizar o driver pode fazer os shaders compilarem novamente?
Sim. Mudanças no driver podem invalidar determinados caches e fazer com que alguns dados precisem ser recriados.
SSD elimina shader stutter?
Não. Um SSD rápido melhora o carregamento de dados, mas não elimina automaticamente travadas provocadas pela compilação de shaders.
Posso jogar enquanto os shaders estão compilando?
Depende do jogo. Quando existe a opção de aguardar, normalmente é melhor deixar a compilação terminar para reduzir possíveis interrupções durante a partida.
