Para nós, gamers, os jogos aparecem como um pacote completo que envolve gráficos, jogabilidade, trama e outros aspectos fundamentais. Conseguimos discernir uma coisa da outra, identificar falhas e até mesmo propor soluções para certos problemas pontuais. Alguns conseguem até imaginar novas mecânicas com as quais qualquer jogo funcionaria de forma bem melhor do que a lançada.
Muitos enxergam o game da mesma forma que um filme, e propõem soluções como se fossem diretores. “Seria melhor se o personagem pudesse atirar enquanto anda” ou “este game seria melhor em terceira pessoa” são frases muito repetidas, como se bastasse trazer a câmera mais para trás ou ordenar que o protagonista faça duas coisas ao mesmo tempo. Para os programadores, porém, tudo isso se resume a cálculos.
Todos os aspectos de jogo, controlados ao apertar de um botão, são um intrincado conjunto de contas matemáticas que resultam na imagem vista na tela. Agora, imagine calcular todas as nuances de um oceano em pleno movimento, bem como os reflexos do sol e outros objetos na água? Este é um insano trabalho de processamento que tem os shaders como principal ator e facilitador.
Definindo shaderPara deixar tudo mais realShaders são um conjunto de instruções que definem o comportamento da superfície dos objetos na tela. Basicamente, são estes “microaplicativos” que aplicam efeitos como os reflexos do ambiente na lataria de um carro, definem a qualidade das curvas de uma imagem ou a movimentação da água enquanto um personagem está nadando.
A imagem acima, do game Just Cause 2, exibe uma série de shaders em pleno funcionamento. A movimentação da água varia em diversos pontos. Há dois reflexos, o do sol e o da margem do rio. A roupa de Rico Rodriguez está ensopada, assim como seu corpo. O efeito é extremamente realista.
Imagine se cada elemento tivesse que ser trabalhado independentemente. Talvez o resultado não fosse tão natural e não casasse tão bem com os gráficos gerados pelo sistema. Desta forma, os shaders conferem mais flexibilidade aos artistas e programadores, garantindo o máximo de realidade possível aos games.
Os shaders são executados na GPU (unidade de processamento gráfico, na sigla em inglês), componente que, como o nome já diz, é responsável por toda a parte visual. Mais especificamente, seu funcionamento é coordenado pelo pixel pipeline, unidade responsável pela transferência de informações referentes aos pixels que formam uma imagem. Quanto maior o pipeline, maior a velocidade de processamento.
Tipos de shadersDivisão de trabalhoApesar de todo o processo de manipulação gráfica ser realizado pela GPU, existem diferentes tipos de shaders, responsáveis por aspectos específicos. Para proporcionar o melhor rendimento possível, as tarefas são distribuídas pelo processador de acordo com a demanda. Para otimizar ainda mais o desempenho, algumas placas contam com unidades dedicadas a cada tipo de shading.
O vertex shader, como o nome indica, é o responsável pela manipulação dos vértices de um objeto tridimensional. É ele o responsável por, por exemplo, a movimentação da água de um oceano ou de um gramado. Para um desenvolvedor, basta aplicar esta função para que os cálculos apropriados de movimento sejam realizados, e os gráficos passem a ter uma movimentação mais natural.
Este processo é o responsável pelas alterações de posição, cor e textura, por exemplo, decorrentes da passagem de um objeto na água ou da detonação de uma granada. Como mostrado no vídeo acima, de Uncharted 2, o elemento reage de maneira diferente às passadas de Drake, ao mesmo tempo em que espirra e fica tremulando após as explosões.
Gráficos tridimensionais são formados por diversos triângulos, que não podem ser vistos em condições normais. Ao aproximar uma imagem 3D com um software específico para este fim, porém, é possível observar as diversas figuras geométricas que formam os objetos na tela. Quanto mais artefatos utilizados, mais definidos serão os gráficos.
Esta é a função do geometry shader, trabalhar com a geometria das imagens mostradas na tela. Esta unidade trabalha de forma a sempre exibir os melhores gráficos possíveis, de acordo com as especificações da máquina na qual o game está sendo executado. É dela a responsabilidade por melhorar as curvas, por exemplo, ou detalhar os objetos exibidos.
Ficou impressionado com os reflexos do circuito e da plateia nos carros de F1 2010? Seu queixo caiu com a bela imagem de Just Cause 2 que utilizamos no início deste artigo? Saiba que tudo isso é de responsabilidade do pixel shader, unidade encarregada do “acabamento” dos gráficos gerados na GPU.
O trabalho é feito ponto a ponto, e é um dos mais complexos de toda a categoria de shaders. É aqui que a profundidade, cor e todos os outros parâmetros dos gráficos são processados de acordo com as condições ambientais e de iluminação especificada pelo desenvolvedor. Ou seja, o pixel shader é o responsável por aplicar a sombra no personagem, deixá-lo molhado ou chamuscado, apenas para citar alguns exemplos.
Bibliotecas de softwareInstruções programadasOs shaders não funcionam sozinhos, e sim, baseados em uma biblioteca muito extensa de estados que nada mais são do que as instruções para cada uma dos aspectos que podem ser aplicados aos gráficos. É através destas bibliotecas que, por exemplo, é possível desligar os efeitos de neblina ou iluminação. Hoje, dois tipos principais desses conjuntos são utilizados na esmagadora maioria dos jogos.
O primeiro deles é o Direct3D, que faz parte do DirectX da Microsoft. Além de disponível em todos os computadores com Windows, a arquitetura também está presente no Xbox 360, e é a principal solução para renderização de gráficos em 3D.
O Direct3D tem o desempenho como foco principal e, sendo assim, é perfeita para jogos, principalmente em máquinas que não possuem uma especificação poderosa. Além disso, possui suporte também à renderização de gráficos 2D, substituindo a biblioteca DirectDraw, específica para este tipo de trabalho, a partir da versão 8 do DirectX.
Na briga contra o Direct3D está o OpenGL, biblioteca de instruções tridimensionais de código aberto. Apesar de também poder ser utilizada em games, a arquitetura é especializada em funções de modelagem e desenho. Também possui uma série de diferenças nos cálculos realizados em relação ao DirectX.
Categorias