Na GDC, a Microsoft anunciou um novo recurso para DirectX 12: DirectX Raytracing (DXR). A nova API oferece tração para o já conhecido DirectX, inaugurando uma nova era de jogos com iluminação, sombras e materiais mais realistas. Um dia, essa tecnologia poderia permitir tipos de imagens foto-realistas nas quais nos acostumamos nos blockbusters de Hollywood.
Seja qual for a GPU que você tenha, seja uma monstruosa Titan V da Nvidia (US$ 3,000 dólares) ou a pequena coisa integrada em seu Raspberry Pi de U$ 35 dólares, os princípios básicos são os mesmos; de fato, enquanto muitos aspectos das GPUs mudaram desde que os gráficos 3D surgiram pela primeira vez na década de 1990, todos elas foram baseadas em um princípio comum: rasterização (rasterization).
Saiba como as coisas são feitas hoje
Uma cena 3D é composta por vários elementos: existem modelos 3D, construídos a partir de triângulos com texturas aplicadas a cada triângulo; há luzes, iluminando os objetos; e há uma viewport ou câmera, olhando a cena a partir de uma posição específica. Essencialmente, na rasterização, a câmera representa uma grade de pixel “raster” (daí rasterização). Para cada triângulo na cena, o motor de rasterização determina se o triângulo se sobrepõe a cada pixel. Se o fizer, a cor desse triângulo é aplicada ao pixel. O mecanismo de rasterização funciona a partir dos triângulos mais próximos e se aproxima da câmera, então, se um triângulo obscurecer outro, o pixel será colorido primeiro pelo triângulo traseiro e, então, por um na frente dele. Sim, um é algo complexo para leigos.
Announcing Microsoft DirectX Raytracing! https://t.co/jd8Zg8DdQN
— Phil Spencer (@XboxP3) March 19, 2018
Grande parte do desenvolvimento da GPU tem se concentrado em otimizar esse processo, cortando a quantidade que deve ser desenhada. Por exemplo, objetos que estão fora do campo de exibição da viewport (ou câmera) podem ser ignorados. As partes de objetos que ficam atrás de outros objetos também podem ser ignoradas; a contribuição para um determinado pixel será substituída por um pixel que está mais próximo da câmera, então não há nenhum motivo para calcular a contribuição deles.
As GPUs tornaram-se mais complicadas nas últimas duas décadas, com os shaders vertex processando os triângulos individuais, os shaders de geometria para produzir novos triângulos, pixel shaders que modificam os pixels pós-rasterização e computam sombreadores para realizar física e outros cálculos.
Com o Raytracing
O Raytracing é uma técnica para produzir gráficos computacionais que mais imitam este processo físico. Dependendo do algoritmo exato usado, os raios de luz são projetados tanto a partir de cada fonte de luz, seja a partir de cada pixel de quadriculação; Eles pulam em torno dos objetos, seja uma câmera ou uma fonte de luz. Projetar raios de cada pixel é menos intensivo na computação, mas projetar das fontes de luz produz imagens de maior qualidade que replicam com precisão determinados efeitos ópticos.
Vamos tentar passar tais informações mais claras para os leigos que não entedem nada de programação. O Raytracing adiciona efeitos de ilumitação avançados e podem gerar gráficos ultra-realistas, mas tem um problema: é muito exigente, precisa de um máquina monstro. A rasterização foi amplamente otimizada para tentar restringir a quantidade de trabalho que o GPU deve fazer; com raytracing qualquer objeto pode contribuir com sombras ou reflexos para uma cena.
As empresas que criam gráficos de filmes passam horas a renderizar quadros individuais para processar cada imagem em paralelo. Mas isso sempre foi um grande problema para jogos, onde o trabalho é muito maior. No entanto, as GPUs modernas são muito rápidas nos dias de hoje. E enquanto eles não são rápidas o suficiente – ainda assim – elas têm recursos de computação suficientes que podem ser usados para fazer alguns bits de raytracing.
É aí que a DXR da Microsoft entra
DXR é uma API de raytracing que estende a base de dados baseada em rasterização Direct3D. A cena 3D é organizada de uma maneira que é capaz de realizar o raytracing, e com a API DXR, os desenvolvedores podem produzir feixes de luz e traçar seu caminho através da cena. O DXR também define novos tipos de sombreadores que permitem aos programas interagirem com os raios enquanto interagem com objetos na cena.
Devido às demandas de desempenho, a Microsoft espera que o DXR seja usado, pelo menos por enquanto, para preencher algumas das coisas que o raytracing faz muito bem e que a rasterização não: coisas como reflexos e sombras (como visto no vídeo da Remedy acima). DXR deve tornar essas coisas mais visíveis. No futuro, a Microsoft espera aumentar a utilização do DXR para técnicas de rasterização, como a verdadeira iluminação geral.
A empresa diz que tem trabalhado no DXR há quase um ano, e a Nvidia em particular tem muito a dizer sobre o assunto. A Nvidia possui seu próprio mecanismo de raytracing projetado para sua arquitetura Volta (embora atualmente, a única placa de vídeo com o Volta é o Titan V, portanto, a aplicação deste é provavelmente limitada).
A Microsoft diz vagamente que o DXR funcionará com o hardware que está atualmente no mercado e que terá uma camada de retorno que permitirá aos desenvolvedores experimentar o DXR em qualquer hardware que eles possuam. Se o DXR for amplamente adotado, podemos imaginar que o futuro do hardware possa conter recursos adaptados às necessidades do racionamento da luminosidade. Do lado do software, a Microsoft diz que EA (com o motor Frostbite usado na série Battlefield), Epic (com o motor Unreal), Unity 3D (com o mecanismo Unity) e outros terão suporte DXR em breve.