Chrono in Unreal, Teil 1: Wieso Chrono, welche Effekte, zwei Tage Arbeit
Ein schwerer 4x4 startet am Strand, klettert über eine Düne aus losem Sand, weicht Felsen aus, bremst vor einem Fussgänger, springt über einen Steg ins Meer und schwimmt. Dann läuft er voll und sinkt, ein Boot mit Parasail zieht seine Runden vor der Küste, die Sonne geht unter, der Vollmond kommt hinter der Düne hoch, und das Boot setzt sich mit Vollgas auf den Strand. Nichts davon ist animiert. Jede Bewegung von Fahrzeug, Boot, Leine, Schirm und Drohne kommt aus einer Mehrkörpersimulation, die Räder graben sich wirklich in den Sand, und der Schirm bleibt oben, weil ein Auftriebsmodell das aus der Anströmung so ausrechnet.
Dieser Beitrag ist der erste von neun. Er beantwortet drei Fragen: warum Project Chrono®, welche Effekte in der Demo stecken, und wie das in zwei Tagen entstanden ist. Die weiteren Teile: Teil 2 beschreibt die Architektur der Integration, Teil 3 die Fallen, in die wir getreten sind, Teil 4 den komplett prozeduralen Klang, Teil 5 Spuren, Gischt, Tropfen und den Preis der Bilder, Teil 6 das Modell von Boot, Leine und Schirm, Teil 7 die Drohne als geregelter Körper, Teil 8 das Licht der Nacht, Teil 9 die Sequenz als Phasenprogramm.
Der ganze Durchlauf, 9 Minuten 28 Sekunden, mit dem prozeduralen Klang aus Teil 4. Split Screen: links Hauptkamera mit Telemetrie, rechts oben Fahrersicht, rechts unten Drohne. Auf der Düne die Differentialsperren, ab Minute 3:30 das Finale: Sinken, Drohnenflug, Abend, Parasail, Mond, Strandung. Auf YouTube in 1080p ist die Konsole lesbar.

