Objekte in Ruhelage spawnen

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.

Objekte in Ruhelage spawnen

Beitragvon Krishty » 20.09.2015, 23:49

Ich möchte ein Auto in meiner Landschaft spawnen. Ich kenne die horizontalen Koordinaten, und ungefähr die vertikale. Und kann beliebig Kollisionstests mit meiner Landschaft durchführen.

Nun erzeuge ich das Auto. Aber es befindet sich etwas zu weit über dem Boden, oder etwas zu tief. Dadurch können die Federn nicht ganz gegenhalten, oder drücken zu stark gegen, und es hüpft. Nach einer halben Sekunde hat es sich dann in Ruhelage eingependelt.

Was tue ich nun, um es ohne Hüpfer zu spawnen, direkt mit richtiger Position und Rotation und Federkompression?

Mein erster Gedanke war, dass ich einfach das Gewicht berechne, auf die verschiedenen Federn verteile, deren Kompression ausrechne, und dann die Höhe zum Spawnen habe. Das geht aber nur, wenn alle Federn gleich lang sind, denn wenn das Auto z.B. hinten schwer beladen ist, bewirkt das ein Drehmoment, das in der Berechnung leider völlig vernachlässigt ist.

Mein zweiter Gedanke war, die Physik zu simulieren bis das Objekt in Ruhe ist, und dann erst zu spawnen. Ganz ab von der furchtbaren Performance kann es aber auf schrägen Flächen zu rollen anfangen und dann erst einen Kilometer entfernt im Tal zur Ruhe kommen.

Wie löst man das normalerweise? Ich hätte an ein Gleichungssystem mit allen Federstärken gedacht, aber auch da weiß ich nicht, wie man das Drehmoment einkalkulieren könnte …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6341
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Objekte in Ruhelage spawnen

Beitragvon Tiles » 21.09.2015, 09:48

Wie wäre es mit einem Raycast? Wenn Auto zu hoch, setze Auto ein Stück nach unten. Wenn Auto zu tief, setze Auto ein Stück hoch. Eventuell könntest du da auch etwas trixen, indem du erst mal ein Nullobjekt erzeugst und das mittels Raycast passend positionierst. Dann spuckt dir nicht die Fahrzeug Physik dazwischen. Und wenn das dann auf Position ist spawnst du das Auto auf Position des Nullobjekts.

Obiges sollte zumindest bei ebenem Gelände funktionieren. Bei unebenem Gelände könntest du den Raycast von den Reifen aus machen. Da wird es dann allerdings ein wenig verzwickter alles passend einzustellen. Aber es geht ja um die Idee :)
Free Gamegraphics, Freeware Games http://www.reinerstilesets.de
Die deutsche 3D Community: http://www.3d-ring.de
Benutzeravatar
Tiles
Establishment
 
Beiträge: 1146
Registriert: 11.01.2003, 14:21

Re: Objekte in Ruhelage spawnen

Beitragvon Alexander Kornrumpf » 21.09.2015, 10:15

Krishty hat geschrieben:Mein zweiter Gedanke war, die Physik zu simulieren bis das Objekt in Ruhe ist, und dann erst zu spawnen. Ganz ab von der furchtbaren Performance kann es aber auf schrägen Flächen zu rollen anfangen und dann erst einen Kilometer entfernt im Tal zur Ruhe kommen.

Wie löst man das normalerweise?


Wieso ist es für die Perfomance schlechter das Auto unsichtbar zu spawnen als sichtbar? Wenn die Engine das Auto später simulieren kann, dann kann sie es auch während des Spawn-Vorgangs?! [Je nach gewünschtem Effekt musst du auf Kollision ggf. anders reagieren als gewöhnt, aber das ist ja eine Brot und Butter Aufgabe für Physik Engines]

Gegen das Wegrollen hat mein Auto eine Handbremse. Mit angezogenen Handbremse unsichtbar spawnen, warten bis in Ruhe, sichtbar machen, Handbremse lösen, Profit???
Alexander Kornrumpf
Moderator
 
Beiträge: 1615
Registriert: 25.02.2009, 14:37

Re: Objekte in Ruhelage spawnen

Beitragvon Chromanoid » 21.09.2015, 11:33

Viele Physikengines haben aus Performance-Gründen ja meist auch so eine Art Schlafmodus für Objekte. Vielleicht reicht es Dir ja den zu aktivieren, so dass das Gezuckel erst bei der ersten Fremdeinwirkung auf das Auto los geht.
Benutzeravatar
Chromanoid
Christian Kulenkampff
Moderator
 
Beiträge: 3686
Registriert: 16.10.2002, 19:39
Wohnort: Lüneburg
Alter Benutzername: atr_23

