Ray tracing nos videojogos – As diversas metodologias

Ray tracing, raymarching, raycasting, path tracing e Backwards Ray Tracing… nomes diferentes… resultados diferentes, mas todos semelhantes! O que são e o que os distingue?

Raytracing, raymarching, raycasting, path tracing e Backwards Ray Tracing são maneiras/metodologias diferentes de renderizar objetos em um espaço 3D.

Apesar de serem processos mais lentos por serem altamente pesados a nível de computação que o procedimento raster tradicional, eles têm a vantagem de serem capazes de fazer iluminação, reflexos, sombras, e outros, com um nível de precisão e resultados foto realistas que a tecnologia Raster não consegue obter de forma simples.

No fundo o principio básico de todos é equivalente. Obter uma direção de raio normalizada a partir de uma posição 2d no ecrã, e usando a posição da câmara, determinar se o raio se cruza com algum objeto.

Estas são técnicas complexas, mas que iremos aqui tentar explicar de uma forma muito simplificada em que consistem e o que as distingue. Será de se referir que todas estas técnicas podem ser meramente denominadas de Ray Tracing, mas aqui para este artigo esse termo será reservado  à metodologia mais complexa e completa de todas.



O que é Raycasting?

O Ray casting é uma forma simplista de Raytracing, mas que é no entanto altamente pesada a nível de computação.

Esta metodologia basicamente consiste em lançar um raio e avançando com ele pouco a pouco, indo verificando se ele intercepta algum objeto, parando o mesmo após ser detectada uma colisão.

Aqui os raios não possuem a capacidade de refletirem e ou se dividirem, sendo que morrem após detectada a colisão, pelo que os resultados são bastante mais básicos que num Raytracing como o conhecemos. O que pesa aqui é que esta metodologia obriga à constante verificação da intercepção com objectos, o que torna a metodologia muito pouco desejável, especialmente porque os seus resultados são bastante básicos.

Como referido, com esta metodologia, o raio “morre” no momento da colisão, não havendo lugar a cálculo de reflexos ou divisão de raios.

O que é o Ray Tracing?



O Raytracing é a metodologia mais complexa existente para o calculo de luz, reflexos, refrações e sombras. Basicamente é a simulação do que acontece na vida real, com os raios a partirem da fonte de luz e a sofrerem refrações e reflexões nos objetos que encontram pelo caminho.

O termo certamente já todos o ouviram dado este estar em voga quando se fala nos jogos mais recentes, sendo então um processo que de renderização baseado no lançamento de raios a partir das fontes de luz.

Mas entre aquilo que é o Raytracing, e que acontece no Raytracing que temos nos jogos há uma diferença muito grande.

E esta é a parte mais complexa de ser explicada sem que a coisa se torne confusa! Mas vamos tentar!

Basicamente o Ray Tracing tem como objetivo simular o que acontece com a luz na realidade. Uma situação que implica o envio de um número que se pode considerar quase infinito de raios que vão sofrer um processo de transformação, reflexão e refração quando entram em contacto com os objectos. Isso implica mudanças de propriedades e mesmo a divisão dos raios em vários.



O que acontece é que nenhum sistema atual é capaz de calculo deste tipo de Raytracing! E o que eles usam, apesar de realista a nível visual são sempre metodologias simplificadas uma vez que o número de raios que um GPU consegue processar, face aos quase infinitos raios existentes na realidade, são sempre um valor pequeníssimo.

Daí que com um numero limitado de raios, há que se proceder a metodologias simplificadas. E temos então de distinguir a metodologia chamada Ray Tracing do que é o Ray Tracing efetuado pelo GPU (e todos estes métodos deste artigo são, no fundo, Ray Tracing), pelo que a maior distinção surge quando se usa a metodologia completa de Ray tracing, mas realizada com um número limitado de raios!

Mas no que toca à metodologia, para o caso que já referimos aqui, o Ray Casting, a grande diferença que temos é que no processamento do Raytracing, é feito o calculo imediato das interseções com objetos a partir de um vetor de raio e a sua respetiva posição. Ou seja, ao contrário do Raycasting não temos de andar a acompanhar o raio e a verificar constantemente se ele bateu em alguma coisa.

E aqui, dado que a ideia é simular o Raytracing real, o raio não morre quando bate, podendo refletir ou até dividir-se, sendo que a técnica de processamento do Raytracing acompanha todo o desenvolvimento do raio até um determinado número de reflexos (caso existam).

