Qual é o algoritmo atual de última geração para campos de altura com rastreamento de raios?

15

Ao longo dos anos, tem havido muitos trabalhos sobre diferentes técnicas para desenhar terrenos com altura em um traçador de raios. Alguns algoritmos marcham a grade diretamente (ou via quadtree); outros transformam o terreno em uma malha poligonal e usam um teste padrão de interseção raio-triângulo. A pesquisa parece ter progredido nos últimos anos, e é difícil encontrar trabalhos escritos na última década, mas o equilíbrio entre memória e computação (CPU e GPU) ainda está mudando.

Que tipo de algoritmo oferece melhor desempenho em computadores desktop de ponta atualmente? Ou, se não houver uma resposta única, como as características de desempenho dos melhores algoritmos atuais diferem?

Dan Hulme
fonte
Reflexões no espaço da tela: crie um campo de altura usando o buffer de profundidade e quadro, trace-o com raios para obter reflexões brutas. Eu não sei sobre os detalhes, mas imagino que Crysis, Killzone, Frostbite ultimamente etc. tenham usado alguma técnica sofisticada para obtê-lo rapidamente. Você já olhou para isso?
David Kuri
11
@DavidKuri Obrigado, esse é um bom indicador de como obter o núcleo rápido de marchar com raios. Deve haver muitas otimizações possíveis para um campo de altura mais estático que não funcione tão bem no rastreamento do espaço na tela, como mipmaps de pré-computação ou um quadtree min-max, então ainda estou esperando uma resposta isso cobre isso.
Dan Hulme
Hey Dan BTW, você está procurando soluções de CPU ou GPU? E renderização em tempo real ou não em tempo real?
Alan Wolfe
@AlanWolfe Meu uso é GPU e não em tempo real (ou seja, taxa de transferência máxima em vez da melhor qualidade de imagem que você pode gerenciar em 16 ms), mas ainda assim votarei respostas interessantes que são rápidas na CPU ou principalmente para renderizadores interativos.
Dan Hulme
Você pode tentar criar um campo de distância assinado a partir do mapa de altura. Isso é basicamente uma textura 3d que armazena a distância até a próxima superfície. Isso permite "viajar o raio mais rapidamente". Irreal Motor 4 utiliza este para Médios oclusão ambiente, sombras e sombras terreno em geral
user1888

Respostas:

11

Para o estado da arte atual, procure este artigo: "Mipmaps máximos para renderização de campo em altura dinâmica rápida, precisa e escalonável", Tevs et al. 2008

A idéia básica é pular muito espaço, tendo conhecimento do valor máximo em grandes áreas do terreno. Se o raio permanecer acima disso, pule para a próxima área grande.

Se você olhar para a Figura 8, verá uma comparação entre passos lineares básicos e mipmaps máximos. A etapa linear resulta em 200 etapas, que podem ser feitas em tempo real nos gpus modernos, mas ainda são lentas. Os mipmaps máximos fazem o mesmo em cerca de 10 etapas, todos no shader.

Rama
fonte
Estou aceitando esta resposta porque o artigo em si é bom e sua seção "Trabalhos relacionados" parece bastante abrangente. Mesmo que eu não acabe usando exatamente essa técnica, tenho certeza de que poderei adaptar algo para o meu caso de uso a partir disso e de suas referências.
Dan Hulme
Você encontrou demos com o máximo de mipmaps? Obrigado.
21417 raRaRa
Não li o artigo, mas esse "mipmaps máximo" soa muito semelhante à técnica usada para o mapeamento de etapas de cone (que melhora o mapeamento de oclusão de paralaxe ao pular grandes áreas graças aos cones).
Julien Guertault
@JulienGuertault Eu diria que isso é um rastreamento HiZ simples. é um método seguro para ter certeza do que você acerta. Mas não muito rápido em comparação com métodos não seguros, como a pesquisa binária.
v.oddou
3

O melhor que eu já vi pessoalmente é o material que o inigo quillez faz, que é usado no material de demoscene. Ray Marcha no terreno, dando passos maiores o mais longe possível da câmera, pois (geralmente) os detalhes importam menos à distância (exceção = paredes finas!) Ele usa informações de penetração e outras métricas facilmente obtidas para simular a oclusão do ambiente e outras técnicas sofisticadas de iluminação.

Aqui está uma demonstração do material em ação: https://www.youtube.com/watch?v=_YWMGuh15nE

E aqui está a página do QI sobre o raymarching do terreno, que é uma leitura bastante interessante: http://www.iquilezles.org/www/articles/terrainmarching/terrainmarching.htm

Aliás, em jogos modernos, a técnica de "reflexão do espaço na tela" geralmente é apenas uma marcha de raios contra o buffer Z da cena renderizada. O buffer Z é realmente apenas um campo de altura.

Vi algumas palestras sobre isso no siggraph 2014 e, enquanto algumas pessoas usavam técnicas semelhantes ao QI, algumas estavam fazendo coisas que nem o QI, o que foi interessante de ver: P

Alan Wolfe
fonte
11
O algoritmo no seu link é muito simples. Parece menos sofisticado do que alguns dos documentos que encontrei nos anos 90. Parece um bom ponto de partida, mas espero a solução de maior desempenho para um sistema de produção, não apenas um "meu primeiro raytracer".
Dan Hulme
Esse material é usado nas reflexões de código de demosceno e espaço de tela nos jogos modernos mais avançados. Às vezes, o código mais rápido é o mais simples. Eu não o descartaria devido à sua simplicidade. Será interessante ver se você obtém outras respostas.
27415 Alan Wolfe #
2
O que falta na sua resposta é que o QI usa uma malha de campo de altura padrão como um palpite inicial para iniciar o raymarching no terreno real. Primeiro, ele cria uma versão low-poly do terreno usando a rasterização padrão e, em seguida, executa um sombreador de pixels sobre a imagem que inicia a marcação de raios na profundidade rasterizada menos algum limiar conservador. Esta é a única maneira de realmente fazer isso em tempo real.
Benedikt Bitterli
Acredito que apenas parte do que você está dizendo é verdade. ele usa heurísticas baseadas na altura do terreno (junto com a distância da câmera) para chegar até onde o raio pode marchar, mas, tanto quanto eu ouvi, ele não usa rasterização. Aqui está um exemplo de seu trabalho, que não usa rasterization, mas isso não quer dizer que não existem implementações que o uso DO rasterization: shadertoy.com/view/MdX3Rr
Alan Wolfe
Estou um pouco confuso que a pergunta seja sobre o traçado de raios, e esta resposta seja sobre a marcha de raios. Há uma diferença fundamental entre os dois e o que eles podem alcançar.
Julien Guertault