Re: Objekte in Ruhelage spawnen

Beitragvon B.G.Michi » 21.09.2015, 13:23

Gegen das Wegrollen kannst du vor dem Spawnen eine Zwangsbedingung erzeugen, die die x- und y-Koordinate des Schwerpunktes des Autos fixiert. Hat das Auto seine Ruhelage erreicht (nach einer bestimmten Zeit oder wenn es sich nicht mehr signifikant bewegt) löscht du die Zwangsbedingung. Die Performance sollte eigentlich akzeptabel sein, da du ja nur das eine Auto simulieren musst und nicht die ganze Welt.
Benutzeravatar
B.G.Michi
Establishment
 
Beiträge: 160
Registriert: 07.03.2006, 21:38
Alter Benutzername: B.G.Michi

Re: Objekte in Ruhelage spawnen

Beitragvon Alexander Kornrumpf » 21.09.2015, 14:34

B.G.Michi hat geschrieben:Gegen das Wegrollen kannst du vor dem Spawnen eine Zwangsbedingung erzeugen, die die x- und y-Koordinate des Schwerpunktes des Autos fixiert. Hat das Auto seine Ruhelage erreicht (nach einer bestimmten Zeit oder wenn es sich nicht mehr signifikant bewegt) löscht du die Zwangsbedingung.


Brute Force Handbremse.

Die Performance sollte eigentlich akzeptabel sein, da du ja nur das eine Auto simulieren musst und nicht die ganze Welt.


Ich würde das "in production" simulieren, nicht in einer eigenen Instanz der Simulation. Ich verstehe jetzt allerdings wieso Performance überhaupt ein Problem sein sollte, danke.
Alexander Kornrumpf
Moderator
 
Beiträge: 1615
Registriert: 25.02.2009, 14:37

Re: Objekte in Ruhelage spawnen

Beitragvon DerAlbi » 21.09.2015, 16:13

Nur mal so als Randinfo: Ubisoft hat das im FarCry3-Multiplayer bei den Fahrzeugen auch nicht auf die Reihe bekommen. Dort springen oder fallen die Autos nach dem Spawnen auch sinnlos durch die Gegend, sobald der Spieler daran stößt (und somit die Physik initialisiert) und jedes mal krachts und scherbelts..
DerAlbi
Establishment
 
Beiträge: 205
Registriert: 20.05.2011, 05:37

Re: Objekte in Ruhelage spawnen

Beitragvon Krishty » 22.09.2015, 01:25

Tiles hat geschrieben:Obiges sollte zumindest bei ebenem Gelände funktionieren. Bei unebenem Gelände könntest du den Raycast von den Reifen aus machen. Da wird es dann allerdings ein wenig verzwickter alles passend einzustellen. Aber es geht ja um die Idee :)
Und genau da wird es dann WIRKLICH verzwickt, mit Drehmomenten und Rotation des Fahrzeugs :)

Alexander Kornrumpf hat geschrieben:Wieso ist es für die Perfomance schlechter das Auto unsichtbar zu spawnen als sichtbar? Wenn die Engine das Auto später simulieren kann, dann kann sie es auch während des Spawn-Vorgangs?!
Ich verstehe jetzt allerdings wieso Performance überhaupt ein Problem sein sollte, danke.
Da ist man mal einen Nachmittag NICHT auf ZFX und sofort werden alle Fragen doppelt gestellt ;) Ein Problem ist es, weil diese Simulation nicht in Echtzeit läuft (wie sonst) sondern rapide beschleunigt, damit das Fahrzeug auch wirklich am Ende des Frames, in dem es in Sichtweite kommt, in Ruheposition steht. (Bzw. in dem Augenblick, in dem sein LOD hoch genug wird, sich um Physik zu scheren). Ich mutmaße – ich kann’s nicht wissen, aber ich frage hier ja, damit ich nicht jeden Fall erst implementieren muss ;) – bei mehr als einem Auto, das in Sicht kommt, äußert sich das dann als kleiner Ruckler, weil ja die 60-fache Menge Physik berechnet werden muss.

Gegen das Wegrollen hat mein Auto eine Handbremse. Mit angezogenen Handbremse unsichtbar spawnen, warten bis in Ruhe, sichtbar machen, Handbremse lösen, Profit???
Die Handbremse funktioniert aber nur, so lange das Auto bereits ausbalanciert ist. Wenn die Räder nicht den Boden berühren, weil das Auto vom Boden abprallt, bringt dir die Handbremse nichts (da sind B.G.Michis Zwangsbedingungen schon wirkungsvoller). Du kannst das damit vergleichen, dass du einen Klotz zwar sanft auf einem steilen Hang positionieren kannst, ohne dass er runterrollt. Aber sobald du ihn aus einem Zentimeter Höhe auf die selbe Position fallen lässt, kullert er runter und kommt werweißwo zum Stehen.

