Gibt es einen Algorithmus zum Verschieben von Scheitelpunkten entlang eines planaren Netzes, um einem Bereich mehr Scheitelpunkte zu geben, ohne die Form zu stark zu zerstören?


7

Derzeit spiele ich mit einer Geländetechnik namens Vector-Field Terrain herum, die für das Spiel Halo Wars erstellt und verwendet wurde. Ich habe die Technik erfolgreich neu erstellt. Ich habe jedoch Schwierigkeiten herauszufinden, wie die Scheitelpunktdichte für die Überhänge im Gelände angepasst werden kann.

Vektorfeld-Terrains leiden immer noch unter ähnlichen Problemen wie Höhenkarten-Terrains. Wo immer ein Scheitelpunkt mit einem vertikalen Skalar vorhanden ist, der sich zu stark vom Nachbarn unterscheidet, wird er UV-gestreckt.

Die Art und Weise, wie Vektorfeld-Terrains dies eliminieren, besteht darin, dass Sie umgebende Scheitelpunkte ziehen können, um dem Bereich mehr Auflösung zu verleihen, indem Sie ihm mehr Dichte verleihen, ohne die Topologie zu ändern.

Ich kann mir für mein ganzes Leben keinen Weg einfallen lassen, dies auf zerstörungsfreie und automatisierte Weise zu tun. Ich möchte in der Lage sein, die endgültige Form so nah wie möglich an der Quelle zu halten. Und ziehen Sie nur so viele Scheitelpunkte wie nötig ein, um dies zu korrigieren.

Kennt jemand Algorithmen zur Lösung dieses Problems?


1
Würde das wiederholte wiederholte Anstoßen aller Scheitelpunkte in Richtung der Mitte der benachbarten Scheitelpunkte Ihre Form zu sehr zerstören? Vielleicht nicht mit einer ausreichend hohen allgemeinen Neigung?
Tau

Antworten:


1

Eine Art Optimierungsalgorithmus sollte den Trick machen.

Ich gehe davon aus, dass dies keine zeitkritische Aufgabe ist, sondern während der Entwicklung oder Initialisierung, nicht während des Spiels. Außerdem wissen Sie, ob eine bestimmte Verteilung von Eckpunkten die endgültige Form nahe an der Quelle hält.

Im Idealfall verfügen Sie über eine Funktion, die jeder Konfiguration von Scheitelpunkten eine Nummer zuweist und schätzt, wie nahe die endgültige Form an der Quelle liegt. Nennen wir diese Funktion Figure of Merit (FOM). Sie möchten das FOM unter der Nebenbedingung optimieren, dass die Anzahl der Scheitelpunkte konstant bleibt.

Ich kann mir zwei Methoden vorstellen, einen gerichteten, gradientenbasierten Ansatz und einen randomisierten Monte-Carlo-Ansatz.

  1. Gerichteter, gradientenbasierter Ansatz

Die Positionskoordinaten jedes Scheitelpunkts des Vektorfeldgeländes sind die Parameter. Versuchen Sie, die Ableitungen des FOM in Bezug auf diese Parameter zu berechnen. Man kann die Ableitung numerisch approximieren, indem man die Positionen nur geringfügig ändert und entsprechende Unterschiede im FOM berechnet (endliche Differenzen).

Bewegen Sie sich dann ein wenig entlang dieser Verlaufsrichtung (dh wenden Sie Verlaufszeiten in einer geeigneten Schrittgröße an, um die Positionen zu aktualisieren). Wählen Sie die Schrittgröße so, dass das FOM am besten ist. Einige Scheitelpunkte können sehr nahe kommen, was bedeutet, dass sie durch eine geringere Anzahl von Scheitelpunkten ersetzt werden können.

Wiederholen Sie die Berechnung des Gradienten an den neuen Positionen und wiederholen Sie die Bewegung entlang der neuen Gradientenrichtung. (Siehe auch Gefälle .)

Dies ist geeignet, wenn Sie bereits in der Nähe der gewünschten Lösung sind und diese verfeinern möchten. Die Bewegung von Eckpunkten von / zu nahe gelegenen Regionen zu benachbarten Regionen, die sie benötigen, sollte hier berücksichtigt werden.

  1. Randomisierter Monte-Carlo-Ansatz

Methode 1 führt nur eine lokale Optimierung durch. Für eine globale Optimierung sind jedoch zufällige Änderungen der Eckpunkte möglicherweise besser geeignet. Induzieren Sie für jede Iteration drastischere, zufällige Änderungen. Zum Beispiel könnte man 10% der Eckpunkte vollständig auf andere zufällige Positionen umverteilen.

Der Trick ist: Akzeptieren Sie diese Änderungen nur, wenn sie das FOM verbessern, akzeptieren Sie sie nur mit einer sehr geringen Wahrscheinlichkeit, wenn sie das FOM verschlechtern. (Normalerweise verwendet man Exponential (-Constant * FOM-change) als Akzeptanzwahrscheinlichkeit (hier sollte FOM minimiert werden)).

Wiederholen Sie dies dann für eine lange Zeit und verfolgen Sie das beste Zwischenergebnis (Konfiguration mit dem besten FOM). Am Ende wählen Sie es. (Siehe auch Monte-Carlo-Methoden .)

Wenn Sie möchten, können Sie beide kombinieren, z. B. Methode 1 auf das Ergebnis von Methode 2 anwenden.

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.