Chrono in Unreal, Teil 9: Die Sequenz

Software Projekte Agentic Engineering

Die Demo läuft neun Minuten ohne Eingriff und muss bei jedem Lauf dasselbe zeigen, obwohl die Physik nicht auf die Sekunde reproduzierbar ist: ein Rad greift einmal früher, das Boot strandet einmal später, der Akku der Drohne ist einmal bei 487 und einmal bei 490 Sekunden bei 15 Prozent. Dieser Teil beschreibt die Sequenz als das, was sie ist, ein Phasenprogramm mit Ereignissen als Übergängen. Die Reihe: Teil 1 Überblick, Teil 2 Architektur, Teil 3 Fallen, Teil 6 Parasail, Teil 7 Drohne, Teil 8 Licht.

Die Demo, um die es in der Serie geht. Auf YouTube in 1080p ist die Konsole lesbar.

Wer dirigiert

Der Fahrzeug Pawn ist der Dirigent. Er hält den Autopiloten des Fahrzeugs als Zustandsmaschine mit acht Phasen, er kennt den Zustand der Drohne, des Parasails, des Ballspiels und des Kugelfischs, und er ist der einzige Ort, an dem Szenen geschaltet werden. Die anderen Actors haben eigene kleine Zustandsmaschinen, das Boot seine Wegpunkte und den Strandlauf, die Drohne ihre zwölf Flugschritte, das Ballspiel Halten, Wurf, Fangen, Fehlwurf, Holen, aber sie entscheiden nicht, wann die Demo weitergeht. Sie melden Zustände, der Pawn schaltet.

Das ist die eine Regel, die den Ablauf stabil hält: eine Szene beginnt, wenn die vorige ihren Zustand erreicht hat, nicht wenn eine Uhr abgelaufen ist. Uhren gibt es, aber sie starten mit einem Ereignis und messen von dort.

Das Programm

Die Zeiten sind die des gezeigten Laufs, sie schwanken von Lauf zu Lauf um einige Sekunden.

Start (0 bis 16 s). Motor aus, der Fahrer winkt der Drohne zu, die vor der Windschutzscheibe hängt. Bei 12.5 s der Anlasser, bei 16 s Gas. Die Drohne steigt in ihren Orbit. Das Boot mit dem Parasail startet bei 4 s seine Runden vor der Küste, weit weg, und ist im Fahrzeug nur zu hören, wenn es nahe kommt.

Parcours (bis etwa 60 s). Über die Sandbank, das Kopfsteinfeld, die Steine, ein Slalom um die Felsbrocken, die Schanze. Die Drohne folgt im Orbit, der Autopilot fährt Wegpunkte mit einem Pure Pursuit, mit den Wächtern aus Teil 2, die in jeder Phase gelten.

Düne (etwa 60 bis 90 s). Am Fuss der Düne, sobald das Fahrzeug bergauf zeigt, geht der Wählhebel auf 2. Die Auffahrt beginnt mit offenen Differentialen und vollem Gas. Fällt die Geschwindigkeit unter 8 km/h, sperren Mitte und Hinterachse, und das Fahrzeug kommt hoch. Auf dem Kamm gehen die Sperren wieder auf. Das ist ein Ereignis, kein Zeitpunkt: in einem Lauf bei 68 Sekunden, in einem anderen bei 70.

Drift und Fahrt zum Nordstrand (bis etwa 125 s). 22 Sekunden Drift hinter der Düne, dann über zwei Wegpunkte zum Nordstrand, kurzer Drift über die eigenen Spuren. Beim Übergang zum Strand wird das Ballspiel an die Küste versetzt, auf eine Uferlinie 1.3 Meter über dem Wasser, damit die Schleife um die Spieler frei vom Spülsaum bleibt.

