Q2VKPT: Quake II totalmente reescrito com iluminação realista


O Q2VKPT é o primeiro jogo jogável com rastreamento de raio completo, simulando efetivamente a iluminação totalmente dinâmica em tempo real, usando as mesmas tecnologias modernas usadas na indústria cinematográfica (consulte o guia prático da Disney sobre rastreamento de trajetos ).

O recente lançamento de modelos de GPU com recursos de raytracing abriu possibilidades completamente novas para o futuro dos gráficos de jogos, no entanto, o uso adequado do raytracing não é uma tarefa trivial. Enquanto alguns desenvolvedores de jogos começaram a explorar as possibilidades de renderizar sombras e reflexões, o Q2VKPT foi o primeiro projeto a implementar uma solução geral eficaz para todos os tipos de transferência de luz: iluminação direta, difusa e refletida (consulte a seção "Mídia"). Na indústria cinematográfica, essa unificação levou a uma melhoria significativa na flexibilidade e produtividade . Existe a possibilidade de que esse desenvolvimento de tecnologia nos jogos prometa uma melhoria semelhante na precisão visual e no realismo dos gráficos nos próximos anos. Este projeto deve servir como prova de conceito para o campo de pesquisa em computação gráfica e a indústria de jogos; além disso, permite que os fãs de jogos vejam o futuro potencial dos gráficos de jogos. Além de usar o traçado de raios acelerado por hardware, o Q2VKPT fornece principalmente sua eficiência graças à técnica de filtragem de imagem adaptável , que rastreia de forma inteligente as alterações na iluminação da cena, a fim de reutilizar o máximo de informações possível dos cálculos anteriores.

Sobre o projeto


O projeto foi lançado como código aberto no GitHub . Ele integra o nosso rastreador de raios Vulkan ao cliente Q2PRO . O projeto surgiu devido à necessidade de pesquisa em computação gráfica de conteúdo de teste de execução rápida. É motivado pelos primeiros resultados intrigantes de um renderizador de rastreamento de caminho escrito em 2016 .

A história


O VKPT e o Q2VKPT foram criados como um projeto de hobby por Christoph Schied para testar os resultados da pesquisa em computação gráfica neste jogo. No momento, o projeto inclui 12 mil linhas de código e substitui completamente o código gráfico original do Quake II. Inicialmente, seu protótipo foi escrito em OpenGL com a participação de Johannes Hanika ( traçado experimental de raios , shaders, correções GL / Vulkan), Addis Diettebrand (hierarquia de iluminação, visualização de depuração), Tobias Zirr (amostragem de iluminação, website, textos informativos) e Florian Rybold (hierarquia inicial de cobertura). Assistência adicional foi fornecida por Stefan Bergmann, Emanuel Schrade, Alice Jung e Christoph Peters (um pouco de barulho ).

Materiais para download



Vídeo




Fotos mal-sucedidas em desenvolvimento: vídeo com falhas 1 , vídeo com falhas 2 .

Screenshots


Aconselhamos que você assista ao vídeo ou jogue você mesmo, porque a iluminação totalmente dinâmica é muito melhor sentida em movimento.

Iluminação global totalmente dinâmica criada usando o traçado de raios. Sombras criadas por traçado de raios, reflexos brilhantes e um estágio de reflexão de iluminação indireta










A saída do traçador de caminho (esquerda) e o filtro de redução de ruído aplicado (direita)

Comparação de capturas de tela


Tecnologia


O Q2VKPT é implementado na API Vulkan para poder usar os novos recursos de rastreamento de raios de hardware que apareceram no ano passado. Graças a eles, o jogo pode chegar perto de 60 FPS (2560x1440, RTX2080Ti) com rastreamento de raio total e sombreamento dinâmico com modelos realistas de iluminação global calculados em tempo real. O uso de traçado de caminho para iluminação totalmente dinâmica permite aumentar muito os detalhes do sombreamento das cenas do jogo, criando naturalmente uma interação complexa de sombras nítidas e suaves, materiais brilhantes e reflexões prospectivamente corretas. Além disso, a luz pode propagar-se naturalmente por toda parte, conectando cenas como no mundo real. As soluções tradicionais com iluminação pré-calculada ou aproximações grosseiras de varredura em tempo real nunca serão capazes de obter esses detalhes com resolução comparável, porque toda a quantidade de informações sobre iluminação excederá os limites de memória.

Detalhes técnicos