Chromanoid hat geschrieben:Viele Physikengines haben aus Performance-Gründen ja meist auch so eine Art Schlafmodus für Objekte. Vielleicht reicht es Dir ja den zu aktivieren, so dass das Gezuckel erst bei der ersten Fremdeinwirkung auf das Auto los geht.
DerAlbi hat geschrieben:Nur mal so als Randinfo: Ubisoft hat das im FarCry3-Multiplayer bei den Fahrzeugen auch nicht auf die Reihe bekommen. Dort springen oder fallen die Autos nach dem Spawnen auch sinnlos durch die Gegend, sobald der Spieler daran stößt (und somit die Physik initialisiert) und jedes mal krachts und scherbelts..
Abgesehen davon, dass es hässlich wirkt, macht es auch Gameplay-Probleme – z.B. scheppert es bei Spielstart scheinbar grundlos, weil das Auto mit dem Spieler drin erstmal zu Boden fällt. Dann gibt es, sagen wir, ein Achievement, sobald alle Räder in der Luft sind. Auch das wird sofort im dritten oder vierten Frame ausgeteilt, weil das Auto da vom Boden abprallt. Und der Spieler so: WTF?! Und nein, ich baue keine Sekunde stummen Blackscreen am Level-Anfang ein ;) Ich brauche Spawning ja auch zwischendurch.

Also wenn der Tenor in Richtung „Simulier ein paar Sekunden“ geht, werde ich morgen eine abgespeckte Simulation (keine Fremdeinwirkung, kein Schaden, einfach nur Terrain vs. Reifen) mit Zwangsbedingung (X und Z nach jeder Iteration wieder wie vorher) einbauen und schauen, wie’s läuft.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6341
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Objekte in Ruhelage spawnen

Beitragvon Tiles » 22.09.2015, 09:22

Und genau da wird es dann WIRKLICH verzwickt, mit Drehmomenten und Rotation des Fahrzeugs :)


:P

Zumindest könntest du über einen Raycast schon mal verhindern dass das Auto, bzw. die Räder im Gelände steckt. Oder das Ganze zu weit in der Luft schwebt und runterplumpst.

Ich würde wohl die Physik erst mal abschalten und das Auto ohne Physik spawnen. Dann die Raycasts von den Reifen aus starten um die Lage des Autos am Gelände anzupassen. Mittelwert zwischen den linken Reifen und den rechten Reifen um die Seitenneigung des Autos zu ermitteln. Mittelwert von vorn und hinten um die Frontneigung zu ermitteln. Auto passend hinrotieren. Mittelwert von allen vier Casts um das Auto passend abzusenken oder anzuheben. Und dann noch mal die Reifen einzeln in der Höhe nachjustieren und die entsprechenden Drehmomente annähern. Und wenn ich damit die Sache einigermassen angenähert habe dann die Physik wieder anschmeissen. Und dann ein wenig rumexperimentieren mit welchen Werten das Ganze am wenigsten springt. Soweit die Theorie, ich habs auch noch nicht gemacht :D

Und ganz kriegst du die Ruckler vermutlich eh nicht weg. Die Physik wird immer ihre Spässe treiben, und sei es wegen Floatingpoint Ungenauigkeiten. Aber das sollte sich doch brauchbar minimieren lassen :)
Free Gamegraphics, Freeware Games http://www.reinerstilesets.de
Die deutsche 3D Community: http://www.3d-ring.de
Benutzeravatar
Tiles
Establishment
 
Beiträge: 1146
Registriert: 11.01.2003, 14:21

Re: Objekte in Ruhelage spawnen

Beitragvon Alexander Kornrumpf » 22.09.2015, 10:55

Krishty hat geschrieben: Ein Problem ist es, weil diese Simulation nicht in Echtzeit läuft (wie sonst) sondern rapide beschleunigt, damit das Fahrzeug auch wirklich am Ende des Frames, in dem es in Sichtweite kommt, in Ruheposition steht. (Bzw. in dem Augenblick, in dem sein LOD hoch genug wird, sich um Physik zu scheren). Ich mutmaße – ich kann’s nicht wissen, aber ich frage hier ja, damit ich nicht jeden Fall erst implementieren muss ;) – bei mehr als einem Auto, das in Sicht kommt, äußert sich das dann als kleiner Ruckler, weil ja die 60-fache Menge Physik berechnet werden muss.


