Pascal Gilcher, também conhecido por seu nome de usuário Marty McFly, pode ser considerado o modder ReShade mais famoso, principalmente graças ao seu inovador sombreador SSRTGI (Screen Space Ray Traced Global Illumination). O SSRTGI tem sido um elemento básico das predefinições ReShade e dos pacotes de aprimoramento gráfico desde sua estreia em maio de 2019 , e muitas vezes foi abordado até mesmo aqui no Wccftech. Tornou-se tão onipresente que até a NVIDIA adicionou uma versão do sombreador de rastreamento de raio ao seu conjunto GeForce Experience Freestyle de efeitos de pós-processamento.

No entanto, a nova palavra da moda de 2023 na renderização gráfica é o rastreamento de caminho. É o próximo passo na evolução do rastreamento de raios limitado de efeitos selecionados, como oclusão de ambiente, sombras ou reflexos, para um abandono quase completo de efeitos rasterizados em favor do pipeline de rastreamento de caminho. Os jogadores de PC experimentaram essa tecnologia pela primeira vez em abril com a prévia do Cyberpunk 2077 Overdrive Mode, que imediatamente se estabeleceu como o novo padrão gráfico em videogames .

A desvantagem é que o rastreamento de caminho é extremamente desgastante para qualquer hardware. Somente as placas gráficas GeForce RTX 40 Series mais recentes podem executar confortavelmente o modo Cyberpunk 2077 Overdrive por meio de uma combinação de DLSS 2 (Super Resolução) e DLSS 3 (Frame Generation).

Isso tornou a revelação de Pascal de seu novo complemento ReShade de rastreamento de caminho de trabalho em andamento ainda mais surpreendente, uma vez que não será capaz de aproveitar o DLSS ou mesmo os RT Cores incorporados nas GPUs GeForce RTX. Mesmo assim, Pascal está convencido de que o desempenho será melhor do que o método regular baseado em triângulo.

Tive uma conversa longa e interessante com ele para discutir sua abordagem de rastreamento de caminho, o ETA de seu lançamento para assinantes do Patreon e como seu addon também pode substituir ou injetar muitos outros efeitos. Pule o vídeo para ler a transcrição completa editada.

Para começar, sei que você está em contato com a NVIDIA - eles até implementaram seu RTGI no GeForce Experience's Freestyle há um tempo atrás. Você já conversou com eles sobre isso?

Definitivamente, eles estariam interessados ​​nisso, mas como é uma coisa em andamento, não tenho certeza se posso realmente falar sobre isso. Então, digamos que estou interessado nessa possibilidade.

Eu entendo que você está trabalhando nisso há alguns anos, certo?

Mais ou menos. Quando a API ReShade foi lançada, ela permitia que você modificasse as chamadas do jogo, o que significa que o que quer que o jogo tentasse renderizar isso, ele comunica isso ao ReShade, que agora tem uma interface que diz 'Ok, o jogo quer fazer isso. Você tem algo a dizer sobre isso?

Com isso, você pode criar addons que executam qualquer tipo de tarefa com base no que o jogo fará. Digamos que o jogo tente renderizar um efeito específico. Então você pode dizer não, você não vai renderizar dessa maneira. Você pode bloquear, por exemplo, um certo efeito no jogo de ser renderizado ou um objeto de ser renderizado. Comecei a trabalhar nisso antes que a API ReShade saísse oficialmente. Mas acabei de recuperá-lo recentemente.

Houve algum motivo específico para você pegá-lo novamente ou foi apenas agendado em sua carga de trabalho?

Eu não tinha muita experiência com isso no começo, obviamente porque era novo. Eu também não tinha muita experiência com C++ como um todo e, nesse meio tempo, lancei dois outros complementos que faziam outras coisas. Eu melhorei muito nisso agora. Recentemente, tentei fazer algo funcionar e disse 'Ok, este complemento pode fazer isso'. Então eu tentei atualizá-lo com o novo material e quebrou completamente. Então eu disse 'Ok, isso é ruim. Acho que preciso dar outra olhada nisso'.

E então, olhei e vi que muitos dos problemas que originalmente me impediam de progredir eram realmente óbvios. É como se você estivesse olhando para o seu próprio exame da sexta série e percebesse como é fácil em retrospecto. Então, eu olhei para ele e disse que poderia fazer isso muito melhor agora. Eu sempre quis pegá-lo de novo porque era um conceito muito bom, então comecei de novo, e agora estou trabalhando nele novamente por, acredito que já faz dois meses, tentando carregar todos os recursos.

