Mostrando postagens com marcador Termos Técnicos. Mostrar todas as postagens
Mostrando postagens com marcador Termos Técnicos. Mostrar todas as postagens

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!!!

quarta-feira, 20 de abril de 2011

Termos Técnicos: Buffer, Frame Buffer, Double Buffer, Triple Buffer.

E vamos lá enriquecer mais um pouco nosso vocabulário de criadores de jogos. Vamos falar agora dos Buffers.

Buffer na computação se refere a uma memória temporária, utilizado quando o computador processa certos dados, porém a saída desses dados é mais lenta que o processamento, então para que o processador não pare a espera da saída dos dados processados, ele armazenado dado processado no Buffer e continua processando o próximo dado, e quando a saída estiver disponível, requisita o próximo dado já processado que está no Buffer.

Essa técnica é empregada nos jogos também, e torna a fluidez dos jogos muito melhor. A placa de video e o processador podem ser mais rápido ou mais devagar para renderizar cada quadro dos jogos, isso depende do numero de elementos que a imagem tem em cena. Se visualizássemos os quadros assim que a placa e o processador gerassem os quadros, certamente não íamos entender nada do jogo, pois uma hora iríamos ver o jogo rápido demais, outra hora seria lento demais. Por isso ao invés de renderizar e exibir a imagem diretamente para o jogador, o processador e a placa de vídeo renderiza a imagem e passa para o Buffer, assim o jogador visualiza sempre o mesmo número de quadros por segundo, os FPS já estudados aqui. Quando tratamos de Buffer para renderização de imagens, chamamos esse buffer de Frame Buffer.

Mas mesmo com essa técnica, ainda sim não poderíamos visualizar os jogos de forma confortável se não fosse outra técnica empregada nos jogos, ela se chama Double Buffer, e muitos podem até desconhecer o que realmente essa técnica faz, pois precisamos visualizar um jogo sem essa técnica para realmente ver a diferença e a real utilidade dela. Se simplesmente mandássemos cada quadro para ser exibida pelo monitor sem o Double Buffer, cada imagem da animação do jogo seria exibida e depois apagada para que a próxima imagem renderizada da animação seja exibida, ou seja, exibe a cena - apaga - exibe a cena. Isso resultaria numa animação travada e até causaria irritação nos olhos dos jogadores.

A técnica Double Buffer trabalha diferente, ela exibe uma imagem renderizada para o jogador, até ai normal, porém ao exibir a próxima imagem renderizada da animação, a placa de vídeo ao invés de apagar a imagem anterior, ele na verdade sobrepõe a imagem anterior com a nova imagem  aos poucos, para ser mais exato ela sobrepõe pixel após pixel. Ou seja, ela pega o primeiro pixel da nova imagem e joga encima do primeiro pixel da imagem anterior, depois o segundo pixel da nova imagem sobre o segundo pixel da imagem anterior, e assim vai até que a imagem anterior tenha sido trocada totalmente pela nova imagem. Isso ocorre o tempo todo, durante todo o jogo, por isso o nome Double Buffer, ou duplo buffer, pois seriam necessários dois buffer, um para armazenar a cena anterior e outro para a nova.

Existe também o Triple Buffer, que na verdade é a mesma idéia, só que enquanto o efeito de sobreposição está ocorrendo já existe uma terceira imagem renderizada e pronta para ser jogada no monitor, adiantando ainda mais processamento, já que ele não fica esperando o efeito sobreposição terminar para gera uma nova imagem, lógico isso exige mais espaço para Buffer da placa de vídeo, mas os ganhos na fluidez das animações são muito satisfatória.

sexta-feira, 1 de abril de 2011

Termos Técnicos: FPS, Slowdown e Anti-Aliasing

Vamos aprender mais alguns termos para enriquecer nosso vocabulário de criadores de jogos. Vamos começar com um simples, e certamente, quem costuma jogar jogos de PC já deve ter se deparado com ele, os FPS, não o do tiro em primeira pessoa, esse é o referente a velocidade do jogo.

FPS significa Frames per second, ou para o português, Quadros por segundo. Quem já comprou um jogo que tinha um desempenho lento na sua modesta placa de vídeo deve já conhecer esse termo na prática. O número de frames por segundo que nossos jogos podem exibir está ligado ao desempenho, se você tentar executar um jogo muito pesado em uma placa de vídeo simples, certamente obterá poucos FPS, e poderá sentir isso ao ver uma certa lentidão no decorrer do jogo.