Strand (etwa 125 bis 215 s). Die Schrittfolge am Wassersaum: ostwärts auf dem trockenen Sand als Anlauf, eine Kehre landeinwärts, dann der Lauf westwärts mit Vollgas auf dem festen nassen Sand der 0.3 Meter Linie. Auf diesem Lauf, wenn das Fahrzeug etwa neun Sekunden von den Spielern entfernt ist, wirft einer den Ball zu weit, auf die Fahrspur. Der Wächter des Fahrzeugs sieht den Ball in der Spur und bremst aus über 50 km/h bis zum Stillstand, während der zweite Spieler über die Spur läuft und den Ball holt. Im weichen Sand setzt das Fahrzeug danach viermal zurück und wieder vor, jeder Richtungswechsel mit einer halben Sekunde im Leerlauf, bevor es weiterfährt. Danach weiter westwärts auf dem trockenen Sand bis zum Wendepunkt. Die Höhe der Fahrspur über dem Wasser ist hier die Stellgrösse: im Spülsaum nimmt der gesättigte Sand dem Fahrzeug zehn km/h weg, und die Bremsung kommt aus 46 statt aus 55.

Fahrzeug im Rückwärtsgang im weichen Sand am Strand, HUD mit Autopilot in der Strandphase und negativer Geschwindigkeit

Steg und Sprung (etwa 215 bis 262 s). Ein Wendepunkt 150 Meter südlich der Rampe, eine Aufstellung 70 Meter landeinwärts, dann der Lauf mit Vollgas nach Norden über die Rampe des Stegs, deren Ende hochgebogen ist. Das Fahrzeug fliegt, trifft das Wasser im Becken am Ende des Stegs, die vier Räder tauchen innerhalb einer halben Sekunde ein. Die Drohne wechselt in die Verfolgung. Fertig ist die Phase, wenn der Rumpf auf der Wasseroberfläche über tiefem Grund liegt, oder nach 60 Sekunden.

Schwimmen (etwa 262 bis 300 s). Mit dem Wasser geht der Motor aus, der Rumpf schaukelt auf der Dünung, die auslaufenden Räder schieben als Schaufelräder. Der Rumpf läuft voll, das Fahrzeug sinkt in dreissig Sekunden und liegt auf dem Grund; seine Lage wird geloggt, weil sie der Bezugspunkt der letzten Szene ist. Der Kugelfisch kommt zwei Sekunden nach Beginn des Sinkens.

Drohne bei Tag (etwa 262 bis 343 s). Schon während das Fahrzeug sinkt, fliegt die Drohne einmal um das Wrack, steigt auf sechs Meter und macht ihren Tiefflug zum Dünenkamm, dem Startpunkt, wo sie nach gut 300 Sekunden ankommt. Die Kamera links soll erst auf das Parasail wechseln, wenn das Fahrzeug ganz unten liegt. Im gezeigten Lauf wechselt sie bei 271 Sekunden, neun Sekunden nach dem Wassereintritt, während das Dach untergeht: die Bedingung vergleicht die Weltzeit mit einem Zeitpunkt der Simulationszeit und greift mit dem Countdown der Aufnahme zwanzig Sekunden zu früh. Das Video ist so geblieben, wie es aufgenommen wurde.

Abend (ab etwa 343 s). Der Abend beginnt mit einem Ereignis, nicht mit einer Zeit: die Drohne ist oben auf dem Kamm, und der Pilot ist mit dem Surfen fertig. 40 Sekunden nach dem Kamm, sobald die Füsse wieder aus dem Wasser sind, schaltet der Übergang; solange kreist die Drohne oben langsam. Von hier an laufen die Uhren der Nacht, alle relativ zu diesem Moment. Sofort: Sonnenuntergang, Belichtung fixiert, die Drohne stürzt sich vom Kamm zum Schirm. Bei 45 Prozent des Sonnenuntergangs: Bootslichter, Blinklicht der Drohne. Bei 30 Prozent der Dämmerung: die Landbrise frischt auf. Nach 78 Sekunden: Mondaufgang. Nach 100 Sekunden: der Strandlauf des Bootes. Diese Reihenfolge ist die Aussage der Szene, der Mond muss oben sein, bevor das Boot strandet, und sie bleibt bei jeder Verschiebung des Anfangs erhalten.

