E aí, galera. Só nos computer? Hoje, estou aqui para divulgar com exclusividade para vocês um conteúdo muito legal que meu amigo Alexandre Ziebert, da NVIDIA, elaborou para explicar um pouco dessa novidade chamada Ray Tracing. Fiquem ligados que em breve deve ter mais conteúdo desse tipo aqui no TecMundo e também no canal The Hardware Show.
Sabe os belos gráficos que você vê nos jogos? É tudo mentira! Uma mentira bem convincente na maioria dos casos, mas ainda assim uma mentira. Os desenvolvedores de jogos estão sempre buscando meios para nos enganar, no bom sentido, para que as imagens que vemos na tela pareçam reais. Mas, ainda assim, é tudo falso.
Os gráficos 3D que vemos nos jogos são gerados usando uma técnica conhecida como Rasterização, que faz uma projeção 2D na tela de um ambiente 3D. E existe um bom motivo para isso, é um processo rápido!
Nós gostamos que nossos jogos funcionem a 60 (ou mais ??) quadros por segundo, então performance é fundamental. Porém, o processo de Rasterização gera imagens extremamente simples. Os primeiros jogos 3D eram bem rudimentares, tanto na definição dos objetos (representados com poucos polígonos) quanto na riqueza das imagens (com métodos de iluminação, por exemplo, que alternavam entre poucos tons das mesmas cores para indicar sombreamento).
Um exemplo simplificado de como é o processo de rasterização.
Mas nós também queremos gráficos cada vez mais ricos e realistas, então “como faz”? É aqui que entra a mentira.
Com o passar dos anos surgiram técnicas cada vez mais avançadas para maquiar nossos polígonos; como, por exemplo, texturas de alta resolução, que já carregam níveis de detalhe incríveis gravados nelas mesmas. E o advento dos “shaders” programáveis permitiu um enorme salto na qualidade das imagens, pois deram muito mais controle e liberdade aos desenvolvedores para criar efeitos cada vez mais avançados.
Mas ainda é tudo falso! Os desenvolvedores ajustam esses efeitos para criar imagens bonitas e convincentes, mas volta e meia acabamos encontrando uma falha ou outra.
Filmes, por outro lado, já exibem há bastante tempo, imagens geradas com computação gráfica extremamente realistas. Revendo filmes como Exterminador do Futuro 2 ou o primeiro Jurassic Park, seus efeitos especiais são muito bons mesmo para os padrões atuais.
Como isso é possível?
Como não são interativos, nem precisam ser processados em tempo real, filmes podem utilizar uma técnica totalmente diferente para gerar suas imagens, conhecida como Ray Tracing, ou “traçado de raios”.
Em vez de “simplesmente” projetar onde os polígonos devem aparecer na tela e então aplicar efeitos para deixá-los mais bonitos; é feita uma simulação fisicamente correta do caminho percorrido por cada fóton desde sua fonte luminosa, rebatendo pelo ambiente virtual até chegar à “câmera”, e é como cada “rebote” do raio altera as características da luz que ajudará a determinar a cor final para cada pixel.
Aproveitando a ilustração, assista a essa excelente animação da Disney explicando o processo:
Como você pode imaginar, o resultado é fantástico, porém é um processo que demanda um poder de computação enorme! São necessários literalmente centenas ou milhares de computadores trabalhando em conjunto e ainda assim cada frame demora HORAS pra ser processado.
Há muito tempo sonhamos com um dia em que seria possível usar Ray Tracing em jogos. Ele é considerado o “Santo Graal” dos gráficos em tempo real, pois em vez de ter que criar efeitos cada vez mais complexos e que podem não funcionar corretamente em todos os casos (lembre, os jogos são interativos!), para tentar gerar imagens bonitas e realistas; as leis da física garantem que com Ray Tracing as imagens são geradas da mesma forma que no mundo real!
E parece que esse sonho está, finalmente, se tornando uma realidade. E o mais legal é que isso não é possível por pura virtude da potência dos processadores atuais. O sonho do Ray Tracing em tempo real está se tornando realidade graças à criatividade e ao esforço de engenheiros em diversos pontos da indústria para encontrar formas mais inteligentes de usar a técnica e o desenvolvimento de ferramentas para levar essa tecnologia aos desenvolvedores de jogos, que por sua vez as utilizam de formas inovadoras.
Recentemente a NVIDIA e a Microsoft anunciaram o DirectX Raytracing, ou simplesmente DXR; uma extensão do DirectX 12 que permite, de forma bem simples, traçar raios dentro do ambiente virtual dos jogos. Qualquer GPU compatível com DX12 pode usar o recurso, mas a parte mais interessante desse anúncio é sua integração com a tecnologia RTX da NVIDIA.
RTX é o resultado de mais de 10 anos de desenvolvimento de tecnologias, algoritmos, compiladores, otimização, etc. para acelerar o processamento de Ray Tracing. Quem trabalha com ferramentas profissionais de renderização, como as usadas na produção de filmes, já deve ter ouvido falar do RTX ou pelo menos da sua integração com Optix.
RTX é basicamente um “super acelerador de raios”, ele recebe os comandos do DXR (e em breve também do Vulkan) e faz seu traçado da forma mais rápida e eficiente possível, extraindo todo o poder das GPUs NVIDIA, tirando proveito dos seus CUDA Cores, e agora, com a arquitetura Volta, também dos Tensor Cores.
Mas isso nem é a parte mais interessante, lembra que eu falei que o uso de Ray Tracing em tempo real não era virtude do desempenho das GPUs, mas do seu uso de forma mais inteligente? Inteligência é a palavra-chave aqui, mais especificamente Inteligência Artificial!
Mesmo com o fantástico desempenho das GPUs da arquitetura Volta ainda não é possível gerar imagens usando Ray Tracing a 60 quadro por segundo, por exemplo.
Então nossos engenheiros resolveram atacar problema de outra forma. Em vez de processar milhões, bilhões de raios, nós podemos usar um número muito menor, como apenas 1 raio por pixel e usar inteligência artificial para “adivinhar” como seria a imagem final.
Uma imagem gerada usando poucos raios apresenta bastante ruído, como uma foto tirada em um ambiente com pouca luz. Mas aplicando o “AI denoiser” (um filtro de remoção de ruído baseado em Inteligência Artificial) a imagem sai nítida e limpa como se tivesse sido processada traçando milhares de raios por pixel!
Uma comparação lado-a-lado do ruído provocado pelo processamento do Ray Tracing com poucos raios e o resultado final depois de passar pelo filtro de remoção de ruído baseado em Inteligência Artificial.
Porém, mesmo com essa ajuda, ainda não é muito viável gerar toda a cena em Ray Tracing, visto que aquele “curta” do Star Wars feito em conjunto pela ILM (Industries Light and Magic, a responsável pelos efeitos especiais dos filmes), Epic (criadora do Unreal Engine) e NVIDIA precisa de quatro Teslas V100 interligadas por NVLINK para gerar seus “cinemáticos” 24fps.
Mas a dupla DRX e RTX é bem flexível e permite uma combinação de técnicas, assim os desenvolvedores podem continuar usando Rasterização no que ela faz melhor, e implementar Ray Tracing apenas em alguns efeitos, trazendo gráficos “realmente realistas” (se me permitem o pleonasmo) onde antes eram necessários truques mirabolantes para obter imagens de alta qualidade. Uma forma de “molhar os pés” antes de mergulhar de cabeça na tecnologia.
Especificamente, Ray Tracing pode ser usado de forma pontual com excelentes resultados em três áreas: sombras, “oclusão ambiental” e reflexos.
As sombras são um dos “efeitos” mais pesados de um jogo. No aspecto visual, pois dão uma sensação de atmosfera mais realista, e também é um dos recursos mais “caros” em termos de performance.
As técnicas tradicionais definem os chamados “shadow maps”, mapeando a superfície do ambiente do jogo para indicar onde deve-se escurecer mais ou menos para simular a projeção das sombras. É uma técnica que funciona bem, na maior parte do tempo, mas pode sofrer com baixa definição e falhas (alguns objetos podem simplesmente não projetar sombras).
Alternativamente, usando Ray Tracing apenas para projetar as sombras, temos um resultado fisicamente correto sem depender do tempo de processamento que seria necessário para calcular toda a cena.
O mesmo vale para Ambient Occlusion (ou “oclusão ambiental”), aquelas sombras observadas na interseção das formas dos objetos. As técnicas mais usadas são do tipo Screen Space, que usam apenas informação presente na tela como base de cálculo. Isso tem uma limitação grave: não leva em conta todas as fontes luminosas do ambiente, mas apenas as que estão dentro do ângulo de visão da câmera.
Um exemplo de oclusão ambiental usando as diferentes técnicas. Respectivamente: usando técnicas tradicionais (Screen Space), Ray Tracing usando apenas 2 raios por pixel, Ray Tracing com 2 raios por pixel + filtro de redução de ruído, e o resultado do Ray Tracing usando centenas de raios por pixel.
Um exemplo de oclusão ambiental usando as diferentes técnicas. Respectivamente: usando técnicas tradicionais (Screen Space), Ray Tracing usando apenas 2 raios por pixel, Ray Tracing com 2 raios por pixel + filtro de redução de ruído, e o resultado do Ray Tracing usando centenas de raios por pixel.
Finalmente, essa limitação de trabalhar apenas com o que existe no ambiente que a câmera vê é uma falha mortal para reflexos. Atualmente as superfícies reflexivas não podem mostrar coisas que estão fora do ângulo de visão da câmera, o que diminui bastante sua utilidade.
Usando Ray Tracing é possível mostrar reflexos de coisas que estão fora da tela, ou mesmo as “costas” de objetos e personagens que estão no quadro mas virados em direção à câmera.
Esse demo da Remedy (criadora de Alan Wake e Quantum Break) explora bastante esse aspecto, abusando de superfícies reflexivas mostrando coisas que estão fora do campo de visão da câmera.
Legal, mas até agora vimos apenas conceitos e demonstrações. Quando teremos jogos usando essas tecnologias? A resposta é: antes do que você imagina! A 4A Games, desenvolvedora da série Metro 2033, já confirmou que Metro Exodus utilizará alguns efeitos baseados em Ray Tracing, até mostraram um vídeo dos recursos funcionando dentro do jogo:
Outros jogos com lançamento próximo devem anunciar suporte a essas tecnologias muito em breve (E3?).
E para facilitar a vida dos desenvolvedores, a NVIDIA vai disponibilizar bibliotecas GAMEWORKS para criar sombras, oclusão ambiental e reflexos utilizando Ray Tracing. Mais informações sobre essas ferramentas podem ser encontradas no site de Desenvolvedores da NVIDIA e uma demonstração está disponível neste vídeo:
Concluindo. O antigo sonho distante de poder utilizar Ray Tracing em jogos finalmente está se tornando uma realidade. E isso graças não só ao aumento no poder computacional das GPUs (ainda que isso ajude bastante), mas também à criatividade dos engenheiros e desenvolvedores em procurar formas mais inteligentes de usar a técnica.
Nós (jogadores) somos beneficiados com jogos mais bonitos e realistas, e os desenvolvedores também pois essas técnicas são relativamente simples de implementar e trazem resultados fisicamente corretos, enquanto os efeitos tradicionais estão se tornando cada vez mais complexos e ainda não trazem resultados perfeitos.
Estamos diante de uma profunda mudança nos jogos e, além dos recursos que comentamos aqui, estamos ansiosos para ver outros usos criativos que os desenvolvedores devem criar daqui pra frente.
Texto por Alexandre Ziebert | Gerente de Marketing Técnico da NVIDIA para a América Latina
Categorias