Shaders: Pixel Shaders

Sejamos francos: somos apaixonados por bons gráficos. Sempre que uma nova imagem é divulgada ou vemos um trailer de um lançamento futuro, a primeira coisa que elogiamos (ou criticamos) é aparência do jogo. É quase instintivo. Quanto mais próximo do real, melhor é nosso conceito sobre o título.
Recentemente você viu aqui no Baixaki Jogos o que são e qual a função dos shaders dentro dos games. Embora ninguém se lembre deles durante a jogatina, esses “microaplicativos” são responsáveis pelo emprego de efeitos visuais após a renderização da imagem. Mas e quando temos um mundo repleto de detalhes e com índices incrivelmente fiéis de iluminação e textura? A quem devemos agradecer por transformar nossos consoles em pequenos cinemas interativos? A resposta é o pixel shader.
Como você já deve estar cansado de saber, o pixel é a menor parte de uma imagem. No caso de seu monitor, por exemplo, trata-se dos pequenos quadrados que compõem as figuras e demais elementos que você vê neste exato momento. Aproxime-se da tela e será possível percebê-los nitidamente. Porém, qual a relação entre tudo isso?
Um mar de transformaçõesOu uma metamorfose ambulanteDe modo geral, o pixel shader é uma transformação que o pixel recebe para se adequar àquilo que é visto na tela. É como se o pequeno ponto que compõe a imagem sofresse constantes alterações para enganar nossos olhos e dar a sensação de que vemos algo muito próximo do verdadeiro quando o assunto são os detalhes.
Enquanto os demais shaders trabalham para polir o aspecto visual do gráfico, este fica responsável por dar o acabamento realista à figura. É graças ao pixel shader que conseguimos perceber texturas, transparências e até mesma a iluminação sobre os objetos vistos na tela.
A melhor forma de explicar o recurso é apelando para o mais clássico dos exemplos: a água. Ainda que soe como um grande clichê, é nela que podemos ver claramente a tecnologia em ação.

Na imagem acima, pertencente ao jogo Just Cause 2, é possível perceber o efeito sendo aplicado de diversas maneiras. Repare que o visual é bem próximo do que acontece na realidade, principalmente por conta dos efeitos de iluminação aplicados na superfície do mar, o que dá muito mais veracidade à cena.
Note que há o reflexo da luz do sol e da costa sobre a água, as pedras ao fundo parecem deformadas como é típico com algo submerso e até mesmo as roupas de Rico Rodriguez recebem um novo tom quando mergulhadas. Tudo isso é o pixel shader agindo de uma só vez.
Para compreender como essa tecnologia funciona, vamos pegar um único pixel da imagem anterior: um ponto qualquer do mar em que o protagonista está situado. Imagine que os designers e programadores definiram um determinado aspecto ao elemento, que deveria manter uma coloração semelhante ao da água – como podemos ver no canto superior direito da figura. Contudo, para deixar a cena ainda mais real, algumas alterações precisam ser feitas para gerar o efeito desejado.

Para que o “pixel-água” receba todas as alterações citadas anteriormente, o shader responsável transforma o pequeno ponto de acordo com aquilo que for necessário. Se o código do jogo indica que há uma fonte luminosa incidindo naquele local, então o pixel deve assumir a cor correspondente. O mesmo acontece caso o personagem se mova: a menor parte da imagem vai assumir o tom da roupa molhada assim que o herói começar a nadar e sumir assim que ele passar. No entanto, é importante frisar que essas mudanças não são estruturais, ou seja, o pixel não tem sua forma modificada.

A parte técnicaTrabalhando em conjuntoNa teoria é algo bem simples, mas na prática a coisa muda de figura. Isso porque o grande segredo do pixel shader é o fato de todos os pixels da imagem serem modificados isoladamente, ou seja, todas as transformações ocorrem milhões de vezes a cada quadro da cena. É exatamente isso que permite que o reflexo do sol consiga acompanhar a ondulação da água com tamanha perfeição.

Porém, é claro que todo esse detalhamento tem um preço. Por trabalhar com os pontos separados, a GPU precisa realizar os cálculos para todos os elementos da cena de uma só vez, o que resulta em processo pesado e que exige muito da placa gráfica. Para ter uma ideia, imagine que uma tela em alta definição (1280×720) rodando um game a 60 fps exige que o componente calcule mais de 55 milhões de pixels em um único segundo.
Esse é um dos grandes motivos que obrigam o jogador ter uma placa de vídeo potente para suportar títulos recentes. Como os estúdios se esforçam para oferecer o máximo de detalhes em seus jogos, é natural que os equipamentos um pouco mais antigos não consigam dar conta da quantidade de processamento que o pixel shader necessita.
Um mundo mais bonitoMais aplicações do pixel shaderPor mais que as imagens mostradas até então sirvam para termos uma rápida noção do que representa essa tecnologia, é somente na ausência do efeito que percebemos sua real importância.

Não é preciso ser um especialista para perceber a diferença entre os dois lados da imagem acima. Enquanto à esquerda temos o pixel shader sendo aplicado em todos os elementos visíveis, podemos ver a total falta da tecnologia à direita. O resultado é uma figura completamente chapada, lisa e sem qualquer tipo de detalhamento.
Embora tenhamos mostrado o recurso sendo aplicado na água, ele não é exclusividade das superfícies molhadas. Assim como na cena anterior, todo o acabamento de um jogo só existe por conta desse recurso.
Nos jogos de corrida, por exemplo, o pixel shader é responsável por todo o realismo dado à lataria dos carros. Se há algumas gerações os veículos eram completamente foscos, hoje temos automóveis que cujo material reflete a imagem tanto dos demais competidores quanto do próprio cenário. Basta comparar a simplicidade do primeiro Gran Turismo com o nível de detalhes visto no quinto título da série.
O mesmo pode ser dito de efeitos de iluminação em ambientes escuros. Lembra-se do brilho das lâminas de Kratos visto tanto no chão quanto no próprio personagem? Ainda em God of War 3, toda a riqueza de textura dos locais, inimigos e até mesmo do deus da guerra são resultados da tecnologia.

Outra aplicação do pixel shader para tornar o game ainda mais real é o visual de molhado que o personagem assume após um mergulho. Isso é bem perceptível em Assassin’s Creed 2, já que o tom da roupa fica nitidamente mais escuro após Ezio cair na água. Nesse caso, os pixels abandonam a coloração branca e se transformam em cinza por um breve período de tempo. Quando volta à cor natural é como se o tecido tivesse “secado”.

Anúncios
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s