Und nein, ich baue keine Sekunde stummen Blackscreen am Level-Anfang ein ;) Ich brauche Spawning ja auch zwischendurch.


Ja, dass du das so sehen würdest war klar. Ich in deiner Situation würde sehr sehr gründlich darüber nachdenken ob es nicht reicht, das Fahrzeug in der normalen-Echtzeit-live-production Simulation mitzusimulieren, bis die Simulation stabil ist (ggf. nicht dasselbe, wie Auto in Ruhe). Ich gehe davon aus, dass das, wenn du es geschickt machst, nach wenigen Zyklen der Fall ist und man die Wartezeit für den Spieler akzeptabel gestalten kann. (Einschub: Levelanfang ist eine Sondersituation. Deine Optimierungsfähigkeiten in allen Eheren aber auch dein Level läd nicht instantan. Es ist physikalisch nicht möglich. Also versteck die paar Zyklen da, wo du den Rest des Level-Ladens versteckst. Andererseits wundert es mich _sehr_ dass deine Simulation bis auf das Auto von Anfang an stabil sein sollte. Ein paar Zyklen warm-up brauchst du doch so oder so?!) Letztlich ist alles akzeptabler als das was DerAlbi von FarCry beschreibt. Andererseits hab ich noch nie ein Spiel gespielt in dem spawnen ein Gameplay Element ist also YMMV.

Wichtig ist ja, dass das Problem was du lösen willst eben genau keine physikalisches ist (in der Realität spawnen Objekte nicht) sondern nur eins der Simulation. Wie willst du wissen, wie sich was in Simulation verhält, ohne die Simulation (ggf. "rückwärts") durchzurechnen? Das ist immer gleich teuer. Insbesondere glaube ich nicht dass es eine analytische Lösung gibt, weil die Simulation ja Eulerschritte und keine Analysis macht. (Falls du eine "klassische" Physikengine verwendest, das behältst du ja für dich hier).

Die Handbremse funktioniert aber nur, so lange das Auto bereits ausbalanciert ist. Wenn die Räder nicht den Boden berühren, weil das Auto vom Boden abprallt, bringt dir die Handbremse nichts (da sind B.G.Michis Zwangsbedingungen schon wirkungsvoller). Du kannst das damit vergleichen, dass du einen Klotz zwar sanft auf einem steilen Hang positionieren kannst, ohne dass er runterrollt. Aber sobald du ihn aus einem Zentimeter Höhe auf die selbe Position fallen lässt, kullert er runter und kommt werweißwo zum Stehen.


Ja schon richtig. Aber ich glaube nicht, dass das wirklich das Problem ist. Als allererstes ist es mMn eine Frage des Leveldesigns. Ich kenne kein Level und keine Physik-Engine wo du ein Auto ohne Probleme an jedem Punkt spawnen kannst. Eine gewisse Kontinuität muss die Landschaft schon haben. Zweitens ist ein Auto nichts was sich dazu anbietet einen Überschlag zu machen [meine Physikkenntnisse reichen nicht aus um das besser zu beschreiben]. Ich vermute die Dinger werden mit Absicht so konstruiert, dass sie sich nicht ständig überschagen. Sondern das Bild, dass wir jetzt hoffentlich beide vor Augen haben entsteht, weil Numerik auf einem Digitalrechner ein Problem ist. Ein echtes Auto in der echten Welt würde ein einer sehr großen Reihe von Szenarien meinem Verständnis nach einfach stabil landen. Drittens dachte ich, dass du eh so sanft wie möglich aufsetzt und



Also wenn der Tenor in Richtung „Simulier ein paar Sekunden“ geht, werde ich morgen eine abgespeckte Simulation (keine Fremdeinwirkung, kein Schaden, einfach nur Terrain vs. Reifen) mit Zwangsbedingung (X und Z nach jeder Iteration wieder wie vorher) einbauen und schauen, wie’s läuft.


Siehe oben: Wie soll es sonst gehen? Rein von der Logik her. Die Frage ist wirklich nur, wie du es versteckst. Wenn du im Hintergrund beschleunigt simulierst, während die eigentliche Simulation weiterläuft hast du dein Performance-Problem, wenn du es in der Live Simulation machst, hast du ein Wartezeitprblem. Es gibt kein Free Lunch.
Alexander Kornrumpf
Moderator
 
Beiträge: 1615
Registriert: 25.02.2009, 14:37

Re: Objekte in Ruhelage spawnen

Beitragvon Chromanoid » 22.09.2015, 11:56

