Aceleradoras de vídeo: 3D

Author Photo
9:44 am - 09 de outubro de 2010

As complexidades do 3D

Então, afinal, o que faz uma placa aceleradora “3D”?

Bem, a noção de “placa aceleradora 3D” está ligada à percepção do movimento.

Eu entendo que parece estranho (e de fato é), mas a grande dificuldade em criar a ilusão da tridimensionalidade usando uma tela plana como a dos computadores não é a perspectiva nem a proporcionalidade, mas sim duas questões fundamentais, ambas ligadas ao deslocamento de objetos: a ilusão de que as coisas que estão mais próximas “deslizam” sobre as que estão mais afastadas quando elas (ou nosso ponto de vista) se deslocam, e o jogo de luz e sombra que acompanha o deslocamento dos objetos ou dos focos de luz que os iluminam. E nada disto se manifesta em imagens estáticas.

Portanto não é de estranhar que quem deu (e continua dando) o maior impulso para o desenvolvimento de placas aceleradoras 3D foram os jogos e animações gráficas.

Então vamos ver porque tudo isto é tão complicado.

A noção de movimento dos corpos na tela ? seja em uma singela animação em duas dimensões, seja em uma elaboradíssima cena de ação de um jogo de última geração ? é dada pela rápida sucessão de imagens estáticas.

A mecânica deste efeito é conhecida e não há razão para estendermos sua discussão, mas convém abordar pelo menos as noções básicas.