Wieso Chrono
Unreal Engine® hat eine Physik, und für Spiele ist sie gut. Für Fahrdynamik, auf die man eine Aussage stützen will, reicht sie nicht: kein Antriebsstrang mit Wandler und Wellenträgheiten, keine Reifenmodelle mit Schlupfkennlinien, und vor allem kein Boden, der nachgibt. Ein Reifen auf Sand ist in einer Spieleengine ein Reifen auf einer harten Fläche mit weniger Reibung. Das sieht ähnlich aus und rechnet etwas anderes.
Project Chrono ist eine Mehrkörperbibliothek aus dem akademischen Umfeld, Open Source, mit einem Fahrzeugmodul Chrono::Vehicle®. Dort steckt, was uns fehlte: Motorkennfeld, Drehmomentwandler, Automatikgetriebe, Achsen mit Federung, Reifenmodelle, und ein verformbarer Boden nach Bekker und Janosi, das Soil Contact Model (SCM). Die Bodenparameter sind physikalische Grössen, die man mit einem Bevameter am realen Untergrund messen kann. Genau das ist der Punkt: eine Simulation, die man kalibrieren kann, statt einer, die man nur hübsch einstellen kann.
Chrono kann durchaus visualisieren, mitgeliefert werden Viewer auf Basis von Irrlicht und VSG. Das reicht für Entwicklung und Debug, ist aber kein Ersatz für eine produktive Rendermaschine mit Materialien, Beleuchtung, Kamerasystem und Asset-Pipeline. Genau deshalb wollten wir die Physik in Unreal Engine sehen: eine ausgereifte C++-Engine mit sehr guter Renderqualität für Simulationen jeglicher Art. Eine offizielle Verbindung zwischen Chrono und Unreal gibt es nicht, also haben wir sie als eigenes Plugin in C++ gebaut. Die Arbeitsteilung ist strikt: Chrono rechnet Fahrzeug, Reifen, Sand, Steine, Getriebe, Boot, Leine, Schirm und Drohne mit festen Zeitschritten von 2 ms. Unreal zeigt die Zustände an und rechnet an der Dynamik nichts mit.
Die Demo
Der Schauplatz ist eine erfundene Insel von einem Kilometer Kantenlänge, aus einer Höhenkarte, die ein Python Skript berechnet. Wer sich dabei an die Whitsunday Islands erinnert fühlt, liegt vermutlich nicht falsch. Auf der Insel liegt ein Korridor aus verformbarem Sand, 500 mal 924 Meter mit 15 cm Knotenabstand, und darauf steht der Parcours: Sandbank, nasser Strand, ein Feld aus 420 Kopfsteinen, Buckelpiste, Sprung, die 36 Meter hohe Düne mit 160 kleinen Steinen und Felsbrocken, der Nordstrand mit Spülsaum, ein Steg mit hochgezogenem Ende und ein 4.5 Meter tiefes Becken davor. Vor der Küste dreht von Anfang an ein Boot seine Runden und zieht einen Parasail, in Sichtweite und in Hörweite, sobald es nahe vorbeifährt.
Ein Autopilot fährt ein Phasenprogramm ab, damit jeder Durchlauf reproduzierbar ist: Start mit Anlasser, Parcours, Düne, Drift, Ballspiel am Strand mit Notbremsung vor dem Läufer, Steg, Sprung, Schwimmen. Sobald das Fahrzeug im Wasser liegt, geht der Motor aus, der Rumpf läuft voll und das Fahrzeug sinkt in dreissig Sekunden. Ein Kugelfisch kreist um das Wrack und schaut ab und zu durch die Windschutzscheibe. Die Drohne fliegt einmal um das Auto, steigt und macht bei Tag ihren Tiefflug zurück zum Startpunkt auf dem Dünenkamm. Sobald sie oben ist, beginnt der Abend: Die Sonne sinkt, das Boot schaltet Seitenlichter, Scheinwerfer und Suchscheinwerfer ein, die Drohne stürzt sich vom Kamm zum Schirm hinunter und kreist um Schirm und Boot. Der Mond kommt hinter der Düne hoch, eine Landbrise frischt auf, das Boot fährt mit Vollgas gegen den Wind auf den Strand, gleitet über den Sand und bleibt stecken. Die Brise flaut ab und dreht auflandig, der Schirm treibt über das Boot und sinkt auf den Sand. Die Drohne fliegt mit 15 Prozent Akku zurück über das Wrack, geht bei 10 Prozent in die Notlandung, setzt auf dem Wasser auf und treibt dort, das Blinklicht noch an, im Suchscheinwerfer des gestrandeten Boots. Die Kugelfische ziehen ein letztes Mal an der Scheibe vorbei, bei 8 Prozent schaltet die Drohne ab, Ende. Alles im Split Screen: links die Hauptkamera mit der Telemetrie, rechts oben die Fahrersicht, rechts unten die Drohne.

Welche Effekte
Es lohnt sich, sauber zu trennen, was gerechnet wird und was inszeniert ist. Eine Demo verspricht schnell mehr, als sie rechnet.
Aus Chrono, unverändert:
- Fahrzeugdynamik des schweren 4x4 aus der Chrono Modellbibliothek (HMMWV® Modell): Motor, Wandler, Getriebe, Doppelquerlenkerachsen, Reifen.
- Der Antriebsstrang als Wellenmodell mit Mittendifferential und zwei Achsdifferentialen, jedes mit einer Sperrkupplung. Auf der Düne wird das vorgeführt: die Auffahrt beginnt mit offenen Differentialen, und sobald das Fahrzeug unter 8 km/h fällt, sperren Mitte und Hinterachse, die Vorderachse bleibt offen. Das Moment geht damit vom durchdrehenden auf das greifende Rad, und das Fahrzeug kommt hoch. Die Sperrkupplung des Bibliotheksmodells ist mit 100 Nm zu schwach, um wirklich zu sperren; sie wird über die Physikobjekte des Antriebsstrangs auf 3000 Nm gesetzt. Das HUD zeigt den Zustand der drei Differentiale.
- Verformbarer Sand: Einsinken, Rollwiderstand, Scherkraft, Verfestigung unter der Spur. Drei Bodenvorgaben (Dünensand trocken, Strandsand nass, fester Boden) und gesättigter Sand unter der Wasserlinie mit halbem Reibwinkel.
- 420 Kopfsteine, 160 Dünensteine, zehn Felsbrocken, 26 Küstenfelsen und der Steg als starre Körper mit Kollision.