Wie ich es verstehe geht es ja darum, dass die Autos deshalb immer wieder spawnen, weil sie aus LOD-Gründen immer mal wieder verschwinden und wieder auftauchen. Das finde ich eine ziemlich valide Problematik. Ggf. weiß man in so einem Fall noch nicht einmal wo sich alles Autos befinden, wenn man das Level lädt... Der Sinn des LOD ist ja gerade das so spät wie möglich festzustellen.

Vielleicht könnte man das Auto an einer festen Position anzeigen und im Hintergrund die Physik unsichtbar laufen lassen und dann die Darstellung des Autos langsam zur richtigen Position tweenen lassen. Sobald da irgendwas richtig holpert bzw. eine Kollision auftritt, muss man natürlich das Tweening beschleunigen und die Ruhefindung abbrechen.
Benutzeravatar
Chromanoid
Christian Kulenkampff
Moderator
 
Beiträge: 3686
Registriert: 16.10.2002, 19:39
Wohnort: Lüneburg
Alter Benutzername: atr_23

Re: Objekte in Ruhelage spawnen

Beitragvon Alexander Kornrumpf » 22.09.2015, 12:02

Chromanoid hat geschrieben: Das finde ich eine ziemlich valide Problematik


Die Validität des Problems steht doch gar nicht in Frage?!
Alexander Kornrumpf
Moderator
 
Beiträge: 1615
Registriert: 25.02.2009, 14:37

Re: Objekte in Ruhelage spawnen

Beitragvon Chromanoid » 22.09.2015, 12:48

Ja, stimmt, ich hatte das irgendwie in Deinem Post gelesen... :)
Benutzeravatar
Chromanoid
Christian Kulenkampff
Moderator
 
Beiträge: 3686
Registriert: 16.10.2002, 19:39
Wohnort: Lüneburg
Alter Benutzername: atr_23

Re: Objekte in Ruhelage spawnen

Beitragvon Krishty » 22.09.2015, 14:51

Tiles hat geschrieben:Zumindest könntest du über einen Raycast schon mal verhindern dass das Auto, bzw. die Räder im Gelände steckt. Oder das Ganze zu weit in der Luft schwebt und runterplumpst.
Ja, das mache ich schon. Im Fall eines Hangs platziere ich bspw. so, dass mindestens ein Rad den Hang berührt (bei entspannter Feder allerdings); siehe Bild unten.
Tiles hat geschrieben:Ich würde wohl die Physik erst mal abschalten und das Auto ohne Physik spawnen. Dann die Raycasts von den Reifen aus starten um die Lage des Autos am Gelände anzupassen. Mittelwert zwischen den linken Reifen und den rechten Reifen um die Seitenneigung des Autos zu ermitteln. Mittelwert von vorn und hinten um die Frontneigung zu ermitteln.
Da beginnen schon die Probleme: die Neigung des Autos hängt nämlich von den Federkräften ab. Du kannst z.B. ein normales Serienauto auf ebener Fläche nach hinten neigen, indem du den Kofferraum füllst. Der Algorithmus würde es allerdings genau horizontal spawnen, und dann würde es kurz zurückschlagen, sobald die Physik angeht.

Alexander Kornrumpf hat geschrieben:Wichtig ist ja, dass das Problem was du lösen willst eben genau keine physikalisches ist (in der Realität spawnen Objekte nicht) sondern nur eins der Simulation. Wie willst du wissen, wie sich was in Simulation verhält, ohne die Simulation (ggf. "rückwärts") durchzurechnen? Das ist immer gleich teuer.
Ja; damit hast du absolut recht und so habe ich das noch nicht gesehen :)
Insbesondere glaube ich nicht dass es eine analytische Lösung gibt, weil die Simulation ja Eulerschritte und keine Analysis macht. (Falls du eine "klassische" Physikengine verwendest, das behältst du ja für dich hier).
100 % genau nicht, weil die Simulation nicht genau ist, stimmt. (Ich benutze meine eigene Physikengine.) Aber nach meinen Tests (Federstärken für bestimmte Situationen hard-coden) reicht eine Annäherung aus, damit der Spieler nichts merkt. Ab grober Annäherung hören schon die negativen Gameplay-Effekte (falsche Achievements und so) auf.
Alexander Kornrumpf hat geschrieben:
Die Handbremse funktioniert aber nur, so lange das Auto bereits ausbalanciert ist. Wenn die Räder nicht den Boden berühren, weil das Auto vom Boden abprallt, bringt dir die Handbremse nichts (da sind B.G.Michis Zwangsbedingungen schon wirkungsvoller). Du kannst das damit vergleichen, dass du einen Klotz zwar sanft auf einem steilen Hang positionieren kannst, ohne dass er runterrollt. Aber sobald du ihn aus einem Zentimeter Höhe auf die selbe Position fallen lässt, kullert er runter und kommt werweißwo zum Stehen.

