Physiksimulationen mit verschiedenen Koordinatensystemen verbinden

9

Ich möchte, dass sich Objekte zwischen zwei Physiksimulationen durch ein "Fenster" bewegen und mit denen beider Simulationen kollidieren, falls sie die Fensterebene schneiden.

Die Koordinatensysteme der Simulationen haben nicht den gleichen Ursprung und können eine andere Ausrichtung haben. Eine Simulation in sich selbst zu packen ist nicht notwendig, wäre aber ein Plus.

Wie verbinde ich die Systeme effizient, ohne die einzelnen Objekte zu klonen?

Bearbeiten:

Die Berechnungen sollten so genau wie möglich sein, damit Objekte nicht hängen bleiben, wenn sie gleichzeitig von entgegengesetzten Seiten über das Fenster laufen.

Tamschi
quelle
Die erste Frage wäre, ob die physikalische Simulation über das Fenster hinweg genau sein soll. Weil die Orientierungsänderungen einen richtigen Sweep ziemlich unmöglich machen. Es ist ein bisschen wie das Ändern von Portalen - eine Welt möglicher Schmerzen. Zweite Frage: Unterschiedliche Ausrichtung, wie bei willkürlichen oder zumindest bei 90 Grad Winkeln, nur ein Achsentausch?
Kaj
Das klingt nach einem Problem, das sie im Portal angehen mussten. Wenn ich mich richtig erinnere, erwähnen sie diese Probleme und wie sie sie in einigen Kommentaren im Spiel gelöst haben. Sie können diese wahrscheinlich irgendwo online finden.
Nagler
@Kaj Ich denke, es wäre am besten, den Berechnungspfad für beliebige und rechtwinklige Übergänge aufzuteilen. Auf diese Weise könnten die rechtwinkligen eine höhere Präzision und Geschwindigkeit haben, während andere Winkel ebenfalls möglich wären.
Tamschi
@Nailer Wenn ich mich richtig erinnere, haben sie beim Öffnen des Portals eine neue Physikumgebung erstellt und dann jedes Physikobjekt geklont, das sich dieser zusätzlichen Simulation näherte. Sie sagten, sie hätten die Objekte irgendwie eingeschränkt, aber es ist sehr wahrscheinlich, dass sie nur die Kräfte und Positionen jedes Physikschritts transformieren. <br> Ich bin mir ziemlich sicher, dass sie aufgrund der Art und Weise, wie sich die Spieler bewegen, einen dritten Klon am Ziel erstellen in Quelle simuliert.
Tamschi

Antworten:

2

Es gibt dieses coole Projekt namens Pseudoform, früher bekannt als "Portalized", das Physiksimulationen unter Verwendung von Portalen auf groovige Weise handhabt:

Pseudoform

Hör zu!

Besonders die Videos - es ist erstaunlich cool.

Es ist Open Source, so dass Sie sehen können, wie sie es tun.

Ich wette, das ist was du willst. :) :)

Jacmoe
quelle
2
Ich habe gerade den Code durchgelesen: Die Art und Weise, wie sie es tun, ist fast wie die Lösung von Valve, aber ohne die zusätzliche physikalische Umgebung. Portale in der Portalized Engine erstellen ein Duplikat eines Objekts, sobald es die Portaloberfläche berührt, und löschen es dann, sobald es das Portal für eine bestimmte Zeit verlassen hat. Diese Antwort ist immer noch hilfreich: Die zum Einschränken der Duplikate verwendete Verbindung zeigt, wie das Objekt im Portal transformiert wird.
Tamschi
0

Okay - ich weiß nicht, ob das funktionieren würde.
Basierend auf den obigen Informationen würde ich Trigger auf die 'Fenster' setzen, damit ich erkennen kann, wann ein Objekt eine Welt verlässt. Erfassen Sie den aktuellen Geschwindigkeitsvektor zum Zeitpunkt der Kollision. Berechnen Sie den verbleibenden Zeitschritt basierend darauf, wo er den Auslöser gedrückt hat und wo er in diesem Frame gelandet ist (außerhalb der Welt würde Ihre Welt einen virtuellen Rand benötigen, um dies zu ermöglichen). Zu diesem Zeitpunkt kennen Sie die Geschwindigkeit und den verbleibenden Zeitschritt, sodass Sie ihn an der Grenze der Welt, in die er eintreten soll, neu positionieren und die Geschwindigkeit neu projizieren können. Dies würde jedoch zwei physikalische Aktualisierungen in einem Frame erfordern, und es würde den Grenzfall eines Objekts geben, der von a nach b geht, während ein anderes an derselben Position von b nach a geht - es würde überhaupt keine Kollision erkannt.
Ein bisschen lückenhaft,

