Fahrzeugprogrammierung in Spielen
(wassimulator.com)- Die Fahrzeugumsetzung in Spielen legt den Schwerpunkt auf das Spielerlebnis statt auf eine echte Physik-Engine
- Zwischen Renn- und Simulationsspielen gibt es große Unterschiede bei Fahrzeugsteuerung und Immersion
- Die Fahrzeugsimulation besteht aus drei Komponenten: Motor/Getriebe, Reifen und Chassis
- Reifenmodellierung und das Konzept des Slip sind der Schlüssel zu einem realistischen Fahrgefühl
- Entwickler müssen selbst festlegen, welches Maß an Vereinfachung und Abstraktion zum Spielkonzept passt
Warum Fahrzeuge in Spielen etwas Besonderes sind
Fahrzeuge in Spielen sind in vielen Genres ein wichtiges erfahrungsbezogenes Element.
Sowohl unrealistische Steuerung als auch realistische Fahrsimulation können das Gefühl vermitteln, „ein Fahrzeug zu fahren“.
Mario Kart und Assetto Corsa zielen zum Beispiel auf grundlegend unterschiedliche Erfahrungen ab, doch das Wesen der Fahrzeugprogrammierung ist in beiden Fällen gleich.
Statt die realen Gesetze der Physik exakt nachzubilden, liegt der Fokus darauf, das vom Nutzer erwartete Fahrgefühl zu vermitteln.
Das Ziel des Entwicklers ist weniger eine „präzise Simulation“ als vielmehr die Gestaltung der beabsichtigten Erfahrung.
Frühe Versuche und Lehren: AV Racer
In der frühen Entwicklung von AV Racer wurde das Fahrzeug mit einem einfachen Newtonschen Mechanikmodell bewegt, doch es vermittelte kein Gefühl wie bei einem echten Auto.
Rotation, Driften, Winkelgeschwindigkeit und viele weitere Aspekte wurden wiederholt hart codiert und über Parameter getunt.
So ließ sich zwar ein erfahrungsbasiertes „Slide“-Gefühl erzeugen, doch in Extremsituationen oder im Vergleich zu den Erwartungen echter Fahrer reichte es nicht aus.
Fehlt das Verständnis für reale Fahrzeugphysik und die Erfahrung des Fahrers, stößt man an grundlegende Grenzen.
Um es richtig umzusetzen, wurde schließlich begonnen, die realen Prinzipien der Fahrzeugdynamik zu untersuchen.
Struktur der Fahrzeugsimulation für Spiele
Fahrzeuge in Spielen lassen sich in drei konzeptionelle Elemente aufteilen: Motor (einschließlich Getriebe), Räder/Reifen und Chassis.
Motor (einschließlich Getriebe)
- Nimmt Eingaben wie Gas und Gangwechsel entgegen
- Berechnet Drehmoment und RPM und wandelt sie entsprechend der Übersetzung um
- Wirkt in einer wechselseitigen Rückkopplung mit den Rädern zusammen (also bidirektionale Synchronisierung zwischen Motor und Rädern)
Reifen (einschließlich Räder)
- Verarbeitet verschiedene Eingaben wie Motordrehmoment, Bremse, Lenkung, Gewicht und Reibung der Fahrbahn
- Sämtliche Kräfte entstehen am Kontaktpunkt zwischen Reifen und Fahrbahn
- Realistische Kräfte werden über Reifenmodellierung umgesetzt (z. B. Pacejka Magic Formula)
Chassis
- Fungiert als starrer Körper der Physik-Engine
- Reagiert auf äußere Einflüsse wie Reifenkraft, Luftwiderstand, Schwerkraft und Kollisionen
- Bestimmt die Gesamtbewegung des Fahrzeugs und beeinflusst Laständerungen auf den Reifen
| Komponente | Haupteingaben | Hauptausgaben |
|---|---|---|
| Motor/Getriebe | Gas, Schalteingaben, Raddrehzahl | Drehmoment, RPM |
| Reifen | Motordrehmoment, Bremse, Lenkung, Last, Reibung | Chassiskräfte, Motor-Rad-Synchronisierung |
| Chassis | Reifenkraft, aerodynamische Ergebnisse | Radlast, Gesamtbewegung |
Alle physikalischen Details wie bei einem echten Fahrzeug zu 100 % exakt umzusetzen, ist unrealistisch.
Sofern man kein Forschungslabor eines realen Automobilherstellers ist, verwenden die meisten Spiele und Simulationen Blackbox-Modelle, Formeln und vereinfachte Ansätze.
Daher liegt der Kern darin, dass der Designer entscheidet, was weggelassen und was hervorgehoben wird.
Entwurf von Motor und Antriebsstrang
Motor (Kern der Drehmomentberechnung)
- In der Realität sehr komplex, im Code aber als einfaches Blackbox-Modell Eingabe (RPM, Gas) → Drehmomentausgabe umsetzbar
- Drehmoment-/Leistungskurven können als Zahlenwerte oder Graphen parametrisiert werden, um Motoren mit unterschiedlichen Charakteristiken zu simulieren
- Beispiel: Mit Desmos o. Ä. kann die Kurve direkt entworfen und der „Charakter des Motors“ angepasst werden
Getriebe
- Lässt sich einfach über eine Tabelle der Übersetzungsverhältnisse implementieren
- Gangwechsel bestimmen Beschleunigungsverhalten, Höchstgeschwindigkeit usw. des Fahrzeugs
- Einfach, aber mit großem Einfluss auf das Spielerlebnis
| Gang | Verhältnis |
|---|---|
| R | -2.92 |
| N | 0 |
| 1 | 2.50 |
| 2 | 1.61 |
| 3 | 1.10 |
| 4 | 0.81 |
| 5 | 0.68 |
Synchronisierung von Motor- und Rad-RPM
- Motor-RPM und Winkelgeschwindigkeit der angetriebenen Räder sind miteinander gekoppelt
- Auf Basis der Differenz dieser beiden Zustandsvariablen wird numerisch mit Differentialgleichungen gerechnet
- In jeder Frame wird eine schrittweise Annäherung in Form eines „Verfolgens des Zielwerts“ umgesetzt
Damit lässt sich das System sowohl in Richtung Arcade als auch Simulator erweitern.
Wenn Spieler verschiedene Motorparameter (z. B. Nockenprofil, Turbo usw.) anpassen, kann das mit Änderungen bei Sound oder Leistungskurve verknüpft werden.
Auch ohne die reale Motorbewegung exakt nachzuahmen, lässt sich so die Klarheit von Ursache und Wirkung vermitteln und die Interaktionserfahrung stärken.
Reifenmodell
Rolle der Reifen
- Der einzige Teil des Fahrzeugs, der tatsächlich mit der Straße in Kontakt steht
- Alle Kräfte für Beschleunigung, Bremsen und Kurvenfahrt entstehen an der Aufstandsfläche des Reifens
- Kräftegerierung basiert vor allem auf elastischer Verformung und Reibungseigenschaften
Longitudinalkraft (Beschleunigung/Bremsen) & Slip Ratio
- Reifen liefern im Zustand der Haftreibung die maximale Traktion; wird die Grenze überschritten, geht es in Gleitreibung (Slip) über
- Die Slip Ratio wird aus dem Unterschied zwischen Radumfangsgeschwindigkeit (Antrieb/Bremsen) und der tatsächlichen Geschwindigkeit über dem Boden berechnet
- Slip Ratio = (Radwinkelgeschwindigkeit - Freilauf-Winkelgeschwindigkeit) / Freilauf-Winkelgeschwindigkeit
- Im Allgemeinen tritt beim Beschleunigen Slip auf, wenn sich das Rad schneller als der Boden bewegt, und beim Bremsen, wenn es langsamer ist
- Die Änderung der Traktion in Abhängigkeit von der Slip Ratio kann als Kurve dargestellt werden
- Bis zu einem bestimmten Bereich steigt die Traktion an, fällt nach dem Maximum jedoch stark ab
Formel zur Kraftberechnung unter Berücksichtigung der Slip Ratio (Pacejka Magic Formula usw.)
- Verwendet Formeln, die die Slip Ratio als Eingabe nehmen und komplexe Kurven berechnen (parametrisierte Sinus-/Arcustangens-Funktionen)
- Die Berechnung muss für jeden Reifen einzeln erfolgen
Lateralkraft (Kurvenfahrt) & Slip Angle
- In der Kurvenfahrt entsteht durch Verformung der Aufstandsfläche ein Slip Angle
- Slip Angle = Winkeldifferenz zwischen der tatsächlichen Fahrtrichtung des Reifens und der Richtung, in die das Rad zeigt
- Mit zunehmendem Slip Angle entsteht zunächst mehr Traktion, doch jenseits eines Grenzpunkts beginnt der Reifen zu rutschen
- Auch die Beziehung zwischen Slip Angle und Traktion ergibt eine charakteristische Kurve
- Viele Parameter wie Last, Reibung und dynamische Änderungen beeinflussen das Ergebnis
Phänomene wie Understeer/Oversteer
- Understeer: Wenn der Slip Angle der Vorderreifen größer ist als der der Hinterreifen, dreht das Fahrzeug weniger stark ein als beabsichtigt
- Oversteer: Wenn der Slip Angle der Hinterreifen größer wird, rutscht das Heck des Fahrzeugs nach außen
- Mit einem korrekten Reifenmodell entstehen diese Handling-Eigenschaften ganz natürlich
Gegenseitige Begrenzung von Longitudinal- und Lateralkräften (Friction Circle)
- Wenn ein Reifen gleichzeitig Kräfte für Beschleunigung/Bremsen und Kurvenfahrt aufbringen muss, beeinflussen sich die Maximalwerte in beide Richtungen gegenseitig
- Friction Circle (Kreis/Ellipse): Die Summe der beiden Kraftvektoren darf einen Grenzwert nicht überschreiten
- (F_{x}^2 + F_{y}^2 \le (\mu F_{z})^2)
- Beispiel: Bei starkem Bremsen und starkem Lenken zugleich verliert man leicht die Kontrolle
- Reale Reifen verhalten sich kurvig/nichtlinear, daher müssen Parameter passend zu realen Daten kalibriert werden
Umsetzung im Code
- Für jeden Reifen werden Longitudinal- und Lateralkräfte separat berechnet
- Beide Vektoren werden addiert und innerhalb eines virtuellen Friction Circle normalisiert (skaliert)
- Wenn Parameter dynamisch angepasst werden, lassen sich auch ausgeprägte Änderungen im Handling leicht erproben
Integration in die Gesamtfahrzeug-Physikengine
- Reifenkraft + Federungsausgabe + äußere Einflüsse (Schwerkraft, Drag usw.) werden im Chassis aggregiert
- Nach Newtons Bewegungsgesetzen werden Beschleunigung und Geschwindigkeit in jeder Frame aktualisiert
Erweiterbare zusätzliche Elemente
- Fahrwerksgeometrie: Camber, Caster usw.
- Fortgeschrittene Reifenmechanik: Temperatur, Verschleiß, Ausdehnung, Laständerungen usw.
- Aerodynamik: Downforce, Drag, automatisch verstellbare Spoiler
- Antriebsstrang/Differenzial, ABS, ESP, Lenkeinschlagsbegrenzung usw.
- Bei Bedarf können verschiedene Bücher herangezogen werden: Race Car Vehicle Dynamics (Milliken), Mechanics of Pneumatic Tires (S.K. Clark)
Fazit
Schon mit den obigen Modellen lässt sich die Grundlage für ein Spielefahrzeug schaffen, das sich ähnlich wie ein reales Fahrzeug verhält.
Zusätzliche Details können je nach Entwicklungsziel und Bedarf erweitert werden.
Der Kern ist die Vereinfachung/Abstraktion grundlegender Prinzipien aus der Realität und eine auf das Spielerlebnis ausgerichtete Designphilosophie.
Bei Fragen, Meinungen oder Korrekturvorschlägen bitte Kontakt aufnehmen
2 Kommentare
Ich habe es fälschlich als „Fahrzeugprogrammierung im Fahrzeug“ gelesen und dachte mir: Ist das nicht ein bisschen gefährlich?
Hacker-News-Kommentare
Interessant ist, dass der Motor in der Realität zwar die meisten beweglichen Teile hat, im Code aber eher der einfachste Teil der gesamten Fahrzeugsimulation ist. Der Kern des Motors ist nämlich ein Drehmomentrechner. Er nimmt mehrere Eingaben entgegen und gibt nur einen einzigen Output aus: Rotationsdrehmoment. Es fühlt sich wie eine Blackbox an. Ich möchte unbedingt die Video-Serie zum Engine Simulator von AngeTheGreat empfehlen. Es ist wirklich erstaunlich zu sehen, dass das Ganze so weit optimiert ist, dass es in Echtzeit läuft und dabei sogar realistisch klingende Motorgeräusche erzeugt. Siehe AngeTheGreat Engine-Simulator-Video
Das Spiel Automation hat einen sehr tiefgehend umgesetzten Engine-Builder bzw. eine sehr tiefgehende Engine-Simulation. Mit verschiedenen Motor-Experimenten kann man wirklich viel Spaß haben, und der Teil zur Sound-Simulation übernimmt auch einige der Konzepte, die in den Videos von AngeTheGreat behandelt werden.
Das erinnert mich an das klassische Beispiel, in Houdini einen Würfel zu animieren. Bei einer Echtzeit-Simulation von Verbrennungsmotoren macht gerade das Unerwartete Spaß. Houdini-Beispiel zur Würfelanimation
Ich habe mit dem Programmieren angefangen, weil mein Vater in BASIC einen Engine Simulator geschrieben hat. Er war Maschinenbauingenieur und wollte die Drehmomentkurven verschiedener Motor-Designs vergleichen. Als er mit den Befehlen CIRCLE und LINE ein Wireframe zeichnete, in dem sich Kolben, Kurbelbaugruppe und Kurbelwelle in Bildfolgen unter einer Sekunde bewegten, hat mich die Tatsache umgehauen, dass man mit einem Computer etwas zeichnen und bewegen konnte. Es beeindruckt mich sehr, dass diese Person im Grunde dasselbe getan hat, um bessere Rennwagen-Sounds zu erzeugen.
Sind EV-Motoren in Wirklichkeit nicht sehr viel einfacher? Ein Motor ist teuer und komplex, weil er kleine Explosionen nutzt, um Drehmoment zu erzeugen. Deshalb frage ich mich, ob sich die meisten Autos in Spielen nicht eher wie EVs bewegen — jedenfalls solange man einen ICE (Verbrennungsmotor) nicht genauer simuliert.
Ich war bei Army of Two für die komplette Fahrzeugsimulation verantwortlich. Dieser Artikel ist eine gute Einführung. Die Verwendung des Pacejka-Reifenmodells und von Getriebedifferenzialen war eine große Hilfe. Darüber hinaus ist überraschend, wie wichtig die physikalische Simulation des Stabilisators und die Federung dafür sind, dass sich das Fahren „spaßig“ anfühlt. Wenn das fehlt, fühlt sich das Fahren rutschig an und es fällt schwer, darin einzutauchen. Dieses Gefühl ist auch im Demo-Video zu sehen. Wenn man Stabilisator und Federung nicht implementiert, kippt das Auto leicht um, und man fummelt ständig nur an Reifenschlupf oder Oberflächenreibung herum, was das Fahrerlebnis am Ende eher verschlechtert.
Vielen Dank für diese Info! Ich hatte nicht erwartet, dass der Stabilisator in einem Basismodell so wichtig ist. Ich werde mich dazu weiter einlesen und den Artikel aktualisieren, wenn ich es gut umgesetzt bekomme.
Ich hatte kürzlich ein Problem mit der Federung meines Autos und habe „unspaßiges Fahren“ dadurch direkt selbst erlebt. Das macht diese Aussage für mich noch nachvollziehbarer.
Das ist dem sehr ähnlich, was ich beim Entwickeln des Spiels Flightle selbst festgestellt habe. Ich habe einen Side-Scrolling-Flugsimulator für Mobilgeräte gemacht, aber die Bewegung des Flugzeugs fühlte sich so unnatürlich an, dass ich aus Frust dachte: „Was daran soll denn so schwer sein?“ und es dann selbst gebaut habe. Beim Lernen der Flugprinzipien wurde mir klar, wie wichtig das richtige Abstraktionsniveau ist. Wenn es zu unrealistisch ist, macht es keinen Spaß, und wenn es zu realistisch ist, wird das Gameplay-Balancing schwierig. Flightle-Link
Es ist schon zu spät, den Kommentar noch zu bearbeiten, aber ich habe meine Erfahrungen inzwischen separat ausführlicher aufgeschrieben. Siehe Bericht zur Entwicklung eines Side-Scrolling-Flugsimulators. Übrigens habe ich das Flugzeug später von einem Punkt in eine Struktur geändert, bei der zwei Flügel durch eine Stange verbunden sind, und das spaßig abzustimmen war extrem schwierig. Jemand mit mehr Fachwissen hätte das vermutlich besser hinbekommen.
Das Spiel hat mir Spaß gemacht. Für Desktop-Nutzer würde ich vorschlagen, die Slider auch mit dem Scrollrad der Maus bedienbar zu machen.
Ich habe früher ein iOS-Spiel gemacht, das Fahrzeuge und Driften simuliert. Es basierte auf SpriteKit, lässt sich aber in praktisch jeder 2D-Game-Engine leicht umsetzen. Die Grundidee ist, zwei Vorderräder per Pin-Joint mit einer rechteckigen Karosserie zu verbinden und dann Kraft auf die Räder auszuüben. Der Winkel der Kraft wird dabei so berechnet: x = force * cos(bodyRotation + wheelRotation) y = force * sin(bodyRotation + wheelRotation) Dann habe ich noch Skid-Partikel hinzugefügt. Das Driften habe ich umgesetzt, indem ich die Dämpfungswerte von Rädern und Karosserie angepasst habe. Drift Mania Infinite Car Racer App
Das Spiel hat wirklich ein gutes Gefühl! Mir gefällt, dass es sofort losgeht. Die Skid-Partikel sind praktisch. Die Optik ist auch gut. Für mich war es allerdings zu schwer. Wenn du einen „Zen-Modus“ hinzufügen würdest, in dem man beim Anstoßen an eine Wand nicht zurückgesetzt wird, könnte ich es wahrscheinlich deutlich länger spielen.
Das Spiel ist wirklich cool. Der App-Markt ist extrem umkämpft, deshalb sind 22 Bewertungen ziemlich beeindruckend. Mich würde interessieren, wie du es beworben hast.
„Dieses Spiel bietet erstaunliche Grafik ...“ Dieser selbstironische Humor ist wirklich süß. Ich lade es gerade herunter.
Dieser Artikel war wirklich interessant. Allein den Teil zum Reifenmodell würde ich mehrfach lesen. Wenn es rein um Spaß geht und Simulation oder Realismus völlig egal sind, kommt für mich nichts an das Arcade-Spiel Super Sprint aus den 1980ern heran. Super-Sprint-Spielinfo
Ich kopiere hier einen Teil der einschlägigen Vorträge hinein, die ich in meinen Notizen gespeichert hatte: Hamish Young, Fahrzeugphysik und Reifendynamik in ‘Just Cause 4’ Vehicle Physics and Tire Dynamics in 'Just Cause 4' Jan Erik Steel & Patrick Donnelly, supergeladene Fahrzeugphysik in ‘Skylanders’ Supercharged! Vehicle Physics in 'Skylanders' Edward Pereira, Vortrag über die Wissenschaft des Offroad-Fahrens The Science of Off-Roading Jared Cone, die Physik von ‘Rocket League’ It IS Rocket Science! The Physics of 'Rocket League' Detailed
Der Artikel selbst ist toll, aber der Einstieg war etwas verwirrend. Es wird gesagt, dass Autos in Spielen viele unrealistische Erfahrungen bieten, Waffen aber nicht — das erscheint mir fragwürdig. Tatsächlich gibt es in Spielen eine riesige Vielfalt unrealistischer Waffen. Außerdem wird behauptet, dass unsere Erwartungen an das Fahren nicht aus direkter Erfahrung, sondern aus medialen oder kulturellen indirekten Erfahrungen stammen. Trifft das nicht eher auf Waffen zu? Auch Dinge wie Springen werden in Spielen auf sehr unterschiedliche Weise umgesetzt, aber meine Erwartungen ans Springen kommen viel stärker aus der tatsächlichen Erfahrung, selbst gesprungen zu sein.
Es klingt, als hättest du nicht viel Erfahrung mit der Entwicklung von FPS-Spielen. Reale Waffen unterscheiden sich stark von dem, was man in Spielen erlebt. Wenn Spiele genauso wären wie echte Schusswaffen, wären sie viel weniger spaßig und eher frustrierend. Bei Rennspielen ist es genauso: Für den Spielspaß muss man die Realität in gewissem Maß verbiegen.
Ich denke, bei diesem Thema geht es nicht um „Realismus“, sondern um „Glaubwürdigkeit“. Wichtig ist, eine Erfahrung zu schaffen, die Spieler als glaubhaft empfinden. Waffen in Spielen unterscheiden sich zwar von der Realität, priorisieren aber die Fantasie von Macht und Bedrohlichkeit. Auch Springen hat keine wirklich realistische Grundlage, sondern wird in der Form gestaltet, die am besten zum Spielziel passt. Bei Autos hingegen handelt es sich um einen Bereich, in dem physikalische Korrektheit und Systematisierung möglich sind; man kann hier ein Maß an realistischer Darstellung anstreben, das sogar mit Industriesimulationen vergleichbar ist. Menschliche Bewegung, Wirtschaftssysteme oder Kampfabläufe lassen sich dagegen nicht in gleichem Maße realistisch angehen, weshalb dort viel stärker cartoonhafte Darstellungen vorkommen. Game-Designer müssen einen sinnvollen Kompromiss finden, der zu den Spielerwartungen und den Gesamtzielen des Spiels passt. Ein häufiger Fehler ist es, zu viel detaillierten Realismus anzustreben und dabei die Gesamtstruktur zu beschädigen.
Das FPS-Beispiel fiel mir auf der Bühne spontan ein, aber nach längerem Nachdenken wurde mir klar, dass es kein gutes Beispiel ist. Danke für den Hinweis.
Es scheint, als würden Dinge wie Hügel, Rampen und Federung fehlen. In Unreal Engine gibt es sowohl eine sehr einfache Fahrzeug-Demo als auch Demos mit einem echten Federungsmodell.
Am Ende des Vortrags und des Artikels gibt es ein kurzes Video, das den aktuellen Stand in einer echten Engine zeigt, und darin sind verschiedene Geländeformen wie Hügel und Rampen umgesetzt. Im Vortrag selbst wird ein einfaches flaches Gitter verwendet. Eine Federung ist ebenfalls implementiert, wurde aber nicht im Detail behandelt, weil sie weniger ein spezielles Autoproblem als vielmehr eine allgemeine Funktion ist, damit ein Gewicht getragen werden kann, und deshalb im Umfang und Fluss des Vortrags nicht tiefer behandelt wurde.
Wie Wassim im Q&A erwähnt hat, kümmert sich die Physik-Engine um die Federung, und ihre Auswirkungen werden in der Reifenlast berücksichtigt, wodurch sich auch die Reifenkräfte ganz natürlich entsprechend verändern.
Es gibt einen guten GDC-Vortrag zur Fahrzeugphysik von Rocket League. Siehe Rocket-League-Physik-Vortrag. Zur Einordnung: Ich war im Rocket-League-Team allerdings nicht am Game-Client, sondern in einem anderen Bereich tätig.
Beim Lesen dieses Artikels musste ich an einen guten Vortrag über Rennphysik denken. Siehe Andre Marziali - Physics of Racing