Ja schon richtig. Aber ich glaube nicht, dass das wirklich das Problem ist. Als allererstes ist es mMn eine Frage des Leveldesigns. Ich kenne kein Level und keine Physik-Engine wo du ein Auto ohne Probleme an jedem Punkt spawnen kannst. Eine gewisse Kontinuität muss die Landschaft schon haben. Zweitens ist ein Auto nichts was sich dazu anbietet einen Überschlag zu machen [meine Physikkenntnisse reichen nicht aus um das besser zu beschreiben]. Ich vermute die Dinger werden mit Absicht so konstruiert, dass sie sich nicht ständig überschagen. Sondern das Bild, dass wir jetzt hoffentlich beide vor Augen haben entsteht, weil Numerik auf einem Digitalrechner ein Problem ist. Ein echtes Auto in der echten Welt würde ein einer sehr großen Reihe von Szenarien meinem Verständnis nach einfach stabil landen.
„So sanft wie möglich“ bedeutet nicht, was du dir vorstellst (Fall 1 im Bild), sondern, dass mindestens ein Reifen den Boden berührt. Bei einem Hang sind die anderen Reifen aber wahrscheinlich noch immer über dem Boden und fallen, während die Reifen mit Bodenkontakt ihre Federstärke als Drehmoment übertragen, und dann kullert das Ding runter (Fall 2):
vehicle placement.png
Die sanftmöglichste Orientierung will ich ja eben ausrechnen.
Alexander Kornrumpf hat geschrieben:
Also wenn der Tenor in Richtung „Simulier ein paar Sekunden“ geht, werde ich morgen eine abgespeckte Simulation (keine Fremdeinwirkung, kein Schaden, einfach nur Terrain vs. Reifen) mit Zwangsbedingung (X und Z nach jeder Iteration wieder wie vorher) einbauen und schauen, wie’s läuft.
Siehe oben: Wie soll es sonst gehen? Rein von der Logik her. Die Frage ist wirklich nur, wie du es versteckst. Wenn du im Hintergrund beschleunigt simulierst, während die eigentliche Simulation weiterläuft hast du dein Performance-Problem, wenn du es in der Live Simulation machst, hast du ein Wartezeitprblem. Es gibt kein Free Lunch.
Numerisch, wäre meine Vorstellung gewesen: Schwerpunkt und Rotation und Gewicht und Federstärken und Abstand vom Boden als Parameter, und dann lösen. Da gibt es schließlich nur einen Gleichgewichtszustand, den ein reales Auto anstreben würde. Nur fehlt mir dafür einfach das mathematische Wissen, wie man sowas umsetzen würde. Und wenn ihr sagt, dass sowas nicht geht, dann halt nicht :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6341
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Objekte in Ruhelage spawnen

Beitragvon Alexander Kornrumpf » 22.09.2015, 15:20

Krishty hat geschrieben:Numerisch, wäre meine Vorstellung gewesen: Schwerpunkt und Rotation und Gewicht und Federstärken und Abstand vom Boden als Parameter, und dann lösen. Da gibt es schließlich nur einen Gleichgewichtszustand, den ein reales Auto anstreben würde. Nur fehlt mir dafür einfach das mathematische Wissen, wie man sowas umsetzen würde. Und wenn ihr sagt, dass sowas nicht geht, dann halt nicht :)


Wie man das im Prinzip macht ist eigentlich klar oder? Es gibt eine Funktion die aus dem Zustand s_t den zustand s_{t+1} macht, nennen wir die S. Dein Eulerschritt wendet diese Funktion an, als s_{t+1}=S(s_t) Wenn du dein Auto spawnst dann fixierst du die Freiheitsgrade, die du nicht frei haben willst (wahrscheinlich translation in der Ebene und Yaw), setzt das in s_t ein und löst für die anderen Freiheitsgrade (wahrscheinlich Translation entlang der Gravitation, Pitch und Roll, sowie alle Federzustände und was du noch so hast) die Gleichung s_t = S (s_t), also die Fixpunktgleichung der Simulation.

Geht nicht ist ein großes Wort. Mir wäre es halt zu aufwendig.
Alexander Kornrumpf
Moderator
 
Beiträge: 1615
Registriert: 25.02.2009, 14:37

Re: Objekte in Ruhelage spawnen

Beitragvon Alexander Kornrumpf » 22.09.2015, 15:37

Krishty hat geschrieben:
vehicle placement.png


