El ray marching es una técnica de renderizado que avanza un rayo a través de una escena en pasos discretos y repetidos, muestreando la escena en cada posición para encontrar superficies, acumular efectos volumétricos o evaluar un campo de distancia con signo. A diferencia del ray tracing, que calcula intersecciones analíticas entre un rayo y una superficie frente a geometría explícita como triángulos o esferas, el ray marching funciona de forma iterativa: para cada rayo, el algoritmo avanza a lo largo de su dirección, verifica en cada posición si el rayo ha chocado con algo y se detiene cuando encuentra una superficie o alcanza un límite de pasos.
El bucle fundamental
Todo marchedor de rayos repite la misma secuencia básica:
- Inicializar la distancia recorrida
t = 0. - Muestrear la escena en el punto actual a lo largo del rayo.
- Si la muestra está lo suficientemente cerca de una superficie, reportar un impacto.
- En caso contrario, elegir una distancia de avance, incrementar
ten esa cantidad y repetir. - Detenerse al alcanzar una distancia máxima o un número máximo de pasos.
Este bucle es sorprendentemente general. La misma estructura alimenta el renderizado de superficies basado en SDF, la acumulación de niebla volumétrica y el arte procedural con shaders. Lo único que cambia entre estas aplicaciones es cómo se elige la distancia de avance y qué le indica la muestra al algoritmo que debe hacer a continuación. El tutorial interactivo completo sobre ray marching explora cada variante con visualizaciones detalladas.
Estrategias de avance
Existen dos formas habituales de elegir la distancia de avance:
La marcha de paso fijo avanza siempre la misma cantidad pequeña en cada iteración. Es sencilla de implementar y funciona con cualquier representación de la escena: basta con muestrear en cada posición y comprobar si hay una superficie. Su inconveniente es la eficiencia: los pasos pequeños son seguros cerca de detalles finos, pero desperdician trabajo en el espacio vacío, mientras que los pasos grandes corren el riesgo de saltarse superficies. La marcha de paso fijo se usa sobre todo en renderizado volumétrico (niebla, humo, fuego), donde es necesario acumular densidad a lo largo de todo el rayo en lugar de encontrar una única superficie.
El sphere tracing utiliza un campo de distancia con signo (SDF) para decidir la distancia de avance de forma adaptativa. En cada punto de muestreo, el SDF devuelve la distancia más corta hasta la superficie más cercana. Como no existe ninguna superficie dentro de ese radio, el rayo puede saltar hacia adelante exactamente esa distancia sin sobrepasar nada. Esto hace que el sphere tracing sea mucho más eficiente que la marcha de paso fijo en escenas típicas de renderizado de superficies: el rayo da grandes saltos a través del espacio vacío y reduce sus pasos de forma natural cuando se aproxima a la geometría.
El siguiente visual muestra el sphere tracing en acción. El anillo púrpura en cada punto de muestreo representa la distancia SDF en esa posición: el rayo salta hasta el borde de ese anillo y luego reevalúa el campo.
Distance-Guided Stepping
Drag the circle or the ray arrow to see how the marcher advances by safe distances.
La regla de actualización del sphere tracing es notablemente compacta:
donde es la posición actual, es la distancia SDF en ese punto y es la dirección del rayo. La siguiente posición es simplemente la posición actual desplazada hacia adelante por la distancia hasta la superficie más cercana, en la dirección en que viaja el rayo.
Usos habituales
El ray marching aparece con mayor frecuencia en estas áreas:
- Escenas procedurales y shader art: geometría definida mediante fórmulas en lugar de mallas almacenadas, popularizada por sitios como Shadertoy.
- Renderizado de fractales: fractales como el Mandelbulb carecen de fórmulas analíticas de intersección, pero tienen estimadores de distancia prácticos, lo que los convierte en candidatos naturales para el sphere tracing.
- Renderizado volumétrico: la niebla, el humo, las nubes y el fuego se renderizan acumulando densidad a lo largo del rayo mediante marcha de paso fijo, calculando transparencia e iluminación en cada muestra.
- Modelado basado en SDF: escenas construidas combinando campos de distancia con signo primitivos (unión, intersección, sustracción) con mezclas suaves y deformaciones.
Para ver un recorrido completo sobre cómo funcionan los campos de distancia con signo, cómo el sphere tracing garantiza pasos seguros y cómo sombrear superficies SDF, consulta el tutorial interactivo completo sobre ray marching.