O termo na verdade não nasceu no mundo dos games, na verdade ele é um termo que já era usado já no inicio do cinema mudo. Por exemplo, o filme da Disney A Branca de neve e o sete Anões de 1937 é um marco na história da animação por ser um dos primeiros longas animado a ter 24 FPS, imagina na aquela época, sem computador algum, desenhara e pintar a mão 24 quadros para cada segundo do filme.

Mas voltado para os jogos, hoje os jogos se limitam a 60 FPS, um número suficiente de frames para não deixar nossa visão perceber qualquer parada entre um frame e outro. Porém nem sempre os jogos conseguem atingir 100% desses 60 FPS. Para os jogos de PCS isso normalmente está relacionado ao baixo desempenho do computador e da placa de vídeo, porém esses baixos desempenhos podem ser encontrados em alguns caso nos consoles, é mais raro de fato, pois os jogos de consoles são produzidos para uma configuração especifica enquanto os de PC são produzidos para atender sempre a ultima linha de placa de vídeo existente. Quando isso ocorre em um jogo que está em um PC de ótimas configurações ou mesmo em um console, usamos o termo Slowdown.

Os Slowdown, que pode ser traduzido para lentidão, ocorrem normalmente quando há muitos elementos gráficos na tela ao mesmo tempo, por isso nem sempre é possível prever que eles ocorram em um jogo. Pegamos um exemplo conhecido, GTA San Andreas, se você une uns 20 carros em um local que tem diversos pedestres passando e começar a atirar para todos os lados até a policia aparecer, isso tudo somado a um efeito de tempo como chuva, na maioria dos computadores ou mesmo no PS2, teremos uma queda no número de FPS, então teremos um slowdown.

Nem sempre é possível evitar esses casos, as chances são maiores quando estamos tratando de jogos com uma diversidade de opções como GTA. Porém existem muitas formas de tentar evitar isso, muito programadores optam por programar uma espécie de medidor de FPS, caso ele comece e se mostrar baixo são desativados ou minimizados certos efeitos temporariamente que talvez não sejam notados em cenas tão complexas. Um desses efeitos pode ser o Anti-Aliasing.

O Anti-Aliasing ou Anti-Serrilhado se trata de um efeito para disfarçar serrilhados gerados pela utilização de pixels na renderização. Um exemplo clássico, você conhece o Mario? Certamente já deve ter visto o primeiro jogo do Mario ou mesmo o boneco em algum lugar por ai mesmo que de relance. Se notarmos ele é feito de poucos pixels, isso logo causa um enorme serrilhado em sua forma, ao invés de deixá-lo redondo.
Da época em que  o primeiro Mario foi lançado até hoje os processadores evoluíram e hoje podemos exibir um número maior de pixels na tela, porém ainda estamos limitados aos pixels, logo também estamos limitados aos serrilhados, afinal para os pixels não existem nem uma forma perfeitamente arredondada. Para evitar esses serrilhados então foi criado o Anti-Aliasing, que nada mas faz do que pegar as formas geradas pelo pixels e gerar uma linha de pixels que contorne as formas e o plano de fundo da imagem, essa linha  misturaram as cores das formas e do plano de fundo até deixar o contorno mais suave e desfocado.

Para criar o efeito Anti-Aliansing, é necessário que o processador e placa de vídeo faça muitos cálculos que envolvem cores, distancia dos objetos, textura, etc. Logo o efeito Antia-Aliasing pode ser um efeito muito pesado para o processador e como ele normalmente só é notado em cenas menos movimentadas, ele pode ser desativado em cenas mais complexas de se gerar em pró da produtividade do processador e sem afetar drasticamente o visual de um jogo. Existem outras técnicas para se atingir um ótimo desempenho e evitar slowdown nos jogos, e se possível futuramente falarei sobre eles.

quarta-feira, 16 de março de 2011

Termos Técnicos: Polígono, Lowpoly Highpoly e Renderização

