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?
fuente
Respuestas:
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.
fuente
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
fuente
La asignación de pasos de cono y la asignación de pasos de cono relajada parecen ser algoritmos muy decentes. Estos se basan en un poco de preprocesamiento del campo de altura para crear un mapa 2D utilizado para búsquedas más eficientes.
http://www.lonesock.net/files/ConeStepMapping.pdf https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch18.html
fuente