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
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.
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 :)