Shaders são pequenos programas que são executados na sua GPU como parte do processo de renderização. Eles lidam com tudo, desde a transformação da geometria de modelos 3D até a aplicação de texturas, iluminação, sombras e efeitos de pós-processamento. Eles são fundamentais para os jogos modernos e parte do motivo pelo qual esses jogos parecem tão impressionantes.
No entanto, nem sempre foi assim. As primeiras placas gráficas dependiam de hardware de função fixa, com unidades separadas dedicadas a tarefas como texturização e iluminação. Embora essas unidades fossem poderosas para a época, elas também eram rígidas. À medida que os jogos se tornaram mais complexos e visualmente ambiciosos, o hardware fixo limitou os efeitos visuais e a liberdade criativa. Os shaders programáveis removeram esses limites.
Os primeiros shaders amplamente utilizados foram os pixel shaders. Eles determinam a cor final de cada pixel na tela e podem lidar com cálculos de iluminação, sombras, texturas, transparência e efeitos de pós-processamento, como desfoque ou sombreamento cel. Os vertex shaders surgiram logo depois, permitindo que os programadores manipulassem dados de vértices, como posição, cor e coordenadas de textura, antes da renderização da geometria.
Mais tarde surgiram os shaders geométricos, que podem gerar e modificar geometrias instantaneamente dentro do pipeline gráfico. Embora não sejam muito utilizados atualmente devido aos custos de desempenho, eles possibilitaram efeitos como geometria procedural e efeitos de partículas. Os shaders de tesselação se basearam nessa ideia, aumentando dinamicamente os detalhes geométricos e tornando as superfícies mais suaves sem armazenar mais dados do modelo.
Mais recentemente, as APIs modernas introduziram shaders de tarefa e malha. Estes substituem partes dos estágios tradicionais de vértice, geometria e tesselação por um sistema mais flexível que dá aos programadores mais controlo sobre como a geometria é gerada e processada.
Os shaders de ray tracing são a mais recente adição. São utilizados para efeitos como reflexos, sombras e iluminação global, traçando os caminhos dos raios de luz através de uma cena. São suportados pelo DirectX Raytracing e Vulkan e requerem placas gráficas relativamente modernas para funcionar com níveis de desempenho jogáveis.
Se é isso que são os shaders, por que demora tanto tempo para pré-carregá-los e o que significa, na verdade, pré-carregar?
O termo é um pouco enganador. Na prática, pré-carregamento de shaders significa compilar e armazenar shaders em cache, em vez de simplesmente carregá-los. Os desenvolvedores de jogos podem compilar shaders em tempo real enquanto você joga ou compilá-los antecipadamente, antes do início do jogo.
Compilar shaders durante o jogo pode funcionar em casos simples, mas muitas vezes leva a atrasos e travamentos quando novos efeitos ou áreas são encontrados. Se muitos shaders precisarem ser compilados de uma só vez, os tempos de frame podem aumentar drasticamente, e é por isso que essa abordagem é tão perceptível em jogos de mundo aberto. A compilação excessiva em tempo real é frequentemente um sinal de otimização deficiente do PC.
O pré-carregamento de shaders evita esse problema, compilando-os antecipadamente e armazenando os resultados em uma cache. Uma vez compilados, os shaders podem ser reutilizados instantaneamente durante o jogo, resultando em um desempenho mais suave. A desvantagem é que você precisa aguardar a etapa de compilação do shader na primeira vez que executar o jogo.
Essa espera pode voltar após uma grande atualização do jogo ou atualizações do driver gráfico, uma vez que os binários do shader estão intimamente ligados à versão do jogo e ao driver da GPU. Com as atualizações frequentes dos drivers gráficos, a recompilação do shader torna-se uma frustração familiar para os jogadores de PC.
Por que os programadores não podem simplesmente enviar shaders pré-compilados? Nos nossos queridos PCs, o panorama de hardware e controladores é simplesmente muito variado. A compilação de shaders depende da arquitetura da GPU, da versão do controlador e da API gráfica, portanto, um shader compilado que funciona num sistema não funcionará noutro. As consolas evitam esse problema porque são plataformas fixas, mas os PCs não são.
Então, da próxima vez que estiver a olhar para um ecrã de pré-carregamento do shader, lembre-se de que ele está lá para reduzir a lentidão e melhorar o desempenho quando estiver realmente a jogar. É um poder para o bem.
JOIN OUR OFFICIAL CORSAIR COMMUNITIES
Join our official CORSAIR Communities! Whether you're new or old to PC Building, have questions about our products, or want to chat the latest PC, tech, and gaming trends, our community is the place for you.