In einer früheren Frage wurde vorgeschlagen, vorzeichenbehaftete Distanzfelder vorab zu berechnen, zur Laufzeit zu laden und dann von dort aus zu verwenden.
Aus Gründen, die ich am Ende dieser Frage erläutere (für interessierte Personen), muss ich die Distanzfelder in Echtzeit erstellen.
Es gibt einige Veröffentlichungen zu verschiedenen Methoden, die in Echtzeitumgebungen praktikabel sein sollen, z. B. Methoden für Fasenabstandstransformationen und auf Voronoi-Diagrammen basierende Transformationen (wie in dieser Präsentation vom Entwickler von Pixeljunk Shooter vorgeschlagen ) Ich (und somit kann man davon ausgehen, dass viele andere Menschen) haben es sehr schwer, sie tatsächlich zu benutzen, da sie normalerweise lang sind, stark von Mathematik überfüllt und in ihrer Erklärung nicht sehr algorithmisch.
Welchen Algorithmus schlagen Sie vor, um die Distanzfelder in Echtzeit (vorteilhafterweise auf der GPU) zu erstellen, insbesondere unter Berücksichtigung der resultierenden Qualität der Distanzfelder?
Da ich auf der Suche nach einer tatsächlichen Erklärung / Anleitung im Gegensatz zu einem Link zu einer anderen Arbeit oder Folie bin, erhält diese Frage ein Kopfgeld, sobald sie für eine berechtigt ist :-).
Hier ist, warum ich es in Echtzeit tun muss:
Wenn Sie diese SDFs für große 2D-Umgebungen vorberechnen müssen (denken Sie an eine große Terraria-ähnliche Karte), würde dies bedeuten, dass Sie einen relativ hohen Overhead an Speicherplatz (und Zeit für die Kartenerstellung) akzeptieren, um mehr zu implementieren komplizierter Algorithmus, der schnell genug für die Echtzeit-SDF-Generierung ist.
Zum Beispiel würde eine relativ kleine Karte mit 1000 * 256 (Breite * Höhe) mit einer Kachelgröße von 10 * 10 Pixeln und somit Gesamtabmessungen von 10000 * 2560 Pixeln Sie bereits ungefähr 2 Megabyte an Größe kosten, wenn Sie eine relativ kleine auswählen SDF-Auflösung von 128 x 128, vorausgesetzt, Sie speichern nur die Entfernungswerte von 0 bis 255.
Offensichtlich kann dies schnell zu viel werden und ist ein Aufwand, den ich nicht haben möchte.
Es gibt noch etwas anderes:
SDFs können für viele Zwecke verwendet werden (z. B. zur Erkennung von Kollisionen), und einige nützliche Anwendungen werden möglicherweise noch nicht einmal entdeckt. Ich denke, viele Menschen werden in Zukunft nach diesen Dingen suchen, und wenn wir hier eine umfassende Antwort erhalten, werden wir wahrscheinlich vielen Menschen helfen.