¿Cuál es el algoritmo actual de vanguardia para campos de altura de trazado de rayos?

16

A lo largo de los años, ha habido muchos documentos sobre diferentes técnicas para dibujar el terreno de altura y campo en un trazado de rayos. Algunos algoritmos marcan la cuadrícula directamente (o mediante un árbol cuádruple); otros transforman el terreno en una malla poligonal y utilizan una prueba estándar de intersección triángulo-rayo. La investigación parece haber avanzado en los últimos años, y es difícil encontrar documentos escritos en la última década, pero el equilibrio entre la memoria y el cómputo (tanto la CPU como la GPU) todavía está cambiando.

¿Qué tipo de algoritmo ofrece el mejor rendimiento en máquinas de escritorio de alta gama hoy en día? O si no hay una respuesta única, ¿cómo difieren las características de rendimiento de los mejores algoritmos actuales?

Dan Hulme
fuente
Reflexiones en el espacio de la pantalla: cree un campo de altura utilizando el búfer de profundidad y marco, rastrearlo para obtener reflejos crudos. No conozco los detalles, pero me imagino que Crysis, Killzone, últimamente Frostbite, etc. habrán utilizado alguna técnica sofisticada para hacerlo rápido. ¿Has investigado esto?
David Kuri
1
@DavidKuri Gracias, es un buen indicador de cómo obtener el núcleo de la marcha de rayos rápidamente. Debería haber muchas optimizaciones posibles para un campo de altura más estático que no funciona tan bien en el rastreo del espacio de pantalla, como pre-cómputo mipmaps o un quadtree min-max, por lo que todavía espero una respuesta eso cubre eso.
Dan Hulme
Hola, Dan BTW, ¿estás buscando soluciones de CPU o GPU? ¿Y en tiempo real o no en tiempo real?
Alan Wolfe
@AlanWolfe Mi uso es GPU y no en tiempo real (es decir, rendimiento máximo en lugar de la mejor calidad de imagen que puede administrar en 16 ms), pero aún votaré respuestas interesantes que son rápidas en la CPU o principalmente para renderizadores interactivos.
Dan Hulme
Puede intentar crear un campo de distancia firmado desde el mapa de altura. Eso es básicamente una textura 3D que almacena la distancia a la siguiente superficie. Esto permite "viajar el rayo más rápido". Unreal Engine 4 usa esto para oclusión ambiental de rango medio, sombras suaves y sombras de terreno en general
usuario1888

Respuestas:

12

Para conocer el estado actual de la técnica, busque este documento: "Mipmaps máximos para una representación de campo de altura dinámica rápida, precisa y escalable", Tevs et al. 2008

La idea básica es omitir mucho espacio al tener conocimiento del valor máximo en grandes áreas de terreno. Si el rayo permanece por encima de eso, salte a la siguiente área grande.

Si observa la Figura 8, verá una comparación de pasos lineales básicos frente a mipmaps máximos. Los pasos lineales dan como resultado 200 pasos, que se pueden hacer en tiempo real en gpus modernos, pero aún son lentos. Max mipmaps hacen lo mismo en unos 10 pasos, todos en sombreador.

Rama
fuente
Estoy aceptando esta respuesta porque el documento en sí es bueno y su sección "Trabajo relacionado" parece bastante completa. Incluso si no termino usando esta técnica exactamente, estoy seguro de que podré adaptar algo para mi caso de uso a partir de esto y sus referencias.
Dan Hulme
¿Has encontrado alguna demostración con Maximum mipmaps? Gracias.
raRaRa
No he leído el documento, pero este "mapa MIP máximo" suena muy similar a la técnica utilizada para el mapeo de pasos de cono (que mejora el mapeo de oclusión de paralaje al omitir áreas grandes gracias a los conos).
Julien Guertault
@JulienGuertault Yo diría que esto es simple rastreo de HiZ. Es un método seguro para estar seguro de lo que golpeas. Pero no es muy rápido en comparación con métodos inseguros como la búsqueda binaria.
v.oddou
4

Lo mejor que he visto personalmente es lo que hace inigo quillez, que se usa en cosas de demoscene. Ray Marcha por el terreno, dando pasos más grandes cuanto más te alejas de la cámara, ya que (generalmente) los detalles importan menos a distancia (excepción = paredes delgadas). Utiliza información de penetración y otras métricas fáciles de obtener para simular la oclusión ambiental y otras técnicas de iluminación sofisticadas.

Aquí hay una demostración de las cosas en acción: https://www.youtube.com/watch?v=_YWMGuh15nE

Y aquí está la página de IQ sobre el trazado de rayos del terreno, que es una lectura bastante interesante: http://www.iquilezles.org/www/articles/terrainmarching/terrainmarching.htm

Por cierto, en los juegos modernos, la técnica de "reflexión del espacio de la pantalla" a menudo es solo una marcha de rayos contra el búfer Z de la escena renderizada. El buffer Z es realmente solo un campo de altura.

Vi algunas charlas sobre esto en el siggraph 2014, y aunque algunas de las personas usaban técnicas similares a IQ, algunas estaban haciendo cosas que no eran tan buenas como IQ, lo cual fue interesante de ver: P

Alan Wolfe
fuente
1
El algoritmo en su enlace es muy simple. Parece menos sofisticado que algunos de los documentos que encontré de los noventa. Parece un buen punto de partida, pero espero la solución de más alto rendimiento para un sistema de producción, no solo "mi primer rastreador de rayos".
Dan Hulme
Este material se usa en el código de demoscene y en las reflexiones del espacio de pantalla en los juegos modernos más avanzados. El código más rápido es a veces el más simple. No lo descartaría por su simplicidad. Sin embargo, será interesante ver si obtienes otras respuestas.
Alan Wolfe
2
Lo que falta en su respuesta es que IQ utiliza una malla de campo de altura estándar como una suposición inicial para comenzar a marcar el terreno real. Primero presenta una versión del terreno de baja poli con rasterización estándar, y luego ejecuta un sombreador de píxeles sobre la imagen que comienza a marcar con rayos en la profundidad rasterizada menos un umbral conservador. Esta es la única forma de hacer esto en tiempo real.
Benedikt Bitterli
Creo que solo una parte de lo que dices es verdad. él usa la heurística basada en la altura del terreno (junto con la distancia desde la cámara) para determinar qué tan lejos puede marchar el rayo, pero por lo que he escuchado, no usa rasterización. Aquí hay un ejemplo de su trabajo, que no usa rasterización, pero eso no quiere decir que no hay implementaciones que sí lo hagan
Alan Wolfe
Estoy un poco confundido porque la pregunta es sobre el trazado de rayos, y esta respuesta es sobre la marcha de rayos. Hay una diferencia fundamental entre los dos y lo que pueden lograr.
Julien Guertault