La marcha de rayos es una clase de métodos de renderizado para gráficos por computadora en 3D donde los rayos se atraviesan de forma iterativa, dividiendo efectivamente cada rayo en segmentos de rayo más pequeños, muestreando alguna función en cada paso. Por ejemplo, en la transmisión de rayos por volumen, la función accedería a puntos de datos de un escaneo 3D. En el rastreo de Esfera, la función estima la distancia hasta el siguiente paso.
En el rastreo de esferas , [1] o marcha de rayos asistidos por esferas, se aproxima un punto de intersección entre el rayo y una superficie definida por una función de distancia con signo (SDF). El SDF se evalúa en cada iteración para poder dar pasos tan grandes como sea posible sin perder ninguna parte de la superficie. Se utiliza un umbral para cancelar iteraciones adicionales cuando se alcanza un punto que está lo suficientemente cerca de la superficie. A medida que el potente hardware GPU estuvo más disponible, este método fue popularizado por demoscene e Iñigo Quilez.
Para escenas simples con formas 3D básicas, la marcha de rayos no tiene muchos beneficios sobre el trazado de rayos (que encuentra intersecciones sin atravesar el espacio). Los puntos fuertes de la marcha de rayos SDF son, por ejemplo, la transformación de formas, la aproximación de sombras suaves, la repetición de geometría y escenas definidas algorítmicamente.
Existen funciones de distancia con signo para muchas formas 3D primitivas. [2] Se pueden combinar utilizando operaciones matemáticas como módulo y booleanas para formar superficies más complejas. Por ejemplo, tomar el módulo de las coordenadas de entrada de un SDF coloca su volumen en todo el espacio, y tomar el máximo de dos SDF da la superficie de intersección de sus volúmenes. Debido a que los SDF se pueden definir para muchos fractales, el trazado de esferas se utiliza a menudo para la representación de fractales en 3D. [3]
Se puede utilizar una técnica similar a la marcha de rayos asistida por esferas, el uso de cubos y la distancia del taxi para representar volúmenes de vóxeles.
En la marcha de rayos volumétricos, se traza cada rayo para que se puedan muestrear el color y/o la densidad a lo largo del rayo y luego combinarlos en un color de píxel final. Esto se utiliza a menudo, por ejemplo, al representar nubes o escaneos médicos en 3D.
Al renderizar efectos del espacio de la pantalla , como la reflexión del espacio de la pantalla (SSR) y las sombras del espacio de la pantalla, los rayos se trazan utilizando búferes G , donde se almacenan datos normales de profundidad y superficie por cada píxel 2D.
El artículo de 1989 "Hypertexture" [4] de Ken Perlin contiene un ejemplo temprano de un método de marcha de rayos.