Pelo que entendi seu trabalho, ele segue uma abordagem baseada em voxel. O Digital Foundry o comparou ao rastreamento de caminho SEUS para Minecraft . Isso está correto em sua avaliação?

Sim e não. Eu acho que você poderia chamá-lo de voxels. Basicamente, esta é apenas uma palavra para o que os pixels seriam se fossem 3D. A maneira que eu faço é sim, ele armazena dados e os arredonda para o cubo mais próximo no mundo do jogo, mas não armazena todos eles. Há uma apresentação da NVIDIA sobre oclusão de ambiente ray tracing que você pode pesquisar chamada Spatial Hashing . Basicamente, significa que sempre que você vê algo no mundo do jogo, ele tenta encontrar o cubo mais próximo em que cai e insere isso em uma estrutura de dados que não pode conter todos eles. Seria como se você estivesse tentando colocar 100 inquilinos em uma casa que só pode acomodar cerca de 10 deles.

Por causa disso, não preciso armazenar todo o espaço. Em um jogo como o Minecraft, você teria cada voxel que contém ar, por exemplo. É tecnicamente não utilizado, mas ainda consome memória, o que significa que armazenar todos os dados seria um consumo insano de memória. Se eu armazenasse todos os voxels com os quais essa infraestrutura trabalha, consumiria de 40 a 50 gigabytes de VRAM, cerca de duas vezes mais do que as GPUs de ponta. O que estou usando é chamado de modelo de armazenamento esparso, o que significa que não armazeno todos os nós porque armazenamos apenas os nós que realmente existem. É cerca de 2% ou 3% do total que poderia estar lá. Isso funciona muito bem e posso armazenar muito, muito mais dados do que normalmente seria capaz.

Você disse que os dados obsoletos foram removidos. Acho que isso significa que, quando você se move pelo mundo, o sistema limpa automaticamente os dados antigos e obtém os novos.

Correto. Digamos que você tenha uma imagem completamente preta e alguns pixels brancos nela. Se você tivesse que armazenar todos os pixels e a imagem fosse muito grande, consumiria muita memória. Mas se você tivesse uma lista apenas dos pixels brancos e não estivesse armazenando os pretos, armazenaria apenas cinco pixels, o que é uma quantidade muito pequena de dados, e posso me safar armazenando muito menos. Portanto, o suporte de volume real é até 2.000 vezes maior ou algo assim, mas se eu armazenasse isso, consumiria mais VRAM do que o RTX 4090. Do jeito que está, eu consigo 300-400 megabytes.

O rastreamento de caminho geralmente é muito caro, então as pessoas estão se perguntando sobre o custo de desempenho desse complemento. Você pode compartilhar algo sobre quanto de uma taxa de quadros será atingida, por exemplo, em Skyrim?

O desempenho do próprio traçado geralmente é maior do que o traçado baseado em triângulo. O problema com o RTX Remix é que eles capturam a geometria enquanto o jogo tenta renderizá-la. Eles executam rastreamento de caminho baseado em triângulo regular e, na maioria das vezes, eles só podem disparar um único raio por pixel e tentar aproveitá-lo ao máximo. No vídeo de demonstração do Skyrim que apresentei, tiro três ou quatro raios por pixel.

Eu tenho um RTX 4090 e obtenho cerca de 100 quadros por segundo. Com meu novo sistema, saio com apenas um raio, mas, novamente, tenho que ter mais tempo de execução de pós-processamento devido ao filtro mais caro e também a esse modelo NVIDIA (ReSTIR GI) que aumenta a qualidade que você obtém em um único raio. Portanto, ainda requer uma certa quantidade de desempenho, mas há muito espaço para otimizar. Eu faço várias coisas em resolução total que teoricamente não preciso renderizar em resolução total.

Eu só quero tirar o máximo proveito disso e, em seguida, meio que otimizar de volta, porque na maioria das vezes você não sabe se algo parece ruim. É porque você já cortou atalhos ou é porque sua abordagem não é boa? Então, primeiro estou tentando obter o máximo de qualidade e depois tento ver o quanto posso reduzir o desempenho sem perder muita qualidade visual.

Eu li no artigo do Digital Foundry que você pode até mesmo implementar a aceleração de hardware do BVH. Estaria longe?

É um pouco complicado porque agora, eu me desfaço do fato de que tudo funciona dentro do shader. Se eu fosse fazer algo com BVH, isso significaria que teria que armazenar a estrutura de dados no lado da CPU. Eu teria que fazer minha própria interface, o que significa que, por exemplo, se o jogo estiver rodando em DX9 ou DX10, eu não poderia usar a aceleração de hardware.

