A dificuldade de criar espelhos em games

Não se trata da questão dos personagens vampiros, mas sim apenas de um problema de custo computacional.

em 18/11/2015

A computação gráfica é uma das áreas da computação que mais contribuíram para o desenvolvimento dos games. Embora tudo tenha começado com simples formas geométricas, hoje nos encontramos na época de ouro da área, em que uso de máquinas poderosas aliadas a técnicas avançadas de renderização estão produzindo imagens e aventuras cada vez mais parecidas com a realidade. Mesmo assim, todo esse potencial não impede que algo que poderia ser banal cause tantas situações bizarras como os problemas nos espelhos de certos títulos a exemplo de Watch_Dogs e The Last Of Us. Seria interessante “refletirmos” sobre o assunto, não acham?

Um jogo de luz e sombra

Para começarmos a falar em reflexos, primeiramente precisamos conversar sobre aquilo que os cria: a luz! Todo mundo deve se lembrar das aulas de Física quando o professor explicou que o seu reflexo no espelho é formado pela reflexão dos raios de luz que batem e voltam aos nossos olhos, não é? Nos primórdios da história gamer, ninguém se preocupava com isso ao trabalhar na arte de Pac-Man, por exemplo. Afinal de contas, tudo se passava em duas dimensões e reflexos não eram prioridade no universo dos pixels. No entanto, com o aumento do poder computacional, saímos do plano e entramos no mundo tridimensional, em que a luz pode vir de vários lugares e provocar efeitos diferentes.
Nos primórdios da história gamer, iluminação não era a maior das preocupações.
Ocarina of Time foi um marco no desenvolvimento gráfico do game e nele podemos observar que espelhos são objetos comuns na aventura. Mas não é estranho que nenhum desses artefatos reflita alguma imagem? Ao jogar, você sabe que um espelho é o que é simplesmente pelo fato de sua superfície se destacar dentre outros objetos. Mas por que eles não funcionam da forma como deveriam? Simples: espelhos são mais difíceis de criar digitalmente do que você imagina. E para entender o porquê, precisamos voltar áquela nossa conversa sobre luz.
Ocarina of Time é um marco, mas o jogo não utiliza quase nenhum tratamento de sombreamento.

Na computação gráfica, os três tipos de tratamentos que se dão à luz em relação aos objetos é quanto ao sombreamento, reflexão e refração. O primeiro diz respeito às sombras que a luz vai criar dependendo da forma como ela incide em uma superfície; já a reflexão, como o próprio nome diz, trata da maneira como a luz é refletida; e a última fala sobre o que ocorre quando a luz passa de um meio para o outro.

Em sistemas computacionais, existem duas maneiras de gerar luz. A primeira é através da iluminação local, que diz respeito à interação direta entre uma fonte de luz e a superfície de um objeto. A outra forma é pela iluminação global, que trata da interação da luz com todos os objetos de uma cena. Aqui vamos nos concentrar nos modelos de simulação de iluminação local (que combina o uso de iluminação difusa e especular), já que, para o caso dos espelhos, estamos tentando entender como uma luz reage sobre uma superfície específica.
A mesma imagem, diferentes tratamentos de iluminação: sem luz (esquerda) e luz ambiente (direita).

Um dos modelos mais utilizados para gerar o efeito da luz no computador é o Modelo de Phong, que utiliza três componentes para cada objeto: reflexão de ambiente, difusa e especular. É através do uso dessas componentes que para cada ponto ou pequena superfície, cálculos podem ser utilizados para calcular o comportamento da luz. O problema do modelo de Phong está nos resultados poucos próximos da realidade que ele produz. Muitos games até meados dos anos 1990 utilizavam esse modelo no motor gráfico, pois os processadores da época não eram capazes de lidar com cálculos mais sofisticados.
A diferença é notável em termos de realismo e suavidade entre o modelo suavizado de iluminação especular (esquerda) e o popular Modelo de Phong (direita).

Muito além do reflexo

A solução para resolver esse problema visual foi utilizar o algoritmo de Ray Tracing para complementar os cálculos do modelo de Phong. Basicamente, o que esse algoritmo faz é criar um raio de luz a partir do olho (nesse caso a câmera do game) através cada pixel do plano da imagem até que ocorra uma intersecção entre os dois. Esse encontro vai criar um ponto específico e, a partir disso, pode-se utilizar o modelo de Phong para fazer os cálculos da luz. Como podemos ver abaixo, os resultados são muito mais realísticos.
Somente utilizando o Ray Tracing podemos obter resultados mais realistas quando estamos falando de luz em um ambiente computacional.

Foi somente nas últimas décadas que foi possível o uso do algoritmo de Ray Tracing para realizar os cálculos de luz. Isso porque o algoritmo possui um grande “gargalo” computacional, ou seja, seu maior obstáculo é o número de cálculo de intersecções que as imagens gráficas necessitam atualmente. Isso porque, para aumentar a qualidade das representações, cada vez mais polígonos são necessários para gerar um objeto. Somente a capacidade dos atuais processadores é suficiente para realizar tais cálculos. Ainda assim, isso não impede de termos problemas ao nos olharmos nos espelhos da vida virtual.

Eis o principal motivo pelo qual em diversos games é comum em algumas situações que possuem espelhos não ser possível enxergar o reflexo do personagem. Utilizar o Ray Tracing para calcular o comportamento da luz sobre uma superfície em movimento como uma pessoa, constituída por milhões de pequenos polígonos, demanda um alto custo computacional que pode ser desnecessário para os desenvolvedores e as empresas. Na hora da decisão de planejamento, pode valer muito mais a pena investir o orçamento em processadores e um código mais otimizado para realizar uma mecânica de combate inovadora do que garantir que o personagem poderá ver o seu próprio reflexo.
The Last Of Us tem belíssimos efeitos de iluminação, mas mesmo assim podemos ver que alguns reflexos não são bem construídos.

Mas será que não existem soluções para esse problema, de forma a deixar a experiência virtual mais condizente com a realidade? Uma opção é o uso de uma fonte de luz adicional para auxiliar nos cáculos das intersecções. Gerar uma fonte extra não é caro, mas o problema é que apesar dessa abordagem otimizar o algoritmo de Ray Tracing, ela não acompanha o desenvolvimento da computação gráfica. Os processadores se tornam cada vez mais poderosos, mas não é simples manter o ritmo em que a indústria investe na renderização de objetos. Estamos nos aproximando de um nível de realismo que quase se iguala à realidade. Apesar disso, ver o trajeto da luz ainda é uma tarefa muito custosa.
A Ubisoft fez uma grande propaganda sobre o primor gráfico de Watch_Dogs, mas não era o que podíamos ver no tratamento dos espelhos do game. Até parecia que eles estavam refletindo outra dimensão.


Revisão: Robson Júnior
Capa: Felipe Araujo
Siga o Blast nas Redes Sociais

Escreve para o GameBlast sob a licença Creative Commons BY-SA 3.0. Você pode usar e compartilhar este conteúdo desde que credite o autor e veículo original.
Este texto não representa a opinião do GameBlast. Somos uma comunidade de gamers aberta às visões e experiências de cada autor. Você pode compartilhar este conteúdo creditando o autor e veículo original (BY-SA 3.0).