A essa altura você já deve saber que shaders são aqueles processos gráficos capazes de transformar uma imagem embaçada e deselegante — mais ou menos como o cartão de natal que você fazia para a sua avó — em uma imagem bela, lustrosa, rica em detalhes e em movimentos.
Você também deve saber queesses processos são da alçada da GPU (unidade de processamento gráfico, na sigla em inglês), e que o seu funcionamento é coordenado pelo pixel pipeline, que transfere informações referentes aos pixels, as unidades básicas de qualquer imagem de natureza computacional. Se não, uma boa dica é conferir o artigo postados anteriormente aqui no TecMundo Games — “Shaders: O que são e para que servem?”.
Mas se no último especial nós desvendamos os segredos do processo conhecido como pixel shader —responsável por atuar diretamente nos pixels de uma imagem —, agora é o momento de fuçar em outro processo gráfico igualmente importante: o vertex shader. Talvez uma explicação técnica (suave, não se preocupe) possa ser um bom começo.
Entra vértice, sai vérticeUm sopro de vida para um simples conjunto de pixels
O vertex shader é uma função gráfica responsável por adicionar efeitos especiais a objetos em ambientes 3D, conforme executa operações matemáticas sobre cada vértice formador da imagem. Cada vértice é então definido em diversas variáveis, sendo basicamente descrito pelo seu posicionamento no espaço tridimensional — coordenadas “x”, “y”, e “z”.
Mas os vértices também podem trazer mais dados agregados. Além da localização espacial, também podem estar associadas informações como “cor”, “textura” e “iluminação”. Entretanto, vale lembrar: o vertex shader não altera o tipo de dados — quer dizer, ele não vai acrescentar novos vértices a uma imagem.
O trabalho aqui consiste em simplesmente fornecer novos valores a dados preexistentes — a fim de criar a ideia de movimento, como se verá adiante. Dessa forma, uma superfície básica (formada por vértices, é claro) pode emergir após o processo com uma iluminação ou uma textura distintas, podendo mesmo ocupar outro lugar no espaço — o que será reforçado pela inclinação entre as linhas básicas da figura, que cria a ilusão de perspectiva.
Em seguida, cada vértice será renderizado como uma série de pixels — que, afinal de contas, continuam sendo a estrutura básica da coisa toda —, enviado para a superfície e, eventualmente, acabam exibidos na tela.
Em linhas gerais, portanto, trata-se da etapa do processamento gráfico responsável por tratar os vértices dos elementos mais básicos que constituem um modelo tridimensional — também conhecidos como “primitivos”, normalmente assumindo a forma de triângulos. Mas espere. Existe uma leitura um pouco mais... Instintiva desse processo.
Movimentação naturalOs controles são os mesmos, mas os seus cabelos...
Ao atuar nas estruturas básicas dos modelos 3D, o vertex shader adiciona um efeito de suma importância, sobretudo nos jogos modernos. Basicamente, é o que torna possível que, mesmo quando um personagem é sacudido de um lado para o outro em uma sucessão de instabilidades geológicas, ou em uma explosão, o conjunto todo permaneça coerente, com movimentação adequada e realista — pelo menos em boa parte dos casos.
Algumas aplicações são típicas do vertex shader, boa parte delas diretamente associada a movimentos. Trata-se, por exemplo, dos padrões aparentemente erráticos de uma grama que balança ao vento, ou do cabelo ondulante do personagem citado acima — caso a explosão não tenha chamuscado tudo, é claro.
Que se faça o caos!
Outro caso de uso bastante recorrente é a simulação dos movimentos da água. Desde que o clássico tapete azul claro deixou os video games em algum momento entre a quarta e a quinta geração de consoles, recriar o movimento aparentemente caótico da água tem sido um grande desafio para os desenvolvedores.
Trata-se, portanto, de uma aplicação típica do vertex shader. Em vez de simular, digamos, os movimentos de um mar revoltoso utilizando apenas texturas ou assumindo a tarefa hercúlea de criar diretamente cada um dos padrões de movimento — o que, ainda por cima, acabaria reduzindo a qualidade do resultado final —, basta relegar a tarefa aos cálculos do vertex shader, que naturalmente simulará as reações de batimento e rebatimento das águas — ou qualquer outro tipo de fluído.
Outras aplicações
Mas existem ainda outras aplicações bastante úteis para o vertex shader. Por exemplo, as animações em forma de esqueleto, capazes de dotar um modelo de personagem com juntas de 32 ossos, permitindo movimentos flexíveis e convincentes — em um caso bastante “simples” do chamado vertex morphing, que confere formas sucessivas a uma rede de triângulos básicos.
Dessa forma, se os shaders em geral são responsáveis por trazer detalhes e formar uma atmosfera capaz de enganar os nossos sentidos (ainda bem!), o vertex shader, em particular, é o elemento que confere “vida” às criações gráficas, que de outra forma acabariam estáticas ou com padrões de movimentação sem muita orientação lógica — sim, essa já foi a realidade dos video games um dia.