Sorry, aber ich habe das hier im Labor gerade mit einem Blatt Papier und einem Radiergummi mit der dargestellten Steigung (und steiler!) ausprobiert. Das Radiergummi überschlägt sich nicht. Es rutscht, aber das liegt an der Reibung. Ich habe hier leider nichts geeignetes was einen wesentlich höheren Schwerpunkt hätte als ein Radiergummi, aber ich bin nicht komplett überzeugt, dass es kein Glitch in der Simulation ist.

Edit: Sucess! Mit Pullover überzogener Schreibblock erhöht die Reibung (Haftung?) erheblich und Computermaus hat einen höheren Schwerpunkt. Bei der dargestellten Steigung stellt sich das gewünschte Ergebnis ein: Maus fällt bis sie aufliegt und bleibt dort. Bei höheren Steigungen reicht die Haftung wieder nicht.

Oder reden wir über degenerierte Fälle (Reisebus bei der Rally Paris-Dakar)?
Zuletzt geändert von Alexander Kornrumpf am 22.09.2015, 15:44, insgesamt 1-mal geändert.
Alexander Kornrumpf
Moderator
 
Beiträge: 1615
Registriert: 25.02.2009, 14:37

Re: Objekte in Ruhelage spawnen

Beitragvon Krishty » 22.09.2015, 15:42

Ja; ich implementiere es (Simulation laufen lassen) mal und melde mich zurück. Kann nur etwas dauern; bin hier auch ein Bisschen im Stress.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6341
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Objekte in Ruhelage spawnen

Beitragvon Thargan » 10.11.2015, 06:02

Habe jetzt nicht alles gelesen, aber eine Idee.

Warum speichert man das Fahrzeug nicht im Ruhezustand mit den entsprechenden Parametern ab, baut eine bounding Box darum, tariert die Reifenebene mit der Ebene der Oberfläche unter den Reifen aus und lässt das Fahrzeug los ?

In meiner Vorstellung dürfte sich nun nichts mehr bewegen, ausser natürlich, dass Fahrzeug ist am Hang und der Schwerkraft ausgesetzt.
Notfalls hat man zwei Pakete dieser Art, einmal als Rollende und einmal als Parkende Ausführung.
Thargan
 
Beiträge: 14
Registriert: 06.12.2014, 20:08

Re: Objekte in Ruhelage spawnen

Beitragvon Alexander Kornrumpf » 10.11.2015, 11:33

Thargan hat geschrieben:die Reifenebene


Weil die Reifen einzeln kollidieren und gefedert sind und vier Punkte nicht trivial eine Ebene ergeben?
Alexander Kornrumpf
Moderator
 
Beiträge: 1615
Registriert: 25.02.2009, 14:37

Re: Objekte in Ruhelage spawnen

Beitragvon Thargan » 11.11.2015, 23:24

Alexander Kornrumpf hat geschrieben:
Thargan hat geschrieben:die Reifenebene


Weil die Reifen einzeln kollidieren und gefedert sind und vier Punkte nicht trivial eine Ebene ergeben?



Tja, haste Recht. Irgendwas ist ja immer.
Thargan
 
Beiträge: 14
Registriert: 06.12.2014, 20:08

Re: Objekte in Ruhelage spawnen

Beitragvon Krishty » 12.11.2015, 12:11

Ich werd’s auch noch wunderschön durchtesten. Nur erschöpfen augenblicklich andere Lebensbereiche meine Programmierzeit :(
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6341
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Objekte in Ruhelage spawnen

Beitragvon joeydee » 12.11.2015, 14:46

Noch weitere gedankliche Ansätze, damit dir nicht langweilig wird ;)

1. Ein neuronales Netz könnte in der Lage sein, aus entsprechenden Eingangsparametern (allen voran die 4 genormten Geländehöhen unter den Rädern, ggf. zusätzlich fahrzeugspezifische Details) vier gut passende Federwege in Ruhelage für jede Situation zu erlernen und für die Ingame-Aufgabe dann ohne Simulationsiteration direkt zu schätzen. Nach dem Motto: "weiche" Lookup-Table für viele Variablen ==> NN. Das wäre im Prinzip dein eingangs gesuchtes Gleichungssystem, mit evolutionär genäherten Konstanten.

2. Wenn man ferngesteuerte Buggys mit Öldruckstoßdämpfern aufs Gelände fallen lässt, bleiben die wie ein nasser Sack liegen und federn nicht nach. Vielleicht kann man dieses gedämpfte Federverhalten modellieren, dann könnte man die Simulation direkt benutzen ohne warten zu müssen.