Eigene Physik im Plugin, als Kräfte zurück in Chrono:
- Wasser: Auftrieb an vier Ecken gegen eine Wellenfunktion mit Dünung, Wasserwiderstand pro Rad, Schaufelradschub der drehenden Räder mit einem Viertel der Laufflächenkraft, quadratische Dämpfung. Nach dem Motorstopp läuft der Rumpf voll, der Auftrieb geht auf null, das Fahrzeug sinkt.
- Zuganschlag der Federung und Lenkanschlag am Achsschenkel, beides fehlt im Chrono Modell und beides braucht ein Rad, das im Wasser entlastet wird.
- ABS, nachgerüstet. Die Bremsen des Modells sind einfache Momentbremsen ohne Regelung, und bei der Notbremsung vor dem Läufer standen alle vier Räder. Jetzt wird pro Rad die Bremse gelöst, sobald der Schlupf unter minus 35 Prozent fällt, und nach 40 Millisekunden oder sobald das Rad wieder rollt erneut angelegt; das pulst mit 10 bis 15 Hertz, wie ein echtes ABS, und die Pulse sind das Trommeln aus Teil 4. Dazu ein Leerlaufregler, den der Wellenmotor von Chrono ebenfalls nicht hat: unter 900 Umdrehungen bekommt der Motor Gas, sonst würgt ihn der Wandler beim Bremsen ab.
- Schaltlogik mit Wählhebelstellung 2 für die Düne, weil die Chrono Automatik im Sand entweder gar nicht oder bei durchdrehenden Rädern hochschaltet.
- Das Boot mit dem Parasail nach demselben Muster: Rumpf mit Auftrieb an vier Punkten, Widerstand, Schub am Heck, Ruder als Giermoment und Bodenkontakt für die Strandung. Die Schleppleine als Kette aus zehn starren Gliedern mit Kugelgelenken, der Schirm als Körper mit Auftrieb und Widerstand aus der Anströmung, der Pilot als Pendel am Joch mit Wasserwiderstand auf den Füssen. Das Boot regelt die Höhe des Schirms über seine Geschwindigkeit. Das Modell ist in Teil 6 beschrieben.
- Die Drohne als Chrono Körper mit vier Rotoren, Motorverzögerung, Luftwiderstand und einem geometrischen Lageregler. Die Choreografie liefert Sollwerte, fliegen muss die Drohne selbst, mit einem Gimbal mit Anschlägen und einem Akkumodell, das das Ende der Demo bestimmt. Das steht in Teil 7.
- Verbrauch aus Motordrehzahl und Drehmoment, Schwimmwinkel, Schlupf und Einsinktiefe pro Rad, Bootsgeschwindigkeit, Schirmhöhe und Leinenzug, alles im HUD.
Darstellung, aus den physikalischen Grössen abgeleitet:
- Reifenspuren als Decals alle 28 cm entlang des tatsächlichen Radwegs.
- Gischt und Sandstaub als Instanced Meshes pro Rad nach Laufflächengeschwindigkeit und Einsinktiefe, nach vorn beim Vorwärtsrollen, nach hinten im Rückwärtsgang, auf Parabeln.
- Wassertropfen auf der Windschutzscheibe als kleine Linsen, die die Fahrersicht dahinter verkleinert und gespiegelt zeigen, mehr auf der Seite des Rades, das im Wasser läuft.
- Sichtbare Dünung: dieselbe Wellenfunktion, die den Auftrieb rechnet, verformt ein Gitter im Meer, nah fein, fern grob bis 1.5 Kilometer hinaus.
- Ein Lackmaterial im Lego®stil als dreidimensionales Zellraster, ohne Textur, auf Auto, Boot und Schirm.
- Die Nacht ohne Filter: Ab dem Sonnenuntergang ist die Belichtung auf den Tageswert fixiert, wie eine Kamera mit fester Einstellung. Was danach dunkel oder hell ist, entscheiden nur die Lichtquellen: die Sonne, die knapp über dem Horizont stehen bleibt und auf 0.3 Prozent ihrer Stärke fällt, der Mond mit einem Siebtel der Tagessonne, Seitenlichter rot und grün nach den Kollisionsverhütungsregeln, zwei Scheinwerfer, ein Suchscheinwerfer mit Schatten, die Blink-LED der Drohne. Das Licht der Nacht hat einen eigenen Teil, Teil 8.