Kaj
quelle
Dies scheint der schnellstmögliche Weg zu sein, aber es gibt ein Problem, wenn zwei Objekte das Fenster von derselben Seite überqueren: Wenn das erste Objekt auf halbem Weg über die Grenze stecken bleibt, kollidiert das zweite Objekt erst, wenn es die Grenze erreicht. auch und erscheinen in der ersten am Ziel.
Tamschi
Leicht bearbeitet, während Sie das tippten, und das war in der Tat das Problem, das ich hinzugefügt habe: o \
Kaj
Ich muss lesen lernen. Mein Zusatz war ein weiterer Grenzfall. Wird nachdenken.
Kaj
Nein, die Grenze liegt außerhalb der Welt. Objekt 1 würde also mit seiner eigenen Geschwindigkeit in Welt 2 (von der Grenze von Welt 2 - nicht an der Fensterposition) geschossen, ebenso wie Objekt b. Sie würden in Welt 2 an der Grenze richtig kollidieren ... Ich denke: o? Mein eigener Grenzfall gilt jedoch immer noch.
Kaj
Scheint, als hätte ich den Teil über die virtuelle Grenze falsch verstanden. Auf jeden Fall gibt es ein anderes Problem, wenn ein Objekt stecken bleibt. Der Teil auf der Rückseite des Zielfensters wird weiterhin an der ursprünglichen Position gerendert, aber Objekte, die den Rand nicht berühren, kollidieren nicht damit. Eine Möglichkeit, diese Probleme zu lösen, wäre die Vereinheitlichung der Simulationen, aber ich bin mir nicht sicher, wie dies effizient durchgeführt werden kann.
Tamschi
0

Ich habe einige Infos zu Physiksimulationen gelesen und eine mögliche Lösung gefunden. Es funktioniert, indem jeder Physikschritt in drei Phasen aufgeteilt wird:

1. Vorschritt:

In jedem Physikschritt erstellt ein Fenster vier Transformationen, zwei für jede Seite der Verbindung:

  • eine Eingabetransformation, die die Position, Geschwindigkeit (und möglicherweise Größe und Gewicht) eines Objekts in das Zielkoordinatensystem und transformiert
  • Eine Ausgabetransformation, die Kräfte zurück in das ursprüngliche System des Objekts transformiert.

(Statische Fenster müssen dies nur einmal tun.)

Zusätzlich werden Objekte in jedem Koordinatensystem in drei Gruppen unterteilt:

Physik-Gruppierung http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png

  1. Objekte vor dem Fenster (grün).
    Ein Objekt wird auch zu dieser Gruppe gezählt, wenn es die Fensterebene schneidet oder sie wahrscheinlich hinter dem Fenster kreuzt (nicht gezeigt).

  2. Objekte, die das Fenster schneiden oder wahrscheinlich in diesem Physikschritt schneiden (orange).

  3. Objekte hinter dem Fenster (blau). Wenn ein Objekt zur Rückseite des Fensters fliegt, wird es weiterhin als Mitglied der dritten Gruppe markiert.

Die Gruppierung kann vereinfacht werden, wenn sich das Fenster am Rand der Simulation befindet.

2. Hauptschritt:

Die Physik wird mit wenigen Ausnahmen meist wie gewohnt berechnet:

  • Objekte aus der zweiten Gruppe kollidieren niemals mit Objekten aus der dritten und umgekehrt.

  • Die Eingabetransformation des Fensters wird für die Objekte aus der zweiten Gruppe verwendet, und die Ergebnisse werden anhand der Front- und Schnittobjekte aus dem Zielsystem ausgewertet. Die resultierende Kraft wird mithilfe der Ausgabetransformation transformiert und auf das ursprüngliche Objekt angewendet.

(Wenn ein Objekt während der Berechnung getroffen wird, muss es neu gruppiert werden!)

3. Nach dem Schritt:

Wenn ein Objekt aus der zweiten Gruppe das Fenster überquert hat, wird es mithilfe der Eingabetransformation in das Zielsystem verschoben.

Zusätzliche Gedanken:

Wenn die Transformationen nach der Berechnung der Physik erhalten bleiben, können sie zur Beschleunigung des Renderns und zur Erleichterung der KI-Berechnungen verwendet werden. Die Gruppierung kann verwendet werden, um Clip-Ebenen aus dem Renderprozess zu entfernen.

Der Nachteil dieser Lösung ist, dass die Fenster direkt in die Physik-Engine eingefügt werden müssen.

Tamschi
quelle