Was ist Ray Marching? Verfolgt Sphere Tracing dasselbe?


31

Viele ShaderToy-Demos verwenden den Ray Marching-Algorithmus zum Rendern der Szene, aber sie sind oft sehr kompakt geschrieben und ich kann keine einfachen Beispiele oder Erklärungen finden.

Was ist Ray Marching? Einige Kommentare deuten darauf hin, dass es sich um eine Variante des Sphere Tracing handelt. Was sind die rechnerischen Vorteile eines solchen Ansatzes?

Antworten:


34

TL; DR

Sie gehören zu derselben Familie von Lösern, bei denen die Kugelverfolgung eine Methode des Strahlenmarschierens ist, die der Familienname ist.

Raymarching eine Definition

Raymarching ist eine Technik, die der traditionellen Raytracing-Technik ähnelt, bei der die Oberflächenfunktion nicht einfach zu lösen ist (oder ohne numerische iterative Methoden nicht möglich ist). Beim Raytracing schaust du nur die Schnittmenge der Strahlen nach, während du beim Raymarsch vorwärts (oder rückwärts und rückwärts) marschierst, bis du die Schnittmenge findest, genügend Samples hast oder was auch immer du zu lösen versuchst. Stellen Sie es sich wie eine Newton-Raphson-Methode zum Auffinden der Oberfläche vor oder summieren Sie sie, um eine variierende Funktion zu integrieren.

Dies kann nützlich sein, wenn Sie:

  • Müssen Volumenzahlen, die nicht einheitlich sind
  • Implizite Funktionen, Fraktale rendern
  • Rendern anderer Arten von parametrischen Oberflächen, bei denen der Schnittpunkt nicht im Voraus bekannt ist, z. B. Paralaxen-Mapping
  • Etc

Traditionelles Raymarchen

Bild 1 : Traditionelles Strahlenmarschieren zum Auffinden der Oberfläche

Zusammenhängende Posts:

Kugelverfolgung

Die Kugelverfolgung ist ein möglicher Ray-Marsch-Algorithmus. Nicht alle Raymarching-Anwendungen profitieren von dieser Methode, da sie nicht in ein solches Schema umgewandelt werden können.

Die Kugelverfolgung wird zum Rendern impliziter Oberflächen verwendet . Implizite Flächen werden auf einer gewissen Ebene einer stetigen Funktion gebildet. Im Wesentlichen die Gleichung zu lösen

F(X,Y,Z) = 0

Aufgrund dessen, wie diese Funktion an jedem Punkt gelöst werden kann, kann man die größtmögliche Kugel abschätzen, die in den aktuellen Marschschritt passen kann (oder wenn nicht genau einigermaßen sicher). Sie wissen dann, dass der nächste Marschabstand mindestens so groß ist. Auf diese Weise können Sie durch adaptive Ray-Marching-Schritte den Prozess beschleunigen.

Die Kugelverfolgung hat eine adaptive Schrittgröße

Bild 2 : Kugelverfolgung * in Aktion Beachten Sie, wie die Schrittgröße anpassungsfähig ist

Für weitere Informationen siehe:

* Vielleicht sollte es in 2d Circle Tracing heißen :)


1
Ich würde diesen Artikel von Scratchapixel für eine ausführliche Erklärung empfehlen
user18490

@ user18490s Link zu Scratchapixel wurde zu scratchapixel.com/lessons/advanced-rendering/… verschoben . Der Rest der Seite ( scratchapixel.com/index.php ) sieht ebenfalls nützlich aus.
WillC

15

Beim Ray Marching handelt es sich um einen iterativen Ray-Intersection-Test, bei dem Sie einen Strahl abfahren und nach Schnittpunkten suchen. Dieser Test wird normalerweise verwendet, um Schnittpunkte mit fester Geometrie zu finden , bei denen die Tests innerhalb und außerhalb schnell sind.

Bildbeschreibung hier eingeben
Bilder aus Rendering-Geometrie mit Relief-Texturen

Eine feste Schrittgröße ist ziemlich häufig, wenn Sie wirklich keine Ahnung haben, wo eine Schnittmenge auftreten kann, aber manchmal Stammsuchmethoden wie eine Binär- oder Sekantensuche verwendet werden. Oft wird eine feste Schrittgröße verwendet, um den ersten Schnittpunkt zu finden, gefolgt von einer binären Suche. Ich bin zum ersten Mal auf Ray Marching in der Pro-Pixel-Verschiebung gestoßen. Reliefkartierung von Nichthöhenfeld-Oberflächendetails ist eine gute Lektüre!

Bildbeschreibung hier eingeben

Es wird häufig mit Space-Jumping verwendet, einer Beschleunigungstechnik, bei der eine Vorverarbeitung einen Sicherheitsabstand ergibt, über den Sie sich entlang des Strahls bewegen können, ohne die Geometrie zu schneiden, oder noch besser, ohne die Geometrie zu schneiden und dann zu verlassen, damit Sie sie verpassen. Beispiel: Kegelschrittzuordnung und entspannte Kegelschrittzuordnung.

Die Kugelverfolgung kann sich auf einen impliziten Strahl-Kugel-Schnittpunkt-Test beziehen, ist aber auch der Name einer von John Hart, wie von @joojaa erwähnt, und von William Donnelly ( Per-Pixel-Verschiebungskartierung mit Abstandsfunktionen ) verwendeten Raumsprungtechnik , bei der a Die 3D-Textur kodiert Kugelradien, in denen keine Geometrie existiert.


Ha, los geht's, Bilder von anderen aufzunehmen ist effizienter als sie selbst zu zeichnen.
Joojaa

@joojaa Ja, schneller, wenn du dich erinnerst, wo sie waren, aber ohne das befriedigende Gefühl, es selbst zu tun: P. Außerdem habe ich diesen dummen Subpixel-Rendering-Fehler in Chrom, sodass der Text alle farbenfroh ist.
Jozxyqk

1
Nun, das Subpixel-Rendering ist etwas, was nicht gefragt wurde. Noch.
Joojaa

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.