[photoframe folder=wp-content/blogs.dir/4/files/aceleradoras-3d-1980883404 filename=

Então, vamos lá. Coloque a Figura 3 no centro de sua tela, aumente o brilho e olhe fixamente para ela, sem piscar nem mover o olhar por pelo menos trinta segundos. Depois, feche os olhos ou olhe para uma tela ou parede bem escura. Você terá uma “ilusão de ótica”.

Se você tiver alguma sorte e uma imaginação fértil, a ilusão lhe fará ver o rosto de Marilyn Monroe. Se a imaginação não for tão fértil, verá simplesmente um rosto. E, na pior das hipóteses, verá uma mancha luminosa no centro de seu campo de visão.

Isto se deve à “persistência retiniana”, um fenômeno visual descoberto pelo cientista belga Joseph Plateau, que consiste no fato de uma imagem permanecer gravada por algum tempo em nossa retina (o tecido sensível à luz que reveste o fundo do interior do globo ocular). No caso da Marilyn, como você olhou fixamente para a imagem por um período considerável, a permanência se estende por alguns segundos. No caso das imagens comuns de nosso dia-a-dia, o tempo de permanência da imagem na retina é de cerca de um décimo de segundo.

Ora, isto quer dizer que se mudarmos rápida, regular e sucessivamente as imagens sobre uma tela (seja as projetadas em uma tela de cinema, seja as geradas na tela de seu monitor), elas se superporão por uma fração de segundo. Nossos olhos captarão uma imagem antes que a anterior tenha se “dissolvido” em nossa retina e assim sucessivamente. E se as imagens que se sucedem mostrarem o mesmo objeto, porém ligeiramente deslocado em relação à posição da imagem anterior, teremos a impressão que ele se move na tela.

O cinema se aproveita disto projetando imagens que se sucedem 24 vezes por segundo. Na tela de seu monitor, devido a problemas como cintilação e outros que não cabe discutir aqui, a sucessão de imagens tem que ser mais rápida, em geral da ordem de sessenta a setenta por segundo.

Pois bem: em um filme que “passa” em seu monitor exibindo, por exemplo, uma bucólica cena no campo, cujas imagens foram captadas por uma câmara de vídeo e simplesmente repetidas uma após a outra na tela, quem se encarrega de criar o efeito de tridimensionalidade é a natureza. É ela que ilumina o cenário e tudo nele presente, criando os efeitos de luz e sombra e superpondo os objetos na ordem correta, fazendo com que os que estão mais perto escondam os que estão mais longe quando se situam sobre a mesma visada e coisas que tais.

Mas em um jogo, por exemplo, ou em qualquer animação criada por um computador, a coisa é diferente. Cada imagem é uma “cena” que tem que ser gerada individualmente antes de ser exibida na tela. E cada efeito tem que ser criado pelo computador. E como se consegue isto?

Primeiro o computador tem que gerar cada objeto da cena (e do cenário) “desenhando” polígonos (quase sempre triângulos) que, juntos, constituem seus “wireframes“, calculando as coordenadas de todos os vértices. Isto gera a forma do objeto.

Em seguida é preciso considerar a “textura” de cada um dos triângulos. Textura é uma qualidade da superfície ligada especificamente ao sentido do tato e da visão. No que diz respeito ao tato (textura física), tem a ver com lisura e rugosidade. No que toca à visão (textura visual), tem a ver com a forma pela qual reflete a luz (brilhante ou opaca, difusa ou focada).

Em artes visuais, como nas animações por computador, há que se simular a textura física com características meramente visuais. Se o efeito desejado for alcançado, será possível distinguir, simplesmente inspecionando o objeto visualmente, se sua superfície é de madeira, vidro, porcelana, metal, couro, pele humana, pelo de animais, penas de aves ou seja lá do que for. E se está seca ou molhada, se é viscosa ou lisa, rígida ou elástica.

Nas telas de computadores a textura é simulada pela repetição de formas e linhas e pode ser mais ou menos realística. Os elementos que constituem a textura são denominados “Texels” (de “Texture Cells” ou “Texture Elements” para manter a analogia com “pixels“). A aparência visual do corpo representado em uma tela tridimensional é obtida aplicando os “texels” sobre os respectivos “pixels” nos polígonos que formam sua estrutura. O exemplo mais simples: considere uma parede em forma de retângulo. Em uma tela tridimensional sua posição é definida pelas quatro coordenadas dos vértices. Mas seu aspecto é dado pelos texels que a recobrem. Mude-os e você verá, por exemplo, uma parede de pedra transformar-se em uma de tijolo ou ser recoberta de hera.

Depois que cada polígono elementar é revestido com sua textura, é preciso calcular a intensidade da iluminação que incide sobre cada um deles em função das coordenadas e da intensidade da fonte de luz (que pode ser mais de uma). Triângulos mais perto da fonte, assim como triângulos situados em um plano perpendicular ao do raio luminoso que parte da fonte, aparecem mais claros.

Para que se obtenha um efeito realístico, a luminosidade (ou seja, a qualidade de “claro” ou “escuro”) de cada triângulo tem que ser calculada individualmente baseada nos dois fatores acima citados, mas não apenas neles. Há também que se levar em conta o fato de que se houver um objeto opaco situado entre o polígono e a fonte, sua iluminação será proveniente da luz refletida pelos demais objetos da cena. E considerar, caso existam objetos “atrás” dele, a projeção de sua sombra sobre estes objetos.

Da mesma forma, se o objeto que se interpõe entre o polígono e a fonte for semitransparente ou translúcido, a redução correspondente na intensidade da luz que o atravessa deve ser considerada. Assim como deve ser considerada, em função da textura do polígono, a quantidade de luz que ele reflete e a direção do raio luminoso refletido, para que esta influência seja levada em conta na iluminação dos demais objetos da cena.

Veja, na Figura 4, como tudo isto é bem ilustrado pelo famoso (bem, ao menos na comunidade da computação gráfica ele é famoso) “Utah Teapot”, ou “bule de Utah”, um modelo clássico de objeto tridimensional criado em 1975 por Martin Newell (veja mais sobre ele na Wikipedia, onde a imagem foi obtida). Trata-se de um objeto simples, de textura clássica, iluminado simultaneamente por duas fontes luminosas.

[photoframe folder=wp-content/blogs.dir/4/files/aceleradoras-3d-1980883404 filename=

Repare nas duas sombras que aparecem no plano inferior, na sua diferença de tonalidade (proporcional à intensidade de cada fonte) e na parte mais escura correspondente à superposição de ambas. Note a textura do bule, levemente enrugada, e como isto gera seu próprio efeito de luz e sombra. Repare nos reflexos das duas fontes sobre o bojo do bule e note como este reflexo se afina e encurva no bico.

Agora pense: o bule não existe. Ele não passa de um modelo matemático que criou o wireframe, calculou os efeitos de luz e sombra, assim como os reflexos e o revestiu com os texels correspondentes à textura desejada (e imagine o que aconteceria se o autor resolvesse substituir esta textura por uma correspondente, por exemplo, a um tecido de veludo opaco). O resultado parece efeito de magia, mas não passa de matemática aplicada.

E isto tudo sem mencionar a “atmosfera”. Por exemplo: pense nos objetos espalhados em uma sala cheia de fumaça. Ou imagine que as imagens reproduzem a visão do piloto de um avião que penetra em uma formação de nuvens cuja densidade muda à medida que ele se desloca dentro delas. Ou em um ambiente aberto, surreal, em que não exista ar, mas uma mistura de gases coloridos mais ou menos transparentes. Ou no reluzir do fogo (e sua influência sobre a iluminação de todos os objetos da cena). Pois tudo isto exerce influência na tonalidade e na reflexão da luz em cada objeto da cena. Pois para gerar uma cena (preste atenção: uma única das muitas cenas que se sucedem na animação) tudo isto tem que ser calculado.

Feitos todos estes cálculos, cada polígono tem sua posição determinada, é revestido com sua textura e recebe a devida quantidade de luz. Chega-se então àquilo que se poderia chamar de “modelo matemático” da cena, ou seja, o resultado de toda esta calculeira. Este modelo é afinal submetido a um processo que, por falta de nome melhor, convencionou-se chamar de “renderização”, que a Wikipedia (em inglês) define como “o processo final de criar a imagem bidimensional real da cena”. Que, ainda segundo a Wikipedia, é análogo a produzir uma foto da cena depois que todos os cálculos foram feitos. Ou seja: todo o processamento é “traduzido” em cores de pixels individuais que são armazenados na memória de vídeo na devida ordem e passam a constituir uma “cena”, ou seja, uma representação bidimensional de um cenário tridimensional.

O resultado pode ser assombroso. Examine a Figura 5, uma cena criada por Jawed Karim e igualmente obtida na Wikipedia. São apenas três esferas, vistas de cima, no fundo de uma caixa quadrada cujas paredes refletem parte da luz e iluminadas por um único foco luminoso.

[photoframe folder=wp-content/blogs.dir/4/files/aceleradoras-3d-1980883404 filename=

Repare que a esfera situada próxima ao canto inferior esquerdo é transparente. Veja o canto do fundo da caixa através dela. Note, nela, o reflexo da bola maior. Repare nas sombras sobre o fundo e paredes e na textura das esferas, particularmente na da maior. Note os reflexos da luz nas esferas e nas paredes. Veja como a imagem de cada esfera interage com as das demais, inclusive iluminando-as com seu reflexo. Deu para perceber a complexidade da coisa?

Agora pense: estamos falando de uma animação, onde há movimento. E qualquer movimento ? dos objetos representados na cena, da(s) fonte(s) de luz ou do observador, acarreta mudanças substanciais, alterando a cena e, portanto, forçando com que sua representação na memória de vídeo seja recalculada. E toda aquela imensidão de cálculos tem que ser refeita no mesmo ritmo com que as cenas são “trocadas” na tela, ou seja, de 20 a 120 vezes a cada segundo.

Mas, espere um pouco: tudo isto acaba resultando em uma imagem plana, gravada na memória de vídeo e desenhada em uma tela plana, portanto de duas dimensões.

Onde está, afinal, a tão falada tridimensionalidade?

Newsletter de tecnologia para você

Os melhores conteúdos do IT Forum na sua caixa de entrada.