Nosso guia completo para ray tracing em tempo real, o próximo grande salto no processamento gráfico
A Nvidia tem sido quase obstinada em seu esforço para aumentar a adoção da tecnologia de rastreamento de raios, e vários desenvolvedores de jogos e criadores de mecanismos estão atendendo ao chamado . Uma atualização de driver que permite o suporte a ray tracing em placas GTX significa que milhões de consumidores e algumas das melhores placas gráficas foram adicionados ao grupo teórico de adotantes de ray tracing. Simultaneamente, o número de jogos para aproveitar o ray tracing está começando a se expandir muito além do que estava disponível logo após o lançamento da série RTX.
Ao tentar explicar uma tecnologia de renderização relativamente complexa para os não iniciados, é tentador simplificar demais, especialmente se você for responsável por comercializar e vender essa tecnologia. Mas uma explicação básica do que é o ray tracing e como ele funciona tende a encobrir algumas de suas aplicações mais importantes – incluindo algumas das que estão posicionando o ray tracing para ser a próxima grande revolução em gráficos.
Queríamos nos aprofundar não apenas no que o ray tracing realmente é, mas também detalhar técnicas específicas de ray tracing e explicar como elas funcionam e por que são importantes. O objetivo não é apenas entender melhor por que o ray tracing é importante e por que a Nvidia o defende tanto, mas também mostrar como identificar as diferenças entre cenas com e sem ray tracing e destacar exatamente por que as cenas com ele ativado parecem melhorar.
Uma breve cartilha sobre computação gráfica e rasterização
Criar uma simulação virtual do mundo ao seu redor que pareça e se comporte adequadamente é uma tarefa incrivelmente complexa – tão complexa que nunca tentamos fazer isso. Esqueça por um momento coisas como gravidade e física e apenas pense em como vemos o mundo. Um número efetivamente infinito de fótons (feixes de luz) circulam, refletindo em superfícies e passando por objetos, tudo baseado nas propriedades moleculares de cada objeto.VÍDEOS RECOMENDADOS PARA VOCÊ…PERTOhttps://imasdk.googleapis.com/js/core/bridge3.512.0_debug_pt.html#goog_17682640280 seconds of 30 secondsVolume 0% TOCAR MÚSICA
Tentar simular o ‘infinito’ com um recurso finito como o poder computacional de um computador é uma receita para o desastre. Precisamos de aproximações inteligentes, e é assim que a renderização gráfica moderna (em jogos) funciona atualmente.
Chamamos esse processo de rasterização e, em vez de olhar para objetos, superfícies e fótons infinitos, ele começa com polígonos – triângulos, especificamente. Os jogos passaram de centenas para milhões de polígonos, e a rasterização transforma todos esses dados em quadros 2D em nossas telas.
Envolve muita matemática, mas a versão curta é que a rasterização determina qual parte da tela cada polígono cobre. De perto, um único triângulo pode cobrir toda a tela, enquanto se estiver mais longe e visto em um ângulo, pode cobrir apenas alguns pixels. Uma vez que os pixels são determinados, coisas como texturas e iluminação também precisam ser aplicadas.
Fazer isso para cada polígono de cada quadro acaba sendo um desperdício, pois muitos polígonos acabam ficando ocultos (ou seja, atrás de outros polígonos). Ao longo dos anos, as técnicas e o hardware melhoraram para tornar a rasterização muito mais rápida, e os jogos modernos podem pegar milhões de polígonos potencialmente visíveis e processá-los a taxas incríveis.
Passamos de polígonos primitivos com fontes de luz ‘falsificadas’ (por exemplo, o Quake original), para ambientes mais complexos com mapas de sombras, sombras suaves, oclusão de ambiente, tesselação, reflexos no espaço da tela e outras técnicas gráficas tentando criar uma melhor aproximação de como as coisas deveriam ser. Isso pode exigir bilhões de cálculos para cada quadro, mas com GPUs modernas capazes de processar teraflops de dados (trilhões de cálculos por segundo), é um problema tratável.
O que é traçado de raios?
Ray tracing é uma abordagem diferente, proposta pela primeira vez por Turner Whitted em 1979 em “An Improved Illumination Model for Shaded Display” ( versão em PDF online ). Turner descreveu como calcular recursivamente o traçado de raios para obter uma imagem impressionante que inclui sombras, reflexos e muito mais. (Não por coincidência, Turner Whitted agora trabalha para a divisão de pesquisa da Nvidia.) O problema é que fazer isso requer cálculos ainda mais complexos do que rasterização.Propaganda
O rastreamento de raios envolve traçar o caminho de um raio (um feixe de luz) dentro de um mundo 3D. Projete um raio para um único pixel no mundo 3D, descubra em qual polígono esse raio atinge primeiro e depois pinte-o adequadamente. Na prática, são necessários muito mais raios por pixel para obter um bom resultado, pois uma vez que um raio cruza um objeto, é necessário calcular as fontes de luz que poderiam atingir aquele ponto no polígono (mais raios), além de calcular os raios adicionais com base na propriedades do polígono (é altamente refletivo ou parcialmente refletivo, qual é a cor do material, é uma superfície plana ou curva, etc.).
Para determinar a quantidade de luz que incide em um único pixel de uma fonte de luz, a fórmula de rastreamento de raios precisa saber a que distância a luz está, quão brilhante ela é e o ângulo da superfície refletora em relação ao ângulo da fonte de luz. , antes de calcular o quão quente o raio refletido deve ser. O processo é então repetido para qualquer outra fonte de luz, incluindo iluminação indireta da luz refletida em outros objetos na cena. Os cálculos devem ser aplicados aos materiais, determinados por seu nível de refletividade difusa ou especular – ou ambos. Superfícies transparentes ou semitransparentes, como vidro ou água, refratam os raios, acrescentando mais dores de cabeça de renderização, e tudo tem necessariamente um limite de reflexão artificial, porque sem um, os raios podem ser rastreados até o infinito.Imagem 1 de 6
O algoritmo de ray tracing mais usado, de acordo com a Nvidia, é o BVH Traversal: Bounding Volume Hierarchy Traversal. É isso que a API DXR usa e é o que os núcleos RT da Nvidia aceleram. A ideia principal é otimizar os cálculos da interseção raio/triângulo. Faça uma cena com milhares de objetos, cada um com potencialmente milhares de polígonos, e tente descobrir quais polígonos um raio intercepta. É um problema de pesquisa e levaria muito tempo para força bruta. O BVH acelera isso criando uma árvore de objetos, onde cada objeto é cercado por uma caixa.
A Nvidia forneceu o exemplo acima de um raio cruzando um modelo de coelho. No nível superior, uma BVH (caixa) contém o coelho inteiro, e um cálculo determina que o raio cruza essa caixa – se não o fizer, não será necessário mais trabalho nessa caixa/objeto/BVH. Como houve uma interseção, o algoritmo BVH obtém uma coleção de caixas menores para o objeto interceptado – neste caso, ele determina que o raio em questão atingiu o objeto coelho na cabeça. Traversais adicionais de BVH ocorrem até que, eventualmente, o algoritmo obtenha uma pequena lista de polígonos reais, que ele pode verificar para determinar qual polígono de coelho o raio atinge.Propagandahttps://ff3a19043316c9a9b49096d06851625e.safeframe.googlesyndication.com/safeframe/1-0-38/html/container.html
Esses cálculos de BVH podem ser feitos usando software executado em uma CPU ou GPU, mas o hardware dedicado pode acelerar as coisas em uma ordem de magnitude. Os núcleos RT nas placas RTX da Nvidia são apresentados como uma caixa preta que pega a estrutura BVH e um raio, percorre todo o trabalho sujo e cospe o resultado desejado do qual (se houver) polígono foi intersectado.
Esta é uma operação não determinística, o que significa que não é possível dizer precisamente quantos raios podem ser calculados por segundo – isso depende da complexidade da cena e da estrutura BVH. O importante é que os núcleos RT da Nvidia podem executar o algoritmo BVH cerca de dez vezes mais rápido que seus núcleos CUDA, que por sua vez são potencialmente dez vezes (ou mais) mais rápidos do que fazer o trabalho em uma CPU (principalmente devido ao número de núcleos de GPU comparado aos núcleos da CPU).
Quantos raios por pixel são ‘suficientes’? Varia – uma superfície plana e não reflexiva é muito mais fácil de lidar do que uma superfície curva e brilhante. Se os raios saltarem entre superfícies altamente refletivas (por exemplo, um efeito de salão de espelhos), centenas de raios podem ser necessários. Fazer o rastreamento de raios completo para uma cena pode resultar em dezenas ou mais cálculos de raios por pixel, com melhores resultados obtidos com mais raios.
Apesar da complexidade, quase todos os grandes filmes atualmente usam ray tracing (ou path tracing) para gerar imagens de computador altamente detalhadas. Um filme completo de 90 minutos a 60 fps exigiria 324.000 imagens, e cada imagem potencialmente leva horas de tempo computacional. Como os jogos podem fazer tudo isso em tempo real em uma única GPU? A resposta é que eles não vão, pelo menos não com a resolução e qualidade que você pode ver em um filme de Hollywood.
Insira a renderização híbrida
O hardware de computação gráfica tem se concentrado em fazer rasterização mais rapidamente há mais de 20 anos, e designers e artistas de jogos são muito bons em produzir resultados impressionantes. Mas certas coisas ainda apresentam problemas, como iluminação adequada, sombras e reflexos.
A renderização híbrida usa tecnologias tradicionais de rasterização para renderizar todos os polígonos em um quadro e, em seguida, combina o resultado com ray-tracing onde faz sentido. O ray tracing acaba sendo menos complexo, permitindo taxas de quadros mais altas, embora ainda haja um equilíbrio entre qualidade e desempenho. A projeção de mais raios para uma cena pode melhorar o resultado geral ao custo das taxas de quadros e vice-versa.
Para entender melhor como o ray tracing realiza a leveza visual que faz e o custo computacional envolvido, vamos nos aprofundar em algumas técnicas específicas de RT e explorar sua relativa complexidade.
Reflexões
Técnicas anteriores de espelhamento e reflexão, como Screen Space Reflections (SSR), tinham várias deficiências, como não conseguir mostrar objetos que não estão no quadro ou que estão sendo parcial ou totalmente ocluídos. As sombras rastreadas por raios funcionam no mundo 3D completo, não apenas no que é visível na tela, permitindo reflexões adequadas.
Uma versão simples de fazer reflexões traçadas por raios foi originalmente empregada no Battlefield 5. Uma vez que um quadro fosse renderizado, um raio por pixel seria usado para determinar qual reflexão (se alguma) deveria ser visível. No entanto, muitas superfícies não eram refletivas, então isso resultou em muito trabalho em excesso. O algoritmo BF5 otimizado só calcula raios para pixels em superfícies refletivas, e superfícies parcialmente refletivas usam um raio por dois pixels.
Como muitas superfícies não são refletivas, o efeito geralmente é menos dramático, mas também é mais barato em termos de poder de processamento. Computacionalmente, fazer ray tracing em reflexões requer pelo menos um raio por pixel reflexivo, possivelmente mais se os saltos forem simulados (o que não é o caso em BF5). A demo de Reflections com Unreal Engine apresenta tropas de assalto em armaduras brancas polidas e prata espelhada em um corredor e elevador com fontes de luz complexas. Isso requer mais raios e poder computacional, o que explica por que uma única RTX 2080 Ti gerencia apenas 54fps em 1080p, comparado a 85fps em 1080p em BF5.
Sombras
Assim como os reflexos, existem várias maneiras de abordar a simulação de sombras com o traçado de raios. Uma implementação simples de entender de sombras ray traced requer a projeção de um raio por fonte de luz de cada superfície de pixel. Se o raio cruzar um objeto antes de atingir a fonte de luz, esse pixel será mais escuro. A distância da fonte de luz, o brilho da luz e a cor da iluminação são levados em consideração.
Isso é apenas a ponta do iceberg, no entanto. O rastreamento de raios oferece aos desenvolvedores uma ampla paleta de ferramentas para renderizar sombras, desde técnicas simples como a que descrevi até métodos realmente complexos que se aproximam extremamente da nossa percepção do mundo real. A implementação de ray tracing em Shadow of the Tomb Raider (que veio em um patch pós-lançamento muito atrasado) é um ótimo exemplo da amplitude e profundidade das opções.
Existem muitos tipos potenciais de fontes de luz: as luzes pontuais são pequenas fontes de luz omnidirecionais, como velas ou lâmpadas individuais. Sombras de holofotes retangulares, como letreiros de néon ou janelas, se comportam de maneira diferente. Eles emitem luz de uma área maior, e as sombras resultantes têm uma penumbra fortemente difusa (a área na borda de uma sombra que geralmente é mais clara que o interior escuro). Luzes direcionais, incluindo holofotes, lanternas e o sol, projetam luz apenas em determinadas direções.
O Ray Tracing é capaz de projetar sombras de forma realista através de superfícies diáfanas, como tecidos transparentes ou as próprias bordas das folhas. O efeito geral são sombras mais suaves e precisas com penumbras complexas e amorfas. O efeito é extremamente convincente quando você o vê lado a lado com as bordas duras da era do mapeamento de sombras, como na imagem acima.Propagandahttps://ff3a19043316c9a9b49096d06851625e.safeframe.googlesyndication.com/safeframe/1-0-38/html/container.html
Oclusão de ambiente
A oclusão de ambiente é uma categoria muito específica de renderização de sombra, uma tentativa de duplicar as sombras acinzentadas que vemos nos cantos, fendas e nos pequenos espaços dentro e ao redor dos objetos. Ele funciona traçando uma série de raios muito curtos dentro de uma área, em uma espécie de nuvem ao seu redor, e determinando se eles se cruzam com objetos próximos. Quanto mais cruzamentos, mais escura a área. Na verdade, é uma técnica bastante barata precisamente porque os raios só precisam ser testados contra objetos locais, então as árvores BVH são muito menores e mais fáceis de processar.
O grupo SEED da EA criou a demonstração do Pica Pica usando DXR (DirectX Ray Tracing) e, a certa altura, mostra a diferença entre SSAO (screen space ambient occlusion, a solução pré-RT mais comum) e RTAO (ray traced ambient occlusion). Não é que SSAO pareça ruim, mas RTAO parece melhor.
Cáusticos
Cáusticos são o resultado da luz sendo refletida ou refratada por superfícies curvas – imagine as ondas cintilantes de um corpo de água ativo em um dia claro, ou o envelope de luz em uma mesa quando o sol do meio-dia brilha através de um copo de água. Há uma demonstração RTX para o MMO chinês Justice que mostra reflexos de água cáustica com grande efeito, mostrado acima.
Os cáusticos são calculados de forma semelhante às reflexões padrão de traçado de raios. Os raios são gerados e os lugares onde eles interagem com uma superfície são anotados, e as reflexões e refrações são desenhadas de acordo. Os cáusticos são então acumulados no buffer de espaço da tela e eliminados/embaçados antes de serem finalmente combinados com a iluminação da cena. Embora os cáusticos de superfície não sejam tão intensivos em processamento, os cáusticos volumétricos, como quando a luz solar é refletida pela superfície de um corpo de água na água e depois é refletida ou refratada por partículas de lodo ou outros objetos, podem ficar muito mais caras .
Iluminação global
A técnica de rastreamento de raios mais intensiva, a iluminação global lança raios por pixel em uma cena inteira e atualiza dinamicamente para acomodar mudanças sutis na iluminação. Embora o nome possa fazer você pensar em algo semelhante a sombras, a iluminação global é realmente mais sobre iluminação indireta.
Imagine um quarto escuro onde uma janela fechada é aberta. Essa janela não ilumina apenas um pequeno retângulo na parede e no chão – a luz reflete nas superfícies e toda a sala fica mais brilhante. A iluminação global lança uma rede complexa de raios, refletindo-os ao redor de uma cena e gerando raios adicionais para ajudar a iluminar uma cena.
Propagandahttps://ff3a19043316c9a9b49096d06851625e.safeframe.googlesyndication.com/safeframe/1-0-38/html/container.html
Metro Exodus usa rastreamento de raios GI, que é parte do motivo pelo qual o impacto no desempenho pode ser tão substancial. Dependendo da cena, o efeito pode ser bastante notável (por exemplo, em uma sala mal iluminada com uma janela), enquanto em outras cenas (por exemplo, do lado de fora) não importa tanto. Mas mesmo quando não muda necessariamente a aparência de uma cena, é tipicamente mais computacionalmente intensivo do que os reflexos usados em Battlefield 5 ou os processos de sombra avançados em Tomb Raider.
Mesmo sem ray tracing, o Metro Exodus pode punir hardware gráfico modesto. Mas com o ray tracing, o Metro se torna um Crysis moderno em termos de fidelidade visual e o novo titã contra o qual as GPUs novas e de ponta são medidas.
Usando denoising e IA para melhorar o desempenho
Se você observar os exemplos acima de ray tracing em jogos, verá que a maioria dos jogos atualmente implementa apenas um ou dois efeitos de ray tracing. BF5 tem reflexos, SotTR tem sombras e Metro tem GI. Em um mundo ideal onde os jogos colocam o ray tracing em pleno efeito, gostaríamos de todos esses efeitos e muito mais! Isso tende a estar fora do alcance das GPUs atuais, no entanto, pelo menos se você espera taxas de quadros mais altas.
No entanto, existem maneiras de reduzir a complexidade. Uma abordagem simples é traçar menos pixels. Isso pode ser feito de um desses dois jeitos. O algoritmo DLSS da Nvidia permite que um jogo que implemente a tecnologia seja renderizado em uma resolução mais baixa (digamos, metade dos pixels) e, em seguida, use a IA para aumentar o resultado enquanto remove os jaggies. Não vai ser perfeito, mas pode estar perto o suficiente para não importar muito.
Uma segunda maneira de reduzir o número de raios não diminui a resolução. A técnica é chamada de denoising, e a ideia básica é lançar menos raios e usar algoritmos de aprendizado de máquina para preencher as lacunas. Denoising já está se tornando um grampo de rastreamento de raios de ponta em filmes, com a Pixar e outras empresas colocando a técnica em bom uso. A Nvidia também fez muitas pesquisas sobre denoising e, embora não esteja claro exatamente como está sendo usado nos jogos, provavelmente há muito potencial inexplorado.https://www.youtube.com/embed/KJRZTkttgLw
Bem-vindo ao futuro dos gráficos
Grandes nomes em renderização entraram na onda do ray tracing, incluindo Epic e seu Unreal Engine, Unity 3D e Frostbite da EA. A Microsoft se uniu a empresas de hardware e desenvolvedores de software para criar a API DirectX Ray Tracing (DXR) totalmente nova, com base na estrutura DX12 existente. O rastreamento de raios de alguma forma sempre foi um alvo para gráficos de computador em tempo real, e agora estamos substancialmente mais próximos desse fim de jogo. (Desculpe, Vingadores.)
Embora as GPUs da série RTX 20 da Nvidia sejam a primeira implementação de aceleração de ray tracing dedicada em hardware de consumo, as futuras GPUs provavelmente dobrarão ou quadruplicarão o desempenho do ray tracing. É impossível dizer até onde isso vai.
Basta olhar para a última década de GPUs. A primeira GPU da Nvidia com núcleos CUDA foi a 8800 GTX, com 128 núcleos CUDA no final de 2006. 13 anos depois, temos GPUs quase 40 vezes mais núcleos CUDA, e cada núcleo tornou-se significativamente mais poderoso também.
O ray tracing completo em tempo real para cada pixel não é realmente prático hoje no RTX 2080 Ti, mas a indústria gráfica vem se movendo nessa direção há anos. Teremos GPUs em 2030 com milhares de núcleos de ray tracing? Não apostaríamos contra isso.
Toda a conversa sobre como o ray tracing é o futuro da renderização gráfica pode parecer exagerada quando você pensa nisso em termos de sombras e reflexos simples, mas a realidade é que a modelagem precisa da luz é a base para imitar o mundo real. Nossa percepção é totalmente moldada pela luz, desde o nível mais simples de determinar o quanto e quais partes do nosso ambiente são visíveis para nós até as complexidades mais sutis de cor e sombra que o olho humano é capaz de processar.
É um problema difícil, sem dúvida. Mas se esperamos chegar mais perto do holodeck de Star Trek ou do Ready Player One Oasis, o caminho está claro. Nesse contexto, o ray tracing realmente parece o próximo grande trampolim para jogos verdadeiramente fotorrealistas.