Nessa série de post intitulado termos técnicos, vou abordar alguns termos usados tanto em computação gráfica quanto no desenvolvimento de jogos. É uma forma de apresentar termos usados nessa  área para ajudar os iniciantes na hora que quiser pesquisar certas coisas, porém, não sabe como pesquisar porque não conhece certos termos ou mesmo caso ele se depare com esse termo em artigos ou sites afora.
Vamos começar com o termo Polígono. Na modelagem 3D, um polígono é a forma geométrica básica que forma os modelos em 3D, um polígono usado na modelagem e jogos é normalmente formado por três linhas, formando um triangulo. Em resumo, para formamos um modelo, por mais esférico que ele pareça, eles tem que ser formado por triângulos. Isso acontece porque que dessa forma o computador consegue processar a imagem mais rápido do que se fosse calcular usando qualquer outra forma geométrica.

Os jogos de última geração nos dias de hoje quase não nos deixa perceber o uso de polígonos nos seus modelos, pois se utilizam de um número cada vez maior de polígonos. Mas se você for ver os jogos mais artigos, até mesmo da geração do Playstation 2, verá que não é difícil visualizar partes dos modelos e cenários que tentam se utilizam de formas retas para formar um modelo esférico. E você irá notar que eles ficam cada vez mais visíveis conforme o jogo for velho.

Um bom exemplo de jogo que se utiliza de um número limitado de polígonos é o Tomb Raider 1 de PC e Playstation One. Para se ter uma idéia, os seios da personagem principal, Lara Croft, são tão triangulares quanto as pirâmides que ela explora. Esse jogo é de meados dos anos noventa, e a maioria dos jogos em 3D da época também são semelhantes em termos de número de polígonos.
Existem dois termos quem são muitos utilizados por desenvolvedores de jogos e na área de CG para descrever o nível de detalhamento de um modelo poligonal. O Lowpoly para modelos com um número baixo de polígonos e Highpoly para um modelo rico em polígonos. Não podemos dizer qual o número de polígonos um modelo deve ter para se considerado um ou outro, pois 200 polígonos podem ser o suficiente para tornar uma bola Highpoly, porém não é o suficiente para colocar um modelo de um personagem nessa categoria por exemplo.

Muitos podem achar que com a evolução rápida do poder de processamento dos computadores, os modelos em Lowpoly deixarão de existir, porém se enganam. De certa forma para os jogos podem até ser, porém para a produção e modelagem 3D ainda é muito utilizada, pois na verdade um modelo em Highpoly normalmente é produzido a partir de um modelo LowPoly, que depois de modelado passa por ferramentas que aumentam seu número de polígonos e o deixa mais detalhado. Dessa forma é mais fácil produzir modelos 3D em Hightpoly.

Acredita-se que em um futuro próximo, com a evolução descomunal dos computadores, os jogos irão ter tantos polígonos que eles seriam equivalentes aos átomos no mundo real. Isso já pode até ser considerado realidade para as produções cinematográficas, que tem modelos tão ricos de polígonos que é impossível enxergar um em qualquer que seja a produção cinematografia. Isso se deve pelo fato de que essas cenas são produzidas de um modo diferente das que vemos em nossos jogos.

Cada segundo de um filme produzido em computação gráfica pode demorar dias para ser gerado pelos computadores das produtoras. Fato é que você não vê a Pixar lançar mais de um filme por ano, ela só consegue produzir um filme por vez, e para cada filme seus milhares de computadores trabalham mais de um ano para produzir. Agora imagine se seu jogo demora-se um dia para passar um segundo do jogo, seria tão divertido quanto assistir um filme em câmera lenta. Para projetar os modelos em tempo real para você, um jogo tem que ser processado bem mais rápido, por isso não vemos a qualidade gráfica dos filmes da Pixar nos nossos jogos.

A esse processo de gerar as cenas com os modelos 3D dá-se o nome de renderização ou render no inglês. Para os jogos, a renderização tem que acontecer em tempo real, sendo assim, enquanto você vê um segundo de seu jogo, o processador estará renderizando o próximo segundo para exibir para você, e ele não pode levar mais tempo para renderizar do que o tempo que ele exibe a cena.

Até um tempo atrás se acreditava que no futuro para se produzir um personagem em 3D onde era possível visualizar os buracos dos poros da nossa pele seria necessário modelar esses poros usando os polígonos, porém logo se viu que esse pensamento estava errado e que uma técnica chamada Normal Mapping tornaria isso realidade bem mais cedo do que se imaginava e sem a necessidade de polígonos, porém esse termo fica para eu explicar no nosso próximo post de termos técnico.

Criticas, elogios, sugestões, os comentários são de vocês. Até.