Clique e receba as novidades quentinhas no Telegram

O anúncio de hoje das novas GPUs da Nvidia com aceleração integrada do raytracing faz com que os planos da Microsoft para o DirectX sejam ainda mais relevantes. O Raytracing fornece aos desenvolvedores acesso a uma ampla gama de efeitos que a abordagem mainstream atual (rasterização) lida mal. Sombras, reflexos e vidro estão prontos para parecer muito mais realistas. O anúncio RTX da Nvidia é um enorme avanço tecnológico para os jogadores.

Na GDC, a Microsoft anunciou um novo recurso para o DirectX 12: DirectX Raytracing (DXR). A nova API oferece raytracing acelerado por hardware para aplicativos DirectX, inaugurando uma nova era de jogos com iluminação, sombras e materiais mais realistas. Um dia, essa tecnologia poderia permitir os tipos de imagens fotorrealistas com as quais nos acostumamos nos filmes blockbusters de Hollywood.

Seja qual for a GPU que você tem, seja o monstruoso Titan V da Nvidia, de US $ 3.000, ou a pequena plaquinha integrada em seu Raspberry Pi de US $ 35, os princípios básicos são os mesmos; De fato, embora muitos aspectos das GPUs tenham mudado desde que os aceleradores 3D surgiram nos anos 90, todos eles se basearam em um princípio comum: a rasterização.

Veja como as coisas são feitas hoje

Uma cena 3D é composta de vários elementos: existem os modelos 3D, construídos a partir de triângulos com texturas aplicadas a cada triângulo; há luzes, iluminando os objetos; e há uma janela de visualização ou câmera, olhando a cena de uma determinada posição. Essencialmente, na rasterização, a câmera representa uma grade de pixels rasterizados (portanto, rasterização). Para cada triângulo na cena, o mecanismo de rasterização determina se o triângulo se sobrepõe a cada pixel. Se isso acontecer, a cor desse triângulo é aplicada ao pixel. O mecanismo de rasterização trabalha a partir dos triângulos mais distantes e se move para mais perto da câmera, portanto, se um triângulo obscurece outro, o pixel será colorido primeiro pelo triângulo traseiro e depois pelo outro à frente dele.

Esse processo de back-to-front, overwriting-based é por que a rasterização também é conhecida como algoritmo do pintor; que primeiro estabelece o céu, à distância, depois vai sobrescrevendo-o com montanhas, depois as alegres árvores pequenas, depois talvez um pequeno edifício ou uma cerca quebrada, e finalmente a folhagem e as plantas mais próximas de nós.

Grande parte do desenvolvimento da GPU concentrou-se em otimizar esse processo cortando a quantidade que deve ser tirada. Por exemplo, objetos que estão fora do campo de visão da viewport podem ser ignorados; seus triângulos nunca podem ser visíveis através da grade raster. As partes dos objetos que estão por trás de outros objetos também podem ser ignoradas; sua contribuição para um determinado pixel será substituída por um pixel mais próximo da câmera, por isso não faz sentido calcular qual seria sua contribuição.

As GPUs se tornaram mais complicadas nas últimas duas décadas, com vertex shaders processando os triângulos individuais, geometry shaders para produzir novos triângulos, pixel shaders modificando os pixels pós-rasterização e computando shaders para executar física e outros cálculos. Mas o modelo básico de operação permaneceu o mesmo.

A rasterização tem a vantagem de poder ser feita rapidamente; as otimizações que ignoram os triângulos ocultos são efetivas, reduzindo bastante o trabalho que a GPU tem que fazer, e a rasterização também permite que a GPU flua através dos triângulos, um de cada vez, em vez de ter que armazená-los todos na memória ao mesmo tempo.

Mas, a rasterização tem problemas que limitam sua fidelidade visual. Por exemplo, um objeto que fica fora do campo de visão da câmera não pode ser visto, então será ignorado pela GPU. No entanto, esse objeto ainda pode lançar uma sombra dentro da cena. Ou pode ser visível a partir de uma superfície reflexiva dentro da cena. Mesmo dentro de uma cena, a luz branca que é refletida por um objeto vermelho brilhante tenderá a colorir tudo o que foi atingido por aquela luz em vermelho; esse efeito não é encontrado em imagens rasterizadas. Alguns desses déficits podem ser corrigidos com técnicas como o mapeamento de sombras (que permite que objetos de fora do campo de visão projetem sombras dentro dele), mas, o resultado é que as imagens rasterizadas sempre acabam parecendo diferentes do mundo real.