Para usar a biblioteca RTX, eu teria que usar DX12 ou Vulkan, e teria que fazer meu próprio dispositivo de renderização e depois comunicar os dados de volta ao jogo. Além disso, cortaria todos que não possuem uma placa de vídeo compatível com ray tracing. Portanto, não tenho certeza se vale a pena gastar tanto esforço nisso. Também não vejo nada de errado com a solução de rastreamento de caminho como ela é. Obviamente, o traçado de raio baseado em triângulo é mais preciso nas interseções entre os objetos.

Mas estou apenas interessado na luz, o que significa que realmente não importa se meu rastreamento pode dizer com precisão a posição da camiseta de uma pessoa. Basta que ela saiba que deve ser vermelha, então a luz também deve ser. Em que ponto a precisão adicionada se torna irrelevante para o caso de uso? No caso de GI difusa, mesmo especular, está tudo bem. Para raios curtos, porém, eu reverto para um método de interseção de altíssima precisão e só mudo para dados com hash espacial quando viajo mais do que alguns voxels de distância.

Também não vejo nenhuma degradação visual, como nas abordagens do espaço da tela. Eles, é claro, têm uma degradação significativa em comparação com o espaço mundial.

'Acho que algumas pessoas não reconheceriam o traçado de caminho se batessem na cabeça delas' - Pascal Gilcher

Não sei se você leu algumas das reações que surgiram no Reddit ou em fóruns de jogos como o ResetEra, por exemplo. Algumas pessoas acharam muito legal. Outros disseram, bem, isso não parece um rastreamento de caminho para mim. Isso pode ser porque sua solução ainda não inclui fontes de luz dinâmicas?

Acho que a maioria desses comentários não tem ideia do que estão falando. Nesse caso, sim, não tenho acesso às fontes de luz do jogo, mas o jogo já faz isso por mim. Seria redundante fazer isso. Meu foco está na iluminação indireta, o que significa que a fonte de luz projeta a luz na cena e ela é refletida de volta nas áreas que foram sombreadas.

No vídeo, há uma cena em que você pode ver as janelas brilhantes lançando luz no chão. Isso é algo que somente o rastreamento de caminho pode fazer.

Eles realmente não sabem o que estão procurando. Quero dizer, eu vi comentários dizendo que isso apenas torna as coisas mais contrastantes. Acho que eles não reconheceriam o traçado de caminho se os acertasse na cabeça.

Alguns desses comentaristas certamente não possuem conhecimento técnico suficiente. Falando em fontes de luz dinâmicas, você pensou em usar o RTX Direct Illumination SDK? Poderia permitir muitas luzes dinâmicas adicionais.

Minha solução de rastreamento de caminho também pode lidar com muitas luzes. Ele só precisa saber onde eles estão. Esse é um problema que o RTX Remix também tem, já que os jogos mais antigos realmente não têm o conceito de iluminação dinâmica e às vezes você nem consegue confiar no jogo. O RTX Remix tenta resolver isso fazendo com que os criadores coloquem manualmente as fontes de luz nos locais onde elas estariam. Teoricamente, eu poderia apenas apoiar isso.

O que estou fazendo é transportável para todos os jogos que você deseja. Eu só preciso encontrar algumas coisas que quase todos os jogos têm. Eu só tenho que descobrir onde eles estão e então subir para os mesmos lugares.

Esse é, obviamente, um dos principais atrativos da sua solução. Mas eu queria saber se você terá que adaptar o complemento de rastreamento de caminho para cada jogo ou os modders podem fazer isso sozinhos?

A maneira como funciona é que o complemento basicamente deve ser informado 'Ok, você vai esperar por este evento de renderização específico. Então você está olhando para este recurso anexado. Você olha para esta entrada e os dados que estão lá.' A maneira como faço no momento é que estou executando e quero contar todos os dados que vão e voltam para saber quais são cada um dos dados. Por exemplo, digamos que eu precise de dados específicos que transformem a posição relativa à câmera em posições no mundo do jogo. Você precisa de experiência em programação de jogos, sem falar em saber como são essas coisas. Eu posso diferenciá-los, mas alguém que não tem nada disso não pode. Na comunidade ReShade, talvez cinco pessoas possam fazer isso. É um processo muito não linear e acho que depende do que o jogo tem para você, porque podem ser dados diferentes. Não acho que muitas pessoas possam fazer isso, então planejo ter um modelo dividido. Enquanto procuro esses dados, o complemento reúne tudo o que há para a renderização de uma vez e me fornece os dados de que realmente preciso.

