>

next

Ray-marching es una técnica con ciertas similitudes al ray-tracing, pero renderizando objetos a través de campos de distáncia. Se trata de objetos, normalmente simples, de los cuales se puede determinar muy fácilmente, a partir de un punto c=(x,y,z) la distancia hasta su superficie. Por ejemplo, situando el suelo en y=0, la distáncia de cualquier punto a él es simplemente y.

La esfera y un plano son los campos de distancia más básicos que se pueden hacer con ray-marching. Se ha añadido algo de sombras volumétricas difusas a partir de una única luz. A pesar de que pueda parecer que gira la luz, quien gira realmente es la cámara.

El algoritmo del Ray-marching se ilustra en la siguiente figura. Aquí es en 2D, pero el resultado es perfectamente extrapolable a 3D:

Figura.1

En la figura anterior p0 sería el punto de origen (cámara). Se evalúa la distancia a la que se encuentra la superfície donde evaluaremos el color final del punto. Esta distancia está ilustrada con la circunferencia centrada en p0.

Una vez obtenida, movemos el siguiente punto en la dirección del rayo, un espacio equivalente a la distancia calculada. En este caso obtendríamos p1. Y repetimos el proceso (p2,p3...) hasta que la distancia sea más pequeña de un valor (que se suele determinar adhoc). En el ejemplo sería p4.

Esta técnica funciona muy bien con objetos definidos de forma analítica mediante funciones de distancia. La obtención de la distancia en este caso suele ser muy poco costosa -depende del objeto-, pero por lo general permite no solo el renderizado a tiempo real en un hardware actual relativamente modesto, sino multitud de efectos (sombras volumétricas suaves, ambient occlusion, bordes difusos, humo...) de forma muy óptima.

Esta técnica, como todas las similares al ray-tracing, se adapta muy bien a los fragment shaders de las aceleradoras

Más detalles próximamente

Inicio