Was ist der aktuelle Stand der Technik für das Raytracing von Höhenfeldern?

15

Im Laufe der Jahre gab es viele Veröffentlichungen zu verschiedenen Techniken zum Zeichnen von Höhenfeldern in einem Ray-Tracer. Einige Algorithmen durchlaufen das Raster direkt (oder über einen Quadtree). andere wandeln das Gelände in ein Polygonnetz um und verwenden einen Standardtest für die Schnittmenge von Strahlendreiecken. Die Forschung scheint sich in den letzten Jahren weiterentwickelt zu haben, und es ist schwierig, Artikel zu finden, die im letzten Jahrzehnt geschrieben wurden, aber das Gleichgewicht zwischen Arbeitsspeicher und Rechenleistung (sowohl CPU als auch GPU) ändert sich immer noch.

Welche Art von Algorithmus bietet heutzutage die beste Leistung auf High-End-Desktop-Computern? Oder wie unterscheiden sich die Leistungsmerkmale der derzeit besten Algorithmen, wenn es keine einzige Antwort gibt?

Dan Hulme
quelle
Screen-Space-Reflexionen: Erstellen Sie ein Höhenfeld mit dem Tiefen- und Einzelbildpuffer und zeichnen Sie es strahlverfolgt, um grobe Reflexionen zu erhalten. Ich weiß nichts über die Details, aber ich könnte mir vorstellen, dass Crysis, Killzone, in letzter Zeit Frostbite usw. eine ausgefeilte Technik angewendet haben, um es schnell zu bekommen. Hast du das untersucht?
David Kuri
1
@DavidKuri Danke, das ist ein guter Hinweis, wie man den Kernstrahl schnell zum Laufen bringt. Es sollte eine Menge Optimierungen für ein statischeres Höhenfeld geben, das bei der Verfolgung des Bildschirmbereichs nicht so gut funktioniert, z das deckt das ab.
Dan Hulme
Hey Dan BTW, suchst du nach CPU- oder GPU-Lösungen? Und Echtzeit- oder Nicht-Echtzeit-Rendering?
Alan Wolfe
@AlanWolfe Ich verwende GPU und Nicht-Echtzeit (dh maximaler Durchsatz anstelle der besten Bildqualität, die Sie in 16 ms erzielen können), aber ich stimme immer noch interessanten Antworten zu, die schnell auf der CPU oder in erster Linie für interaktive Renderer sind.
Dan Hulme
Sie können versuchen, ein vorzeichenbehaftetes Distanzfeld aus der Höhenkarte zu erstellen. Das ist im Grunde eine 3D-Textur, die den Abstand zur nächsten Oberfläche speichert. Dies ermöglicht es, "den Strahl schneller zu bewegen". Unreal Engine 4 verwendet diese
Option

Antworten:

11

Informationen zum aktuellen Stand der Technik finden Sie in diesem Artikel: "Maximale Mipmaps für schnelles, genaues und skalierbares dynamisches Höhenfeld-Rendering", Tevs et al. 2008

Die Grundidee ist, viel Platz zu überspringen, indem man den Maximalwert über große Geländeflächen kennt. Bleibt der Strahl darüber, fahren Sie mit dem nächsten großen Bereich fort.

In Abbildung 8 sehen Sie einen Vergleich der linearen Grundschritte mit den maximalen Mipmaps. Das lineare Stepping ergibt 200 Schritte, die auf einem modernen GPUS in Echtzeit ausgeführt werden können, jedoch tatsächlich langsam sind. Max Mipmaps machen dasselbe in ungefähr 10 Schritten, alle im Shader.