Fundamentalmente, a rasterização não funciona da maneira que a visão humana funciona. Nós não emanamos uma grade de feixes de nossos olhos e vemos quais objetos esses feixes se cruzam. Pelo contrário, a luz do mundo é refletida em nossos olhos. Pode saltar vários objetos no caminho e, ao passar por objetos transparentes, pode ser entortado de formas complexas.

Raytracing

Raytracing é uma técnica para produzir computação gráfica que imita mais de perto esse processo físico. Dependendo do algoritmo exato usado, os raios de luz são projetados de cada fonte de luz ou de cada varredura de pixel; eles saltam em volta dos objetos na cena até atacarem (dependendo da direção) a câmera ou uma fonte de luz. Projetar raios de cada pixel é menos intensivo em termos computacionais, mas, projetar a partir das fontes de luz produz imagens de maior qualidade que reproduzem certos efeitos ópticos com precisão. Raytracing pode produzir imagens substancialmente mais precisas; Motores avançados de raytracing podem render imagens fotorrealistas. É por isso que o raytracing é usado para renderizar gráficos em filmes: imagens de computador podem ser integradas com imagens de ação ao vivo sem parecer fora de lugar ou artificial.

Mas, o raytracing tem um problema: é intensamente computacionalmente intensivo. A rasterização foi extensivamente otimizada para tentar restringir a quantidade de trabalho que a GPU deve fazer; em raytracing, todo esse esforço é em vão, já que potencialmente qualquer objeto poderia contribuir com sombras ou reflexos para uma cena. O Raytracing tem que simular milhões de feixes de luz, e parte dessa simulação pode ser desperdiçada, refletida fora da tela ou escondida atrás de outra coisa.

Isso não é um problema para filmes; as empresas que produzem gráficos de filmes gastam horas processando quadros individuais, com vastas fazendas de servidores usadas para processar cada imagem em paralelo. Mas é um problema enorme para jogos, onde você só tem 16 milissegundos para desenhar cada quadro (para 60 quadros por segundo) ou até menos para VR.

No entanto, as GPUs modernas são muito rápidas nos dias de hoje. E enquanto eles não são suficientemente rápido ainda para raytrace de jogos altamente complexos com taxas de atualização altas, eles não têm recursos suficientes de computação que podem ser usados para fazer alguns pedaços de raytracing. É onde o DXR entra. O DXR é uma API de raytracing que estende a API Direct3D 12 baseada em rasterização existente. A cena 3D é organizada de uma maneira que é passível de raytracing, e com a API DXR, os desenvolvedores podem produzir raios e traçar seu caminho através da cena. O DXR também define novos tipos de shader que permitem que os programas interajam com os raios conforme eles interagem com objetos na cena.

Por causa das 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 faz: coisas como reflexos e sombras. O DXR deve fazer essas coisas parecerem mais realistas. Também podemos ver jogos simples e estilizados usando exclusivamente raytracing.

A empresa diz que tem trabalhado em DXR por quase um ano, e a Nvidia em particular tem muito a dizer sobre o assunto. A Nvidia tem seu próprio mecanismo de raytracing projetado para sua arquitetura Volta (embora, atualmente, a única placa de vídeo enviada com o Volta seja o Titan V, então a aplicação disso é provavelmente limitada). Quando executado em um sistema Volta, os aplicativos DXR usarão automaticamente esse mecanismo.

A Microsoft diz vagamente que o DXR funcionará com hardware que está atualmente no mercado e que ele terá uma camada de fallback que permitirá aos desenvolvedores experimentar o DXR em qualquer hardware que eles tenham. Caso o DXR seja amplamente adotado, podemos imaginar que o futuro hardware pode conter recursos adaptados às necessidades do raytracing. No lado do software, a Microsoft diz que a EA (com o mecanismo Frostbite usado na série Battlefield ), Epic (com o motor Unreal), Unity 3D (com o mecanismo Unity) e outros terão suporte a DXR em breve.

Fonte: Arstechnica