Soweit ich weiß, würde ein typisches interaktives Fachwerksystem umfangreiche Berechnungen erfordern, da jede Komponente das gesamte System betrifft. Ich denke, Sie könnten willkürlich bei einer bestimmten Anzahl von Iterationen auf Kosten der Genauigkeit in der Simulation anhalten, aber ich weiß nicht, ob dies der Ansatz ist, den diese Spiele verwenden (Bridge-Building-Spiele sind ein Beispiel für Traversensysteme). Auf der anderen Seite haben Spiele wie Dig oder Die ein ziemlich komplexes strukturelles System, das auch das Drehmoment (glaube ich) und die Komprimierung berücksichtigt, sehr schnell ist und auf sehr umfangreichen Systemen funktioniert. Ich denke, die grundlegenden Berechnungen könnten ähnlich sein, aber wenn nicht, interessieren mich beide Ansätze.
Weißt du, wie diese hergestellt werden? Haben sie eine willkürliche Einschränkung oder verwenden sie einen anderen Algorithmus? Ich denke auch, was auch immer euch einfällt, kann auf 3D-Systeme angewendet werden, aber wenn nicht oder wenn es nicht offensichtlich ist, gib bitte zumindest einen Hinweis darauf, wie du es für 3D verwenden könntest, da ich sowohl für 2D als auch für 3D daran interessiert bin Spiele.
Ich weiß, dass ich mich hier nicht bedanken soll, aber ich finde es unfair, Ihnen nicht wenigstens für Ihre Zeit im Voraus zu danken. Ich hoffe, dieser Absatz wird nicht entfernt.
BEARBEITEN: Wenn ich raten würde, würde Dig or Die Vektoren für jeden Block speichern und dann einen iterativen Algorithmus bis zu einem Punkt ausführen, an dem die zusätzliche Genauigkeit in der Simulation für die Grenzen des Systems bedeutungslos ist (z. B. Das System wäre ohnehin zu groß, um nicht zusammenzubrechen. Daher ist es durch eine halb willkürliche Anzahl von Iterationen begrenzt (da es auf der Anwendung basiert). Aber ich könnte mich irren.
Antworten:
Ich bin der Entwickler von Dig or Die, daher kann ich ein wenig mehr Details über die Spielphysik geben
In der Tat war der wichtigste Punkt die Leistung, da Sie im Spiel Tausende von physischen Blöcken bauen können, und sehr wichtig ist, dass ich andere Dinge komplexer simulieren muss (Regen / Wasser), damit ich nur sehr wenig CPU-Zeit für die Bauphysik sparen kann .
Also habe ich tatsächlich eine Art ... Ich weiß nicht, einen benutzerdefinierten persönlichen Algorithmus, der nicht sehr genau ist, aber für das Spiel gut genug funktioniert. Ich habe 1 Vektor für jeden Blockschnittpunkt (also ist jeder Block durch bis zu 4 Vektoren verbunden, einen auf jeder Seite davon). Jeder Block hat ein "Gewicht" und "schiebt" die Vektoren um ihn herum (gleich), so dass die Summe der Vektorgrößen gleich seiner Höhe ist. Wenn ein Block am Boden verankert ist, werden alle Kräfte / Gewichte, die in ihn hineingeschoben werden, niemals "zurückgeschoben", so dass das gesamte System bei genügend Iterationen natürlich ein Gleichgewicht findet. Das Gewicht / die Kraft "fließt" zu den Verankerungspunkten und verwaltet Änderungen an der Struktur sehr gut. Sie können das Ergebnis hier sehen (mit dem Ingame-Gegenstand "Eiffelgläser"):
Über Drehmomente simuliere ich es, indem ich die Kräfte übertrage, die horizontal übertragen werden. Es ist nicht perfekt, aber es reicht aus, um den großen Unterschied zwischen horizontal und vertikalem Bauen zu spüren
Aber ehrlich gesagt mag ich mein System nicht so sehr, in einigen Fällen ist es nicht sehr genau; hauptsächlich, weil ich die Komprimierung und Erweiterung nicht verwalte. Es gibt wahrscheinlich eine Möglichkeit, eine genauere Simulation als meine ohne mehr CPU durchzuführen, aber meine Fähigkeiten (und meine Zeit) waren sehr begrenzt, also habe ich getan, was ich konnte :-)
(PS: Sie raten sehr gut :-))
quelle
Ich persönlich hatte gute Erfolge mit der iterativen Entspannung . Ich denke, es folgt ziemlich gut den Gesetzen der Physik, wenn es um Objekte geht, die aus Aggregaten von Blöcken bestehen. Ich glaube, die BridgeBuilder- Serie basiert auf einer solchen Methode, obwohl ich keine Quelle habe, um dies zu bestätigen.
Iterative Entspannung wird häufig für Fachwerke verwendet , aber ich habe damit erfolgreich große feste Objekte (Beton) simuliert: Es ist ganz einfach ein Fachwerk, dessen Gelenke Last tragen, anstatt sich frei zu drehen.
Interessant ist, dass die Entspannung eine Technik zum Auflösen statischer Traversen ist, also genau. In dieser Hinsicht wird es verwendet, um iterativ eine Verschiebung zu berechnen, die eine Struktur ins Gleichgewicht bringt.
Der Mehrwert für ein Spiel (bei dem wir an dynamischen Umgebungen interessiert sind, weil statische Strukturen im Gleichgewicht langweilig sind) besteht jedoch darin, dass wir die Möglichkeit erhalten, die Gelenke der Struktur zwischen den einzelnen Iterationen tatsächlich zu verschieben , basierend auf den bisher berechneten Einschränkungen . Sie erhalten zwei Hauptvorteile:
Normalerweise stellt die statische Analyse die Hypothese einer kleinen Verformung auf , bei der sich die Struktur nicht weit von ihrem Ausgangszustand entfernt. Innerhalb dieser Grenzen ist die statische Analyse korrekt, da die Gelenke tatsächlich nicht stark verschoben sind . Wenn sich die Struktur jedoch unter bröckelndem Gewicht verformt, erhalten Sie mit einer nichtlinearen Simulation bis zum Ende genaue Ergebnisse, während Sie mit einem linearen Löser einfach einen ungültigen Zustand erhalten
Iterative Entspannung ist ganz einfach einzurichten, numerische Stabilität . Ich habe das RK4- Schema erfolgreich verwendet, um Stabilität mit großen Betonstrukturen zu erreichen. Der Nachteil ist, dass es aus Leistungsgründen normalerweise eine recht geringe Steifheit aufweist und sich daher manchmal wie weiches Gelee anfühlt.
quelle