3. Ich kenne Rennspiele, bei denen der Spawn-Car erstmal für zwei Sekunden als Ghost blinkt. In dieser Zeit könnte man in aller Ruhe die Simulation (isoliert für dieses Objekt natürlich) laufen lassen (ggf. beschleunigt, d.h. mehr Aufrufe pro Frame als üblich). It's not a Lag, it's a Feature...

Handbremse bzw. eingelegter Gang gehört auf alle Fälle immer dazu, ist ja auch in der Realität nicht anders (ich meine Modellbuggys, da man echte Autos eher selten auf die Straße wirft).
joeydee
Establishment
 
Beiträge: 593
Registriert: 23.04.2003, 15:29

Re: Objekte in Ruhelage spawnen

Beitragvon Alexander Kornrumpf » 12.11.2015, 19:06

joeydee hat geschrieben:2. Wenn man ferngesteuerte Buggys mit Öldruckstoßdämpfern aufs Gelände fallen lässt, bleiben die wie ein nasser Sack liegen und federn nicht nach. Vielleicht kann man dieses gedämpfte Federverhalten modellieren, dann könnte man die Simulation direkt benutzen ohne warten zu müssen.


Jedes mal wenn mir jemand mal wieder die Existenz von Stoßdämpfern explizit vor Augen führt, bin ich wieder entsetzt wie Federung und Dämpfung in meinem mentalen Modell schleichend zu einer Einheit konvergiert sind.
Alexander Kornrumpf
Moderator
 
Beiträge: 1615
Registriert: 25.02.2009, 14:37

Re: Objekte in Ruhelage spawnen

Beitragvon Krishty » 17.11.2015, 17:23

Erstmal strebt die Federung auch mit Dämpfung nach einem Gleichgewicht und bleibt nicht einfach so, wie man sie spawnt. Zweitens ist der Federweg bei ferngesteuerten Buggys weiter als bei Autos (und sie sind auf größere Unebenheiten ausgelegt). Drittens muss man für die Dämpfung jene Werte nehmen, die von den Objekten für die Simulation vorgeschrieben sind.

Ich kann in einer Autosimulation nicht zum Spawnen extrem starke Dämpfung setzen, dann sobald das Objekt ruhig ist die Dämpfung auf realistische Werte setzen – denn dann verändert sich das Equilibrium und das Fahrzeug wackelt wieder.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6341
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Objekte in Ruhelage spawnen

Beitragvon Tiles » 17.11.2015, 20:20

Hm. Spawnen denn die Autos jedesmal wo anders? Bei denen die immer am gleichen Platz spawnen könntest du ja die Werte nach dem spawnen einmal speichern. Und das könntest du schon beim entwickeln tun. Und sie beim erneuten spawnen wieder abrufen. Denkbar wäre auch sowas wie Standardspawnplätze zu haben bei denen die Werte bekannt sind.
Free Gamegraphics, Freeware Games http://www.reinerstilesets.de
Die deutsche 3D Community: http://www.3d-ring.de
Benutzeravatar
Tiles
Establishment
 
Beiträge: 1146
Registriert: 11.01.2003, 14:21

Re: Objekte in Ruhelage spawnen

Beitragvon Krishty » 17.11.2015, 20:45

Naja, im Augenblick geht es hauptsächlich um das Spieler-Vehikel, aber es soll so prozedural wie möglich werden, während ich die Simulation ausbaue. Ultimativ sollen mal Autos entlang der Straßen und Parkplätze verteilt werden. Wenn sie nicht sicher stehen, sobald die Physik angeht, gibt es den Hüpfer und … sagen wir … Dinge gehen kaputt :D

Ist scheiße, dass ich acht Wochen nicht dazu gekommen bin, das zu testen. Nichts ist vergessen, aber die Zeit ist halt gerade sehr knapp. Wenn ich dazu komme, die Vorschläge zu testen, lass ich’s euch hier wissen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6341
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Objekte in Ruhelage spawnen

Beitragvon RedGuy » 05.01.2016, 13:28

Hi !

Zunächst einmal würde ich auf alle Fälle die Physik mit einbeziehen.

Jetzt kommt mal eine krasse Idee:
Die Kollisiontests samt Federstellung würde ich der Spielumgebung -im Unsichtbaren- in einer unsichtbaren Kopie der Spielumgebung quasi vorausberechnen, dass, sobald in die Spielumgebung gespawned, das Objekt in Ruhelage ist ;) .

Ich weiß halt jetzt nicht wie einfach das mit deiner Engine umsetzbar ist.

Gruss
RedGuy
RedGuy
Manuel Hofmann
Establishment
 
Beiträge: 111
Registriert: 17.09.2002, 17:27
Wohnort: Rottweil


Zurück zu Algorithmen und Datenstrukturen

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot] und 1 Gast