Rama
quelle
Ich akzeptiere diese Antwort, weil das Papier selbst gut ist und der Abschnitt "Verwandte Arbeiten" ziemlich umfassend erscheint. Auch wenn ich diese Technik nicht genau verwende, bin ich sicher, dass ich aus dieser und ihren Referenzen etwas für meinen Anwendungsfall zuschneiden kann.
Dan Hulme
Haben Sie Demos mit Maximum Mipmaps gefunden? Vielen Dank.
RaRaRa
Ich habe das Papier noch nicht gelesen, aber dieses "Maximum Mipmaps" klingt sehr ähnlich zu der Technik, die für das Cone Step Mapping verwendet wird (das die Parallaxenokklusionskartierung verbessert, indem große Bereiche dank Kegeln übersprungen werden).
Julien Guertault
@ JulienGuertault Ich würde sagen, das ist schlichtes HiZ-Tracing. Es ist eine sichere Methode, um sicherzugehen, was Sie getroffen haben. Aber nicht sehr schnell im Vergleich zu unsicheren Methoden wie der binären Suche.
v.oddou
3

Das Beste, was ich persönlich gesehen habe, ist das, was inigo quillez macht und was in Demoszenen verwendet wird. Ray Marschiere durch das Gelände und mache größere Schritte, je weiter du von der Kamera entfernt bist, da (normalerweise) Details in der Ferne weniger wichtig sind (Ausnahme: dünne Wände!). Er verwendet Penetrationsinformationen und andere leicht zu ermittelnde Metriken, um die Umgebungsokklusion und andere ausgefeilte Beleuchtungstechniken zu simulieren.

Hier ist eine Demo des in Aktion befindlichen Materials : https://www.youtube.com/watch?v=_YWMGuh15nE

Und hier ist IQs Seite über das Raymarchen im Gelände, die eine ziemlich interessante Lektüre ist: http://www.iquilezles.org/www/articles/terrainmarching/terrainmarching.htm

Übrigens ist in modernen Spielen die Technik der "Bildschirmraumreflexion" oft nur ein Strahlmarsch gegen den Z-Puffer der gerenderten Szene. Der Z-Puffer ist eigentlich nur ein Höhenfeld.

Ich habe auf der Siggraph 2014 einige Vorträge darüber gesehen, und während einige Leute ähnliche Techniken wie IQ verwendeten, machten einige Dinge nicht einmal so gut wie IQ, was interessant zu sehen war: P

Alan Wolfe
quelle
1
Der Algorithmus in Ihrem Link ist sehr einfach. Es sieht weniger anspruchsvoll aus als einige der Papiere, die ich aus den neunziger Jahren gefunden habe. Es sieht nach einem guten Ausgangspunkt aus, aber ich hoffe auf die leistungsstärkste Lösung für ein Produktionssystem, nicht nur auf einen "meinen ersten Raytracer".
Dan Hulme
Dieses Zeug wird in Demoscene-Code- und Bildschirmreflexionen in den fortschrittlichsten modernen Spielen verwendet. Der schnellste Code ist manchmal der einfachste. Ich würde es wegen seiner Einfachheit nicht abweisen. Es wird interessant sein zu sehen, ob Sie andere Antworten erhalten.
Alan Wolfe
2
Was in Ihrer Antwort fehlt, ist, dass IQ ein Standard-Höhenfeldnetz als erste Vermutung verwendet, um das Raymarchen des tatsächlichen Geländes zu starten. Er rendert zuerst eine Low-Poly-Version des Terrains mit Standardrasterung und führt dann einen Pixel-Shader über das Bild aus, der ab der gerasterten Tiefe abzüglich einer gewissen konservativen Schwelle ein Raymarchen durchführt. Dies ist der einzige Weg, um diese Echtzeit zu erreichen.
Benedikt Bitterli
Ich glaube, dass nur ein Teil von dem, was Sie sagen, wahr ist. Er verwendet Heuristiken basierend auf der Geländehöhe (zusammen mit der Entfernung von der Kamera), um zu bestimmen, wie weit der Strahl marschieren kann, aber soweit ich gehört habe, verwendet er keine Rasterung. Hier ist ein Beispiel für seine Arbeit, die keine Rasterung verwendet, aber das heißt nicht, dass es keine Implementierungen gibt, die Rasterung verwenden: shadertoy.com/view/MdX3Rr
Alan Wolfe
Ich bin ein wenig verwirrt darüber, dass es bei der Frage um Raytracing geht, und bei dieser Antwort geht es um Raymarschieren. Es gibt einen grundlegenden Unterschied zwischen den beiden und dem, was sie erreichen können.
Julien Guertault