Inszenierung:
- Sonnenuntergang, Mondaufgang mit einer prozedural erzeugten Mondscheibe, neunhundert funkelnde Sterne, Sternschnuppen, und die Landbrise, die mit dem Mond auffrischt und nach der Strandung wieder abflaut.
- Zwei Ballspieler und der Ball. Der weite Wurf ist inszeniert, die Bremsung des Fahrzeugs nicht: Bremswegschätzung mit Hysterese, Vollbremsung mit geteiltem Reibwert, Rückwärtssetzen nach dem Stillstand.
- Die Fahrerfigur mit dem Gesicht des Autors, die zu Beginn der Drohne zuwinkt.
- Die Kugelfische. Sie sind kinematisch, aus Engine Primitiven gebaut, Kugel, Kegel als Stacheln, Flossen, Augen, und sie kennen Chrono nicht. Der grosse kreist nach dem Untergang um das Wrack, immer unter der Oberfläche, mit langsam wandernder Tiefe, Radius und Tempo, und etwa alle zwölf Sekunden kommt er vor die Windschutzscheibe, stoppt, dreht sich zum Fahrer und bläst sich in 0.4 Sekunden auf, mit kleinem Überschwingen; das Aufblasen liest man vor allem an den Stacheln, die dabei ausfahren. Die drei Kleinen, ein Drittel so gross, schwimmen 1.3 Sekunden versetzt auf seiner Spur, abwechselnd links und rechts davon. Die Spur ist die Liste seiner letzten Posen, und weil sie sich beim Anhalten auf ihm staut, halten die Kleinen einen Mindestabstand hinter ihm, sonst schwämmen sie durch ihn hindurch. Wenn die Drohne am Ende auf dem Wasser sitzt, zieht die Familie ein letztes Mal an der Scheibe vorbei.
Klang: komplett prozedural, keine einzige Audiodatei. Motor, Anlasser, Sand, Federung, Brandung, Eintauchen, Rotoren und der Aussenborder des Bootes entstehen aus Oszillatoren und Rauschgeneratoren, die an den physikalischen Grössen hängen. Nach dem Untergang sitzen die Ohren beim Piloten am Schirm. Das ist Teil 4.