O Q2VKPT usa muitas técnicas para adaptar métodos computacionalmente caros a jogos que antes eram usados ​​apenas na indústria cinematográfica. Seu núcleo é um filtro de tempo adaptativo, que reutiliza de forma inteligente os resultados dos cálculos de quadros anteriores (este é o projeto de pesquisa anterior de Christoph ). Esse filtro é usado em cima do anti-aliasing temporal já difundido e estende o processo de rastreamento de alterações temporárias de um espaço de imagem simples para um espaço de alta dimensão de caminhos de propagação de luz. O rastreamento de alterações nos caminhos é necessário porque o rastreamento de caminhos é um algoritmo aleatório, que é seus pontos fortes e fracos: ele pode lidar com todas as formas de propagação da luz de maneira generalizada, mas pode levar muito tempo para que os resultados se tornem confiáveis, muito tempo para um quadro em jogo em tempo real. Uma solução simples no espaço da imagem (por exemplo, anti-aliasing temporal) não pode lidar com esse nível de incerteza.

Com o passar do tempo, exploramos várias técnicas para encontrar fontes de luz que afetam todas as superfícies do jogo. A escolha das fontes de luz corretas é crucial para a qualidade da imagem, porque se você fizer a escolha errada, obteremos uma saída muito confiável do traçador de caminhos, o que fará com que o filtro de tempo remova todos os belos detalhes que o traçador de caminhos deveria ter criado. No protótipo original, foi usada toda a hierarquia de fontes de luz usada na indústria cinematográfica: dividindo as fontes de luz de acordo com a hierarquia, podemos calcular simultaneamente a influência de várias fontes, o que permite excluir rapidamente fontes distantes e fracas do cálculo, bem como fontes que estão na direção errada. Entretanto, esses cálculos são difíceis de tornar precisos, e o custo computacional de atravessar a hierarquia é difícil de controlar. Como o Quake II original usava muitos espaços potencialmente visíveis (conjunto potencialmente visível) para cortar partes invisíveis da cena, decidimos extrair desses conjuntos de listas de fontes potencialmente visíveis para cada parte da cena. Na versão atual, implementamos um cálculo parcialmente preciso da influência de cada fonte na lista, escolhendo aleatoriamente o subconjunto apropriado dessas listas em cada quadro. Portanto, o renderizador encontra rapidamente todas as fontes de luz e podemos realizar todos os cálculos do efeito da iluminação por intervalos constantes e controlados.

Perguntas e Respostas


Por que meu jogo "falha"?


Como fazemos esse projeto em nosso tempo livre, não temos força suficiente para um cuidadoso controle de qualidade. Envie um relatório de bug para o rastreador de problemas do nosso repositório GitHub!

Por que não existem partículas? Eu preciso de moscas e faíscas de railgun!


Infelizmente, não tivemos tempo suficiente para adicionar fontes de iluminação à arma. Quanto a outras partículas, a decisão que tomamos de realizar o traçado de raios complicou um pouco o processo de renderização de partículas. Se encontrarmos o tempo, iremos corrigi-lo no futuro!

Atualmente, os jogos parecem tão realistas! Por que usar o rastreamento de caminho?


Os jogos modernos expandiram muito os recursos do tradicional, com base em gráficos rasterizados. No entanto, essas melhorias têm um preço: os mecanismos de renderização dos jogos modernos tornaram-se conjuntos extremamente intricados de técnicas altamente direcionadas. Para obter uma imagem aceitável sem artefatos, a iluminação, as sombras e os reflexos devem ser calculados individualmente em várias resoluções e escalas. Caminhos de rastreamento e outras técnicas de renderização de Monte Carlo permitem encontrar uma maneira de sair desse sistema sempre complicado. De fato, eles já resolveram esse problema na indústria cinematográfica . Nosso protótipo é a primeira resposta à pergunta de como conseguir isso na indústria de videogames.

Quake II é um jogo antigo! Se essas tecnologias tivessem futuro, hoje funcionaria com uma frequência de 6000 FPS!


Sim, o Quake II é um jogo bastante antigo, com uma complexidade geométrica bastante baixa, mas o principal fator limitante para o rastreamento de caminhos não é o rastreamento de raios ou a complexidade da geometria. De fato, o protótipo atual pode rastrear muito mais raios sem uma redução perceptível na taxa de quadros. O custo computacional das técnicas usadas no protótipo Q2VKPT depende principalmente da quantidade de computação da dispersão de luz (indireta) e do número de fontes de luz. O Quake II tinha inicialmente muitas fontes de luz e, a esse respeito, ainda é um jogo bastante moderno. Além disso, o número de eventos de dispersão da luz não depende da complexidade da cena. Portanto, podemos assumir que as técnicas usadas por nós são adequadas para jogos mais modernos.

Por que Quake II?