No momento, sou basicamente eu e talvez algumas pessoas com conhecimento suficiente sobre isso que podem fazer o trabalho em jogos específicos e criar arquivos de configuração que informam ao complemento quais são os respectivos dados e como interpretá-los. Em seguida, os usuários finais usariam apenas os arquivos de configuração finais.

Uma das principais comparações que foram feitas (até você fez) é com o RTX Remix da NVIDIA . É justo dizer que as duas tecnologias são diferentes e complementares, já que a solução da NVIDIA visa jogos mais antigos (principalmente aqueles que usam pipelines de função fixa antes dos shaders entrarem em cena), enquanto sua solução de rastreamento de caminho pode suportar até DX12 e Vulkan?

Claro, minha solução não é tão poderosa quanto o RTX Remix, que transforma completamente o jogo. Minha solução é menos invasiva. É por isso que também é mais transportável. Provavelmente pode fazer menos que o RTX Remix e sim, tem um foco muito diferente. O foco principal do RTX Remix não é apenas injetar path tracing, mas também substituir modelos 3D, textura ou o que quer que esteja no jogo.

Meu objetivo é apenas, bem, melhorar a aparência do jogo. Acho que você poderia compará-lo mais com, digamos, a série ENBS, que melhora os gráficos de muitos jogos diferentes e seus recursos variam de acordo com o jogo.

'Path Tracing é apenas um dos muitos efeitos que podem ser adicionados ou substituídos por este addon' - Pascal Gilcher

Acho que poderíamos chamá-lo de ENBSeries com Path Tracing ou algo assim.

Sim, mas o rastreamento de caminho é apenas um dos muitos efeitos de renderização que podem ser injetados ou substituídos em jogos com este complemento. Digamos que o jogo X tenha um efeito de renderização Y ruim; agora posso substituí-lo por algo melhor. Eu anunciei com o path tracing porque, convenhamos, quase todo mundo me conhece como o cara do RTGI. Era a coisa mais óbvia a se fazer, mas isso é apenas uma coisa que pode ser melhorada. Já fiz muito, muito mais.

Sim, eu vi suas nuvens volumétricas para Skyrim ; eles parecem realmente impressionantes. Eu sei que você disse que ainda está desenvolvendo este addon. Você tem um ETA? Levará alguns meses até que isso seja lançado para os assinantes do Patreon?

Essa é realmente uma boa pergunta. No momento, a solução para Skyrim não está perfeitamente integrada. Há alguns objetos transparentes ausentes. E convenhamos, ninguém joga Skyrim sem ENB. No momento, tornei-o compatível com a versão não ENB, então provavelmente preciso integrá-lo ao ENB. Também não vejo razão para reimplementar tudo o que a ENB fez. Se eu focasse em Skyrim, poderia estar pronto em três meses.

No entanto, como tento torná-lo compatível com o maior número possível de jogos, diria seis meses para ter um período de tempo generoso em que seja viável. Isso é realmente muito desafiador porque cada jogo continua fazendo coisas que eu nunca imaginei. Cada jogo que experimentei tem algo que não planejei, e então é uma semana de trabalho para consertar as coisas. Mas está funcionando cada vez melhor a cada novo jogo.

Portanto, acho que levará cerca de seis meses até que eu tenha uma solução que possa simplesmente entrar em um jogo, ajustá-lo por cinco minutos e, em seguida, pronto. Claro, dependendo do jogo, o conjunto de recursos pode variar completamente.

Você acha que sua solução também funcionaria bem com jogos isométricos, como Baldur's Gate 3 ( que é muito popular agora )?

Em teoria, sim. Não vejo razão para que não.

Legal, adoraria ver isso. Seu complemento de rastreamento de caminho será compatível com o mod DLSS 3 Skyrim do PureDark ? Seria ótimo maximizar os visuais e o desempenho ao mesmo tempo.

Eu realmente não pesquisei sobre isso, para ser honesto. No momento, estou usando um Skyrim praticamente não modificado. Pelo que entendi, não é compatível com a série ENB, então as pessoas podem escolher. Eles podem usar o DLSS 3 e ter altas taxas de quadros ou podem ter bons gráficos.

No entanto, minha solução de rastreamento de caminho não tem esse problema de compatibilidade, portanto, eles devem funcionar juntos em teoria.

Obrigado pelo seu tempo.