quinta-feira, 5 de maio de 2011

Termos Técnicos: Shaders, Vertex Shader, Pixel Shader e Geometry Shader

Prontos para enriquecer mais um pouco o vocabulário de desenvolvedores de jogos, então vamos para mais um Tete, ou Termos Técnicos para o menos íntimos. Nesse post vamos falar de um termo que foi introduzido a muito pouco tempo nos games, mas que já faz parte da linguagem de muitos aficionados por games, então vamos entender melhor o que significa os Shaders.
Se você, por ser muito jovem ou por viver na lua nos últimos 15 anos, não tenha jogado nenhum jogo da geração do Playstation 1 e Nintendo Sixty-FOOOUR, peço que jogue e preste atenção nos gráficos, não no numero reduzido de polígonos, mas sim nos efeitos que o jogo apresenta. Mas se você viveu essa época, sabe dos jogos que estou falando vai se recordar, os gráficos daquela época eram o mais cru possível em termos de jogos 3D, basicamente tínhamos os polígonos, as texturas o cálculo de suas respectivas posições na tela, nada mais, de forma simples, um jogo 3D até o começo dos anos 2000 eram isso.

Os Shaders são recentes para o mundo dos games, isso porque para que os cálculos que seus efeitos exigem sejam feitos rapidamente, é necessário muito poder de processamento, e até aquela época tudo ficava ao cargo do processador, já não bastava ele cuidar da lógica do jogo ele tinha que calcular todas as coordenadas de cada vértice e das texturas. O principal fato para que os Shaders entrarem no mundo dos games, ou seja, pudessem ser aplicados em tempo real nos modelos, foi a popularização das placas gráficas. Com a popularização delas, foi aliviado o lado do processador que agora só tratava da lógica do jogo, e as placas gráficas se dedicava exclusivamente aos cálculos gráficos. A evolução das placas gráficas seguiu em paralelo a dos processadores, resultando em tornar realidade os Shaders para os jogos.

Mas afinal o que representa realmente os Shaders nos games? Primeiramente não temos uma tradução em português para esse termo, e com o atual nível que a globalização, certamente nunca vai haver um. Mas poderíamos comparar os Shaders aos efeitos especiais computadorizados do cinema. Antigamente víamos um filme e tudo que tinha era o ator na cena no mais natural possível, e os efeitos especiais se resumiam a truques de cena, nos jogos também eram assim, antes dos anos 2000 tínhamos apenas modelos 3D crus assim como os atores do cinema, nenhum retoque ou efeito especial computadorizado era aplicado sobre os modelos, dessa forma víamos apenas o modelo 3D e nada mais.

Então, o Shaders trabalham como os efeitos especiais do cinema, pegam aqueles modelos 3D, que antes eram mostrados diretamente, e aplicam efeitos diversos sobre eles, iluminação, distorções, sombras, entre outros diversos efeitos que nem imaginávamos antes dos anos 2000. Por termos vários efeitos de Shaders é que foi subdividimos os Shaders em categorias, cada um é aplicado sobre um elemento diferente na renderização da cena. Esses Shaders são:

Vertex Shader: São basicamente os efeitos aplicados diretamente sobre os vértices do modelo 3D, que são os pontos que formam os polígonos, podendo distorcer a forma do modelo em tempo real do jogo. A distorção mais comum é as usadas nos efeitos de água dos jogos atuais, onde é pego um modelo plano em 3D e é aplicado algoritmos que fazem os vértices se moverem e simularem ondas, fazendo ele ficar mais parecido com a água. Há uma infinidade de outras aplicações, como amasso nos carros de GTA 4, a retaliação de partes modelos de personagens simulando decepação em jogos mais violentos, enfim uma variedade de efeitos.

Pixel Shader: Depois que a cena é renderizada ela é uma imagem em Pixels assim como qualquer foto que você tira com sua câmera digital, o Pixel Shader trabalha com essa imagem, aplicando efeitos sobre ela e modificando o resultado que seria já o resultado final antes da adoção dos Shader. Podemos comparar esse Shader com um Photoshop em tempo real na renderização dos jogos, o que de fato não deixa de ser, pois encontramos aqui a maioria dos algoritmos que são usados no Photoshop, exemplo, desfoque, distorção de cores, iluminação, sobras, brilhos, etc. O Pixel Shader, por trabalhar essencialmente com pixel, também pode ser aplicado nas texturas dos jogos, desde desfocar a textura para que não possamos notar os pixels quando no aproximamos dos modelos, até aplicar um efeito de sombreamento de acordo com os outros elementos da cena. Esse Shader normalmente exige mais poder de processamento que o Vertex Shader, por isso as placas de vídeos dedicam mais poder de processamento a esse shader.


Geometry Shader: Esse Shader trabalha com os modelos 3D, ele tem a capacidade de gerar novos vértices ou remover eles, podendo deixar um modelo 3d muito mais detalhado que o modelo concebido pelo artista 3D, ou menos dependendo do caso. A função dele basicamente é essa criar novos vértices, então se ele for usado de forma desinibida, um jogo pode ficar pesado rapidamente e criando os já citados Slowdowns. Os desenvolvedores de jogos ainda preferem fazer os modelos já detalhados em softwares de modelagem 3D, e não deixar esses detalhes por conta da programação, tornando essa técnica pouco usual nos jogos. Mas ela é bastante comum nos programas de modelagem 3D, praticamente todos os programas do mercado trabalham com esse Shader para ajudar na modelagem em tempo real.


Os Shaders podem ser apontados como os principais responsáveis por tornas os jogos cada dia mais realistas em termos gráficos, e pelo andar da carruagem eles ainda tem muito para nos oferecer e nos surpreender como jogadores. É o que podemos ver no ainda em desenvolvimento, mas já pode ser considerado o novo passo da computação gráfica de jogos, o Unreal Engine 3. No vídeo de demonstração podemos ver o patamar que os Shaders estão. O vídeo abaixo fala por si só.


Conhecimento passado para frente, minha missão está cumprida por hora, assim, termino este post com um simples FUI!!!

Um comentário:

  1. Muito boa a matéria, bem explicativa e detalhadinha para os leigos. :p

    Parabéns pelo trabalho!

    ResponderExcluir