Zwei Tage Arbeit
Der erste Tag ging in die Umgebung: Toolchain, Chrono 10 aus den Quellen als Shared Library bauen, ein Test ohne Unreal, in dem das Fahrzeug die Düne auf SCM Sand hochkommt. Am Abend des ersten Tages kam die Insel als Höhenkarte dazu, am Morgen des zweiten Unreal Engine selbst auf die Maschine. Fahrzeug, Sand, Wasser, Parcours, Klang, Drohne, Boot, Parasail und die Nacht entstanden an diesem zweiten Tag.
Gearbeitet wurde als Paar, mit klarer Rollenteilung. Der Ingenieur brachte die Modellphysik und die Praxiskenntnisse mit, die eine kalibrierte Simulation von einer hübschen Animation trennen, und formulierte daraus die Anforderungen an das System. Beispiele: Der Auftrieb des Schirms ist geschwindigkeitsabhängig, das Boot regelt die Höhe über die Fahrt und nicht über die Kamera, die Leine zum Piloten hängt an der Brust und nicht am Sitz, die Nacht kommt aus Lichtquellen und nicht aus einem Filter, Seitenlichter sind rot backbord und grün steuerbord und decken einen 112.5-Grad-Sektor mit sauberem Schluss achterlich. Ein Banner hinter dem Schirm sah albern aus und flog wieder raus. Solche Vorgaben stammen nicht aus einem Prompt, sondern aus Physik und Praxis auf dem Wasser. Der Agent, Claude™ Code, hat aus diesen Anforderungen den C++-Code, die Materialien und die Blueprints gebaut, kompiliert, gestartet, Screenshots gezogen, die Telemetrie gelesen und Vorschläge gemacht. Am Modell gemessen wurde entschieden, was blieb.
Ein paar Zahlen, die die Tage beschreiben:
- Weit über hundert Build und Lauf Zyklen. Ein Zyklus sind 20 Sekunden Kompilieren und ein bis sieben Minuten Lauf, je nachdem, welche Phase geprüft wird. Debugstarts direkt in eine Phase, etwa schwimmend im Becken, haben die Hälfte davon gespart.
- Sechs Anläufe für den Anlasser, vier für das Federungsgeräusch, drei für die Brandung. Klang wird nach Gehör beurteilt, und das Urteil kommt in Sekunden.
- Drei Anläufe, bis der Pilot in die Flugrichtung schaute. Am Ende hat eine Messung über die Zehen des Skeletts entschieden, nicht ein weiterer Versuch.
- Zwei Abstürze während der Autor zusah, beide dieselbe Ursache, ein Element eines Arrays an dasselbe Array anhängen.
- Eine Simulation, die explodierte, weil ein Drehmoment auf eine leichte Radspindel zu gross war.
- Die COLREG-konformen Seitenlichter, rot backbord und grün steuerbord mit dem korrekten Ausstrahlwinkel, waren die einzige Stelle, an der Prosakorrekturen im Chat nicht reichten. Die Lichtfunktion des Sektors musste im Source-Code von Hand geprüft und angepasst werden, gestützt auf die Kollisionsverhütungsregeln.
- Die Bildrate lag zwischendurch bei 30 und am Ende zwischen 48 und 57. Die Physik war nie das Problem, Chrono braucht im gezeigten Lauf 12 bis 15 ms pro Bild, mit Boot, Leine, Schirm und Drohne inklusive.
Die Zeitfresser waren nicht die physikalischen Modelle. Wasser, Anschläge, Bodenparameter, Leine und Schirm waren in Minuten formuliert. Die Zeit ging in Vorzeichen, Zeitbasen, Werkzeugketten und in Details, die nur im laufenden Bild sichtbar sind: eine Kamera, die über Bodenwellen stottert, eine Drohne, die durch den Berg fliegt, ein Motor, dessen Stopp nie ausgewertet wurde. Genau die Klasse von Problemen, die aus dem Zusammenspiel entsteht: der Agent startet die Anwendung selbst und liest die Telemetrie, der Ingenieur bewertet im laufenden Bild an dem, was das Modell verlangt. Ziel war eine hohe Automation, denn nur so waren zwei Tage überhaupt möglich.
Erfreulich sind die moderaten Anforderungen an die Hardware: ein normaler Arbeitsplatzrechner reicht, Ryzen® 5 7600, 32 GB, NVIDIA® GeForce RTX® 5070, Windows® 11. Unreal Engine 5.8.2, Chrono 10.0, Visual Studio® 2026.

Wozu das gut ist
Die Demo ist eine Spielwiese, der Aufbau darunter nicht. Wer eine Steuerung für ein Fahrzeug, eine Baumaschine, ein Boot oder einen mobilen Roboter entwickelt, braucht früh eine Umgebung, in der Regelalgorithmen gegen eine glaubwürdige Dynamik laufen, mit Sensoren, die ein Bild sehen, bei Tag und bei Nacht. Chrono liefert die Physik, die man mit Messwerten kalibrieren kann, Unreal das Bild dazu. Die Bodenparameter in der Demo sind Literaturwerte. Mit Messungen vom echten Untergrund rechnet dasselbe Modell Dinge, auf die man eine Auslegung stützen kann.
Wie die Integration aufgebaut ist, steht in Teil 2.
Schlüsselwörter: Project Chrono Unreal Engine, Chrono::Vehicle, Fahrzeugsimulation Sand, Soil Contact Model, Mehrkörpersimulation Unreal, verformbarer Boden, Fahrsimulation Wasser, Parasail Simulation, Drohne Lageregler, Agentic Engineering, Serious Gaming, Simulation Beratung Schweiz, swissEmbedded
Braucht eure Steuerung eine Umgebung zum Üben? Wir bauen Simulationsumgebungen, in denen Regelalgorithmen gegen kalibrierte Physik laufen, lange bevor der erste Prototyp auf dem Prüffeld steht.
Unreal® und Unreal Engine® sind Marken oder eingetragene Marken von Epic Games, Inc. in den USA und anderswo; diese Artikel sind von Epic Games weder unterstützt noch geprüft. Project Chrono ist ein Open-Source-Projekt der University of Wisconsin-Madison und des Politecnico di Milano unter BSD-3-Lizenz.