Last updated on

Wat is Ray Marching? Een eenvoudige introductie

ENNLESPT-BR


Ray marching is een renderingtechniek die een straal in herhaalde discrete stappen door een scène beweegt, waarbij op elke positie de scène wordt bemonsterd om oppervlakken te vinden, volumetrische effecten te accumuleren of te testen tegen een gesigneerd afstandsveld (SDF). In tegenstelling tot ray tracing, dat analytische straal-oppervlakte-botsingen berekent tegen expliciete geometrie zoals driehoeken of bollen, werkt ray marching iteratief: voor elke straal zet het algoritme stappen langs de richting, controleert op elke positie of de straal iets heeft geraakt, en stopt zodra het een oppervlak vindt of een maximum aantal stappen bereikt.

De Kernlus

Elke ray marcher herhaalt dezelfde basisreeks:

  1. Stel de afgelegde afstand t = 0 in.
  2. Bemonster de scène op het huidige punt langs de straal.
  3. Als de bemonstering dicht genoeg bij een oppervlak ligt, rapporteer dan een treffer.
  4. Kies anders een stapafstand, schuif t op met dat bedrag en herhaal.
  5. Stop na een maximale afstand of een maximum aantal stappen.

Die lus is verrassend algemeen. Dezelfde structuur drijft SDF-gebaseerde oppervlakterendering, volumetrische nevelaccumulatie en procedurele shaderkunst. Wat tussen deze toepassingen verandert, is alleen hoe de stapafstand wordt gekozen en wat de bemonstering het algoritme vertelt om vervolgens te doen. De volledige interactieve ray marching tutorial verkent elke variant met gedetailleerde visualisaties.

Marsstrategieën

Er zijn twee gangbare manieren om de stapafstand te kiezen:

Fixed-step marching beweegt elke iteratie met dezelfde kleine afstand vooruit. Het is eenvoudig te implementeren en werkt voor elke scènerepresentatie: je bemonstert op elke positie en controleert op een oppervlak. Het nadeel is efficiëntie: kleine stappen zijn veilig bij dunne details, maar verspillen werk in lege ruimte, terwijl grote stappen het risico lopen oppervlakken over te slaan. Fixed-step marching wordt meestal gebruikt voor volumetrische rendering (nevel, rook, vuur), waarbij je dichtheid over de hele straal moet accumuleren in plaats van één oppervlak te vinden.

Sphere tracing gebruikt een gesigneerd afstandsveld (SDF) om de stapafstand adaptief te bepalen. Op elk bemonsteringspunt geeft het SDF de kortste afstand tot het dichtstbijzijnde oppervlak terug. Omdat er binnen die straal geen oppervlak bestaat, kan de straal precies met die afstand vooruit springen zonder iets over te slaan. Dit maakt sphere tracing aanzienlijk efficiënter dan fixed-step marching in typische oppervlakterenderingscènes: de straal neemt grote sprongen door lege ruimte en verkleint vanzelf zijn stappen bij het naderen van geometrie.

De visualisatie hieronder toont sphere tracing in actie. De paarse ring op elk bemonsteringspunt is de SDF-afstand op die positie: de straal springt naar de rand van die ring en evalueert vervolgens het veld opnieuw.

Distance-Guided Stepping

Drag the circle or the ray arrow to see how the marcher advances by safe distances.

SDF value0.00 surface-0.16+1.25

De bijwerkingsregel voor sphere tracing is opvallend compact:

pn+1=pn+d(pn) r^p_{n+1} = p_n + d(p_n),\hat{r}

waarbij pnp_n de huidige positie is, d(pn)d(p_n) de SDF-afstand op dat punt, en r^\hat{r} de richting van de straal. De volgende positie is simpelweg de huidige positie, vooruitgeschoven met de afstand tot het dichtstbijzijnde oppervlak, in de richting waarin de straal reist.

Veelvoorkomende Toepassingen

Ray marching komt het vaakst voor in deze gebieden:

  • Procedurele scènes en shaderkunst: geometrie gedefinieerd door formules in plaats van opgeslagen meshes, gepopulariseerd door sites zoals Shadertoy.
  • Fractaalrendering: fractalen zoals de Mandelbulb hebben geen analytische snijpuntsformules, maar wel praktische afstandsschatters, waardoor ze natuurlijke kandidaten zijn voor sphere tracing.
  • Volumetrische rendering: nevel, rook, wolken en vuur worden gerenderd door dichtheid langs de straal te accumuleren met fixed-step marching, waarbij transparantie en belichting op elk bemonsteringspunt worden berekend.
  • SDF-gebaseerd modelleren: scènes opgebouwd uit het combineren van primitieve gesigneerde afstandsvelden (unie, doorsnede, aftrekking) met vloeiende mengingen en vervormingen.

Voor een volledige uitleg over hoe gesigneerde afstandsvelden werken, hoe sphere tracing veilige stappen garandeert, en hoe SDF-oppervlakken worden belicht, zie de volledige interactieve ray marching tutorial.