Porque as fontes do Quake II são publicadas em domínio público, e o jogo em si tem uma longa história de modificação. Esta é uma excelente caixa de areia para testar pesquisas científicas no mundo real. Em particular, o jogo possui uma jogabilidade ativa e competitiva, que estabelece altas demandas no desempenho e na confiabilidade das técnicas renderizadas. E, finalmente, o Quake II, em certo sentido, ainda permanece um jogo bastante moderno, porque foi originalmente lançado com um design de iluminação complexo e artístico.

Como posso usar o Q2VKPT como referência?


Abra o console pressionando a tecla "~". Na versão demo do Quake 2, você pode usar o comando “timedemo 1; demo q2demo1 ", na versão completa - o comando" timedemo 1; demo demo1 ". O criador de perfil interno é iniciado com o comando vkpt_profiler 1. Ele fornece detalhes sobre os tempos da GPU para etapas de renderização individuais.

Como o rastreamento de caminho é diferente do rastreamento de raios?


O rastreamento de caminho é um algoritmo elegante que pode simular as muitas formas complexas em que a luz se espalha e se espalha nas cenas virtuais. Sua simulação de iluminação baseada em física fornece renderização de alta qualidade. O rastreamento de caminho usa o rastreamento de raio para determinar a visibilidade entre os eventos de dispersão. No entanto, o traçado de raios é apenas uma operação primitiva que pode ser usada para muitos propósitos. Portanto, o traçado de raios sozinho não é capaz de criar imagens realistas. Para fazer isso, você pode usar algoritmos de propagação de luz, como rastreamento de caminho. No entanto, apesar de elegante e muito poderoso, o rastreamento de caminho ingênuo é muito caro e demorado para criar imagens estáveis. Nosso projeto usa um filtro adaptativo inteligente que reutiliza a quantidade máxima possível de informações em alguns quadros e pixels para criar imagens confiáveis ​​e estáveis.

Traçado e ray tracing - o futuro dos gráficos de jogos?


A recente introdução de uma GPU com recursos de rastreamento de raios abriu completamente novas possibilidades para o futuro dos gráficos de jogos, mas é necessária uma abordagem não trivial para usar corretamente o rastreamento de raios. O objetivo do nosso projeto é descobrir o que está faltando para criar um caminho direto para o futuro dos gráficos de rastreamento de raios. Embora alguns problemas já tenham sido resolvidos em pesquisas científicas, muitos problemas reais permanecem invisíveis até você começar a implementar o renderizador completo do jogo. No futuro, planejamos estudar alguns desses problemas, por exemplo, melhor amostragem de iluminação, filtragem aprimorada e uma estrutura de renderizador de software mais consistente. Para que essas mudanças se espalhem, são necessárias boas soluções para tarefas novas e incomuns do renderizador, com base no traçado de raios e nos caminhos.

O rastreamento do caminho finalmente resolverá todos os problemas gráficos?


O rastreamento de caminhos e métodos semelhantes resolvem elegantemente muitas tarefas complexas dos gráficos do jogo. No entanto, sua natureza probabilística adiciona uma série de novas tarefas, cuja solução é necessária para criar imagens claras (silenciosas) de alta qualidade. O método de filtragem no protótipo Q2VKPT é a primeira etapa para métodos unificados confiáveis ​​que permitem implementar uma abordagem de pesquisa aproximada totalmente unificada na renderização usando o rastreamento de caminho. Nos próximos meses e anos, esperamos e esperamos ver outros estudos nessa direção!

O Q2VKPT usa mapas de iluminação do jogo original?


O mecanismo original do Quake 2 usa mapas de luz pré-calculados contendo sombras suaves e iluminação indireta difusa. O Q2VKPT substitui completamente a iluminação estática por uma simulação totalmente dinâmica que unifica as fontes de iluminação estática e dinâmica.

Quantos raios o Q2VKPT emite por pixel?


O número de raios emitidos depende da primeira superfície visível. Em superfícies opacas, o Q2VKPT usa um feixe para cada pixel para encontrar uma superfície visível direta e indireta. Além disso, para ambas as superfícies, o Q2VKPT emite um feixe para fontes de luz selecionadas aleatoriamente. Portanto, Q2VKPT emite pelo menos 4 raios para cada pixel.

O Q2VKPT usa rasterização?


Tradicionalmente, um rasterizador é usado para encontrar superfícies visíveis da câmera nos jogos. No Q2VKPT, a renderização é feita completamente pelo traçado de raios, portanto o rasterizador não é usado (com exceção dos elementos bidimensionais da interface do usuário).

Source: https://habr.com/ru/post/pt436754/


All Articles