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?
raytracing
height-field
Dan Hulme
fonte
fonte
Respostas:
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.
fonte
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
fonte
O mapeamento de etapas do cone e o mapeamento de etapas do cone relaxado parecem ser algoritmos muito decentes. Eles dependem de um pouco de pré-processamento do campo height para criar um mapa 2D usado para pesquisas mais eficientes.
http://www.lonesock.net/files/ConeStepMapping.pdf https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch18.html
fonte