Strandung und Landung (etwa 465 bis 480 s). Der Rumpf berührt den Sand, gleitet, und gilt als festgefahren, wenn er zwei Sekunden lang langsamer als 0.6 Meter pro Sekunde über Grund kriecht, oder acht Sekunden nach der ersten Berührung. Mit diesem Ereignis flaut die Brise ab und dreht auflandig. Der Schirm ist gelandet, wenn er weniger als 1.6 Meter über dem Boden steht, oder 60 Sekunden nach der Strandung.

Das Ende (etwa 487 bis 546 s). Der Schirm ist unten und der Akku der Drohne bei 15 Prozent: Rückflug zum Wrack. Bei 10 Prozent die Notlandung, Motoren aus erst auf dem Wasser, dann treiben. Die Kugelfische ziehen ein letztes Mal an der Scheibe vorbei, wenn die Drohne auf dem Wasser sitzt. Bei 8 Prozent schaltet sie ab, zwei Sekunden später beendet sich das Spiel. Diese Zeiten kommen aus dem Akkumodell in Teil 7, nicht aus einer Tabelle; ein Lauf mit weniger Wind oder einer anderen Formationsrunde endet einige Sekunden früher oder später.

Die Aufnahme

Der Film ist eine Bildschirmaufnahme des laufenden Spiels mit OBS, 1920 mal 1080 bei 60 Bildern pro Sekunde, mit dem Ton der Simulation. Die ersten Fassungen waren mit x264 in mittlerer Qualität aufgezeichnet und für die Website auf 540p verkleinert, und die verkleinerte Fassung war unbrauchbar: die Wasserstruktur und die feinen Lichter gingen im Encoder unter. Die letzte Fassung ist verlustfrei aufgezeichnet, UT Video in einer AVI-Datei, rund 55 Megabyte pro Sekunde und 31 Gigabyte für die neuneinhalb Minuten, und erst danach in Ruhe in AV1 kodiert. Verlustfrei hat zwei Vorteile: der Encoder läuft nicht neben der Simulation um die GPU, und die Verkleinerung geht von einem sauberen Original aus. Der Weg über den NVENC-Encoder mit fester Quantisierung wäre der schnellere gewesen; er ist in der erweiterten Ausgabe von OBS beim Start ohne Fehlermeldung abgebrochen, und die Zeit für die Ursache war nicht da.

Rückfälle

Jeder Übergang, der auf ein Ereignis wartet, hat eine Frist, nach der er auch ohne das Ereignis schaltet. Kommt die Drohne nicht auf den Kamm oder hört das Surfen nicht auf, beginnt der Abend 135 Sekunden nach dem Sinken. Landet der Schirm nicht, fliegt die Drohne 240 Sekunden nach der Dämmerung trotzdem zum Wrack. Bleibt das Boot nicht stehen, gilt es acht Sekunden nach der Bodenberührung als gestrandet. Erreicht das Fahrzeug den Wendepunkt am Strand nicht, endet die Strandphase nach 170 Sekunden. Kommt es nicht in das Becken, endet der Sprung nach 60 Sekunden.

Ein Rückfall ist nie die schöne Variante, aber er ist der Grund, warum jeder Lauf zu Ende kommt und ein Video ergibt. In den letzten zwanzig Läufen hat keiner gegriffen, und genau so soll es sein: der Rückfall ist die Versicherung, nicht der Plan.

Was sich bewährt hat

Schlüsselwörter: Simulation Choreografie Zustandsmaschine, Autopilot Phasenprogramm, ereignisgesteuerte Sequenz, reproduzierbare Demo, Fahrzeugsimulation Ablaufsteuerung, Debug Startphasen, Serious Gaming, Simulation Beratung Schweiz, swissEmbedded

Eine Demo, die jeden Lauf zu Ende bringt? Wir bauen Abläufe aus Zuständen und Ereignissen, mit Rückfällen und Logzeilen, die den Lauf beweisen.

Kontaktieren Sie uns →

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.