He estado buscando sombreadores que se encuentran aquí shadertoy.com y la mayoría de los geniales tienen ruido y raymarch en común. No entiendo el código fuente en absoluto, pero realmente quiero. ¿Cómo funcionan estos sombreadores y cómo funciona el algoritmo raymarch? He buscado por todas partes y no puedo encontrar nada sobre el tema.
Gracias
shaders
algorithm
glsl
raymarching
jmasterx
fuente
fuente
Respuestas:
Probablemente sea más fácil de entender en contraste con el trazado de rayos.
Para hacer un primitivo con trazado de rayos, necesita una función que, dado el primitivo y el rayo de entrada, le indique exactamente dónde ese rayo golpea al primitivo. Luego puede probar el rayo contra todas las primitivas relevantes y elegir la intersección más cercana. Las CPU son buenas en esto.
Con raymarching, no tiene una función de intersección de rayos tan simple. Dado un punto en el rayo, puede estimar qué tan cerca está el punto de la superficie, pero no sabe exactamente cuánto necesita extender ese rayo para golpear la superficie.
Entonces, "marchas" paso a paso:
Comience en el "comienzo" del rayo: el plano cercano para la representación de la escena, o la intersección con el volumen delimitador si es solo un objeto en la escena. (P0 en el diagrama a continuación)
Evalúa tu función de distancia para obtener una estimación de lo cerca que estás de la superficie. (El círculo más grande en el diagrama)
Avanza a lo largo del rayo de acuerdo con tu estimación. El movimiento debe ser conservadormente corto, por lo que está seguro de que no atravesará la superficie en ningún lugar.
Ahora tiene un nuevo punto (P1 a continuación): obtenga una nueva estimación y repita.
Continúe obteniendo estimaciones y avanzando hasta llegar a una distancia umbral de la superficie, o hasta alcanzar el conteo máximo de pasos. (P4 a continuación)
Ahora tiene la profundidad de la superficie y puede inferir cosas como la normalidad / oclusión ambiental a partir de muestras cercanas, y usar estos datos para iluminar y colorear el píxel.
Diagrama de ejemplo de GPU Gems 2, capítulo 8
Debido a que cada rayo es independiente y usa (generalmente) solo información local en cada paso, está listo para paralelizar las GPU. A menudo, solo se dibujarán dos triángulos en la pantalla. Después de rasterizarlos, cada píxel pasado al sombreador de fragmentos representa un solo rayo. El sombreador de fragmentos marcha ese rayo hasta que alcanza la superficie, devolviendo el resultado (a menudo solo el valor de profundidad para texturizar y sombrear en una pasada de pantalla completa separada).
Los pasos exactos dependen mucho del efecto particular que intente lograr. Las técnicas de Raymarching se utilizan con ...
Raymarching también se usa con mezclas en cada paso (a menudo usando pasos fijos en lugar de estimar una distancia cada vez) para representar la translucidez volumétrica, como en este ejemplo de Wikipedia .
Esto se ha convertido en una forma popular de representar nubes detalladas en tiempo real .
Incluso el mapeo interior , una forma de simular los detalles de la habitación interior detrás de las ventanas del edificio, podría considerarse una forma de marcado de rayos, donde el rayo se coloca desde el punto en que ingresa a la ventana hasta la pared, piso / techo o plano de muebles más cercano.
Si hay un tipo específico de efecto de marcado de rayos que le interese, probablemente pueda obtener respuestas más detalladas haciendo una nueva pregunta con ejemplos específicos. Como familia, la técnica es demasiado diversa para cubrir todo en una respuesta breve. ;) Espero que esto le brinde un marco para comprender lo que sucede debajo del capó en estos sombreadores.
fuente