Esta técnica de cálculo é, por esse motivo, a que melhores resultados oferece, podendo ser, igualmente de todas a mais rápida a nível de calculo.



Será porém desde já relevante deixar a nota que o processamento do Ray Tracing nos jogos, apesar de seguir todas as regras da luz real, tem um pequeno senão, uma burlice, destinada a ganhar performance e melhorar a densidade de raios nas partes que interessam. Mas vamos por partes!

O relevante para já é perceber-se que esta metodologia distingue-se da metodologia anterior por usar um método mais completo, e onde é determinada de forma imediata a intercepção do raio com um objeto. Mais ainda, aqui o raio não “morre” forçosamente na colisão, podendo continuar ou mesmo dividir-se, alterando as propriedades, em caso de reflexo ou refração.

O que é Ray Marching?

Mais uma vez é uma outra metodologia simplificada de cálculo de Raytracing.

Como vimos em cima, os jogos, apesar de usarem o termo Raytracing, estão limitados no número de amostras de luz que podem fazer, o que implica que podem ter limitações no apresentado.



Este método surgiu assim com o intuito de superar algumas dessas limitações que acontecem em casos especiais.

Assim, aqui não se calcula imediatamente a interseção do raio com o objeto, mas analisa-se parte do seu percurso (marcha) usando funções de distância ao objeto. Basicamente, com este método calcula-se a distância mais próxima a cada objeto e depois recua-se alguma distancia, obtendo o que se chama de distância “segura” (Basicamente a distância onde é possível haver movimento em torno do objeto, sem se entrar dentro deste), processando o resultado aqui. O processo depois repete-se avançando na direção do objeto até estarmos dentro do mesmo.

Esta metodologia permite que, com um número limitado de raios se consiga lidar mais facilmente com objetos de morfologia variável, calculando sombras, reflexos e refrações interiores E isto pelo facto que se analisa a luz desde o limite de rotação sem intercepção do objeto, até ao momento da colisão e não apenas nos pontos de colisão.

Infelizmente, este processo, por ter mais etapas, acaba por ser mais lento para o GPU do que a metodologia normal do Ray Tracing, com o seu limite de raios (apesar de mais rápido que um Ray Caster), tendo porém a vantagem que simplifica bastante a manipulação de luz em objetos com morfologia variável.

Pelo facto de trabalhar com distancias diversas e passos, o Raymarching permite ainda facilmente calcular a superfície normal em qualquer ponto de um objecto, e encontrar interseções com estes com muito mais facilidade. Basicamente, o controlo sobre a qualidade renderização sobre objetos com morfologia variável acaba por ser bastante superior que no Ray Tracing com limite de raios usado pelos atuais GPUs.



No entanto é relevante perceber-se que o Ray Marching só se revela superior ao Ray Tracing exatamente pelas limitações no número de raios que temos. Mas sem qualquer limite, ou com valores de raios que não sejam considerados limitativos, o Ray Marching não faz qualquer sentido.

Mas mesmo agora, este só tem interesse e só se revela superior se aplicado a objetos de morfologia variável onde as alterações na mesma altera as sombras e luz quer da interior, quer dos objetos afetados pelos reflexos no mesmo. A questão é que nos jogos a Geometria normalmente é estática, pelo que esta não é uma técnica cujo nome ouçamos muitas vezes.

O que é o Path Tracing?

Quando alguém fala em Path Tracing, a ideia que se passa é que estamos perante algo bastante pesado para um computador, e consequentemente a metodologia de Ray Tracing mais complexa que existe. E isso é completamente errado!

Como explicamos em cima o Ray tracing é a metodologia mais complexa, e nada a supera. Agora o que sabemos é que os GPUs não conseguem fazer um real Ray Tracing, pois tem limites nos raios que podem usar.



E é por isso que surge o path tracing que não é mais do que uma optimização ao Ray Tracing destinada a evitar divisões constantes dos raios existentes no Ray tracing, que se podem prolongar até ao infinito, usando uma aproximação estocástica com um algoritmo Monte Carlo. Basicamente aqui o raio quando é para se dividir, é escolhido apenas um dos ramos da divisão, que é calculado, sendo os resultados misturados sobre o resultado do raio original.

Quer isto dizer que o Path Tracing na realidade simplifica o Ray Tracing, sendo mais leve do que ele.

Mas então porque se passa a imagem que o Path Tracing é mais pesado?

Bem, como dissemos, o Ray Tracing é demasiadamente pesado para os sistemas atuais. E isso implica que se trabalhe com um número limitado de raios. A grande questão é que com um universo infinito de raios a existirem na realidade, os raios que o GPU lança, na teoria, podem todos calhar em zonas que não possuem qualquer impacto na iluminação da cena no local onde quem visualiza se encontra. E isso quer dizer que, para garantir que os raios usados são efetivamente todos uteis, os jogos não usam realmente Ray Tracing, mas aplicam-lhe uma pequena aldrabice, para garantir que todos os raios vão calcular a luz nas zonas que realmente interessam.

E para abordar isso vamos ter de explicar uma outra metodologia: O Backwards Ray Tracing!



Backwards Ray Tracing

Como explicado antes, a metodologia de renderização mais pesada que existe é o Ray Tracing, sendo o Path Tracing na realidade uma forma simplificada de optimizar e melhorar o rendimento do Ray Tracing.

Mas se lermos artigos sobre os jogos é comum ouvirmos dizer que estes usam Ray Tracing sem problemas, bem como também ouvimos que o Path Tracing é considerado como demasiadamente pesado, passando-se assim a ideia que o Path Tracing é mais pesado que o Ray Tracing.

A questão que não é dita é que, na realidade, a metodologia de calculo efetuada pelos GPUs não é a de Ray Tracing, mas sim a de Backwards Ray Tracing, também conhecido como Eye Tracing!

Qual a diferença Para a metodologia normal de Ray Tracing? Bem… é grande!



Como referido, No Ray Tracing, os raios são lançados da fonte de luz para o cenário, sendo calculada a iluminação. O problema desta situação é que quem visualiza a cena vai apenas visualizar os raios cujo destino final chega aos seus olhos (ou câmera, no caso dos jogos). E como já referi, no Ray Tracing os raios vão para todos os lados, podendo, em teoria, nenhum chegar aos olhos do utilizador dado que o numero de raios é limitado. Ou seja, dado que os raios lançados podem ter infinitos destinos, acabando por não serem visualizados, há que se impedir que isso aconteça.

E devido a tal, nasceu o Backwards RayTracing Ou Eye Tracing. E ele distingue-se do Ray Tracing pelo facto que ali os raios são triados, verificando-se quais são os que chegam à câmara/olho, e somente esses sofrem todo o processo de calculo de interseções e refração. Basicamente, para garantirmos isto, os raios são tratados como se em vez de partirem da fonte de luz em direção à câmara/olho, partissem da câmara/olho em direção à fonte de luz. E daí o nome!

E esta situação não só permite que se reduza o número de raios processados no Ray Tracing para se ter apenas os que realmente interessam a quem visualiza, como otimiza todo o processo garantindo que não se calculam raios inúteis, e que os raios passiveis de serem processados são todos aproveitados.

Curiosamente há quem chame Path Tracing ao Backwards Ray Tracing (A Disney por exemplo), pelo facto que, como os raios são selecionados e são os que vão parar ao olho/câmara, no fundo são raios cujo percurso (path) já foi selecionado. Mas no entanto, para este caso, esse nome aqui só serve para confundir uma vez que nada tem a ver com o Path Tracing aqui abordado!

Ora o que acontece é que esta situação, apesar de adequada, torna o processo de Ray Tracing mais leve do que o Ray Tracing normal (Também denominado, devido a esta situação, de Forward Ray Tracing :D).



O que isto quer dizer é que na realidade os GPUs não calculam usando a metodologia de Ray Tracing pois esta é a metodologia mais pesada de todas. Elas calculam usando um Backwards Ray Tracing!

Dessa forma, com os limites que possuem, o mais perto do Ray Tracing que os atuais GPUs conseguem é usar a simplificação de redução de raios que é o Path Tracing. Que fica, para já, e até os GPUs evoluírem muito mais, como a metodologia mais pesada que se pode implementar.

Diferenças – Resumo

Falando só de metodologias, a denominada Raytracing é uma metodologia onde a renderização salta diretamente para o ponto e cruzamento com um objeto. Já no Raymarching fazermos um movimento, ou marcha, em direcção a um objecto, usando estimativas de distância, e o Raycasting como um movimento mais completo, onde andamos um passo de cada vez.

No Ray casting não há divisão de raios na reflexão ou refração, pelo que o Ray Marching só se revela interessante perante a presença de objetos com morfologia variável (e perante os atuais grandes limites no numero de raios que podemos lançar).

O path tracing é um Ray tracing onde o numero de divisões de raios que aparecem nos reflexos é simplificado e limitado, sendo por isso um Ray Tracing mais limitado, mas a metodologia passível de ser aplicada atualmente que é mais aproximada dos resultados de um Ray Tracing completo.



Mas dado que nos jogos não podemos fazer ainda um Ray Tracing completo e com o Path Tracing a ser bastante pesado, a metodologia usada é o Backwards Ray Tracing, onde apenas os raios cuja trajetória termina na zona de visão da câmara/olho, são calculados.

Mas que fique claro que o Path Tracing não é a metodologia de rendering mais pesada e complexa. Essa é o Ray tracing, mas dado o limite nos raios que podemos lançar, esse é algo ainda inacessível aos atuais sistemas informáticos.

Confusos? É natural pois o termo Ray Tracing é usado de forma demasiadamente livre… mas espero que este artigo elucide um pouco a situação do Ray Tracing nos videojogos.



7 Comentários
Antigos
Recentes
Inline Feedbacks
Ver todos os comentários
Juca
Juca
18 de Abril de 2024 12:35

Custa-me, tecnicamente, entender um pouco porque o RT nos consoles não costuma trazer iluminação, sombras e reflexão ao mesmo tempo, sendo que usam os raios já calculado em quantidade e comprimento, óbvio que sei que tudo tem mais custo no processamento, e que não se calcula toda a luz de um universo construído, e sim apenas daquilo “em frente as câmeras” (ou de um campo visual bem mais restrito) e com isso, se perdendo principalmente informações de reflexões de luz e influência de luz de uns corpos sobre outros… mas se a função dos raios é calcular justamente isso e eles já estão lá, fica parecendo sempre que o o RT dos consoles morre ao colidir com algum objeto, salvo nos casos de reflexos, me custa entender como após os raios já serem calculados ainda apelam a sombras, ou mesmo iluminação geral de gerações anteriores em conjunto com RT, mas enfim, é se dar com isso já que cada vez o processamento parece só aumentar no marketing e a evolução parece ter cada vez ficado mais lenta, quem sabe num PS8… Lol

Last edited 6 meses atrás by Juca
Juca
Juca
Responder a  Mário Armão Ferreira
18 de Abril de 2024 14:04

Mário, você que é alguém mais envolvido com a questão de engenharia computacional, saberia dizer se há algum estudo que sugira qual seria o poder computacional mínimo necessário (cpu, gpu e memórias) pra que deixemos de se preocupar com essas questões técnicas e termos uma computação com RT em tempo real, sem nos preocupar em limitar as técnicas de RT em uma situação de cenário visual médio (um ambiente 3D limitado e com um número razoável de objetos) em uma resolução como 1080p, por exemplo? Claro, me refiro a condição do software atual, pois sei que tudo evolui junto, não sendo só uma questão de hardware.

Last edited 6 meses atrás by Juca
Hennan
Hennan
18 de Abril de 2024 19:32

Na minha opinião RT está sendo utilizado da maneira errada. Quando foi lançado a expectativa era ser uma opção a rasterização. Uma alternativa mais fácil de aplicar em alto nível, mas com custo de performance muito elevado. Logo deveria ficar restrito a estúdios menores ou jogos mais simples. No entanto, foram os estúdios maiores que utilizaram isso para reduzir o tempo de produção. O que não trouxe nenhum ganho ao consumidor. Hoje temos games com performance sofrível e que pouco elevaram a qualidade geral da imagem.

Juca
Juca
Responder a  Hennan
18 de Abril de 2024 20:35

Isso é uma verdade, Hennan, quando se olha pra coisas como Red Dead 2, God of War Ragnarok, Horizon Forbidden West… Vemos que é mais uma questão quem vem pra agregar, mas que pode ter resultados bem satisfatórios com técnicas mais tradicionais. Agora, é complicado que mesmo que servisse a encurtamento de tempo de produção a coisa ainda esteja demorando pra mais de 3 anos com grandes equipes envolvidas, assim, fica difícil sustentar o negócio.

error: Conteúdo protegido