Echtzeitanimationen sind eine eigenständige Kunstform, die besonders in Computerspielen eine beeindruckende Wirkung entfalten kann. Sie bieten die Möglichkeit, Spieler in Echtzeit zu faszinieren und das Erlebnis dynamisch zu gestalten. Im Vergleich zu vorab berechneten Animationen bieten programmierte Animationen zahlreiche Vorteile, die wir im Folgenden näher beleuchten möchten.
Faszination Animation
Animationen sind ein weites Feld. Damit kann eine bewegte Computerfigur, aber auch eine Zwischensequenz per Video gemeint sein. Richtig eingesetzt gelten Animationen als Höhepunkte und Belohnungen in Spielen. Denken wir mal an die Zwischensequenzen der alten Command & Conquer Spiele, die eine trashige Mischung aus Schauspielern und CGI-Effekten waren. Oder die Renderanimationen in zahlreichen Blizzard-Spielen, etwa Diablo oder StarCraft.
Heute setzt man aufgrund moderner Spieleengines gerne auf Echtzeitanimationen – auf die Gründe kommen wir noch.
Als Hobbyspieleentwickler steht man diesbezüglich vor zahlreichen schwierigen Entscheidungen. Gerade als Solokünstler fühlt man sich oft wie eine eierlegende Wollmilchsau, die irgendwie alles können und machen soll oder darf. Und da stellen sich viele Fragen der Art:
- Brauche ich Zwischenanimationen?
- Soll ich sie als Video machen?
- Soll ich es lieber programmieren?
- Wie groß ist der jeweilige Aufwand?
- Was sind die Vor- und Nachteile?
Gehen wir diese und andere Fragen und Aspekte durch.
Pflicht und Kür
Da der Begriff „Animation“ sehr weit gefasst werden kann und im Prinzip jede Bewegung im Spiel beinhaltet, müssen wir es entsprechend weit betrachten.
Zur Pflicht gehören, je nach Genre und Artstyle, folgende Punkte:
- Bewegung der Hauptfigur und Gegner,
- Animation (Sprite oder 3D) der Hauptfigur und Gegner,
- Kamera,
- bewegte Objekte wie Plattformen.
Bei einem Tetris müssen in erster Linie die Blöcke von oben nach unten fallen und dabei gedreht werden. I. d. R. haben diese Sprites keine Animationen. Bei einem Shooter wie Doom wird es bereits etwas komplexer. Hier bewegt sich der Spieler, Teile der Umgebung sowie die Gegner. Außerdem hat der Spieler Waffenanimationen und die Gegner unterschiedliche Arten von 2D-Animationen.
Im 2D-Bereich sind die meisten solcher Animationen „vorberechnet“. D. h. es sind fertige Sprites, die aneinandergereiht abgespielt werden. Je nach Animation wird dann Spritenummer oder Set gewechselt. Beispiel:
- laufen
- schießen
- sterben
Der Programmieraufwand hält sich in Grenzen, die meiste Arbeit hat der Grafiker. Solche Grafiken werden gepixelt, fotografiert oder als 3D-Modell gerendert. Dies komplett zu programmieren wäre i. d. R. völlig übertrieben und wird lediglich bei extrem minimalistischen Spielen gemacht, etwa mit Strichmännchen.
Bei 3D-Spielen gestaltet sich die Situation etwas anders. Hier kommen 3D-Modelle zum Einsatz, die über sogenannte „Bones“ mit Keyframe-Animationen gesteuert werden. Vorgegeben sind lediglich das Modell selbst und die relativen Positionsdaten der einzelnen Knochen. Diese Technik ist zwar komplexer und rechenintensiver, bietet jedoch deutlich mehr Flexibilität. Ein gutes Beispiel dafür ist die Ragdoll-Physik.
Für mich sind alle Animationen Pflicht, die das Gameplay beeinflussen oder vom Gameplay beeinflusst werden.
Die Kür
Zur Kür gehören alle Animationen, die eine lebendige Welt erschaffen, Atmosphäre schaffen und den Betrachter beeindrucken.
Im Spiel kann dies beispielsweise Parallax Scrolling im Hintergrund sein. Es ist nicht zwingend erforderlich, aber wenn es gut gemacht ist, sieht es beeindruckend aus. Auch Effekte wie Mündungsfeuer, Partikel oder Explosionen zählen dazu.
Bei Effekten wird oft eine Mischung aus vorberechneten und Echtzeit-Elementen verwendet. Partikel sind in der Regel kleine Sprites, die in Echtzeit tausendfach kopiert, gefärbt, geblendet und bewegt werden. Ähnlich verhält es sich mit Explosionen, die häufig auf einem Partikelsystem basieren. Allerdings werden bei Explosionen, insbesondere im 2D-Bereich, oft vorberechnete Animationen eingesetzt.
Zur Kür können auch Animationen der Umgebung und des Hintergrunds gehören, wie etwa ein Wasserfall, sich bewegendes Gras oder Bäume und Büsche. Ebenso zählen dazu Intros mit dem Firmenlogo, Vorspänne, Zwischensequenzen und Abspänne.
Theoretisch könnte man in diesen Fällen auch einfach nur Bilder oder Texte einblenden, und oft ist dies auch sinnvoll. Aber ganz ehrlich: Das kann auch sehr langweilig sein.
Vorteile vorberechneter Animationen
Wie wir bereits gesehen haben, gibt es Bereiche, in denen wir um vorberechnete Animationen kaum herum kommen, wie etwa die Bewegung der Spielfigur.
Vorberechnete Animationen haben den Vorteil, dass sie weniger Rechenpower brauchen als Echtzeitanimationen. Sie sehen im besten Fall auf allen Systemen gleich aus und der Programmieraufwand hält sich in Grenzen.
Bei Zwischensequenzen kann man in die Vollen gehen, ohne auf die Rechenleistung des Zielsystems große Rücksicht nehmen zu müssen, da Videos i. d. R. auf allen halbwegs modernen Systemen flüssig laufen. Das war bspw. der Grund, warum Blizzard schon in den 1990er Jahren mit Rendervideos beeindruckte. Die CD-ROM bot den nötigen Platz. Der Rest des Spiels sah dann vergleichsweise armselig aus, da man nach den beeindruckenden 3D-Szenen krümelige Sprites zu sehen bekam.
Der Punkt, dass die Animationen auf allen Rechnern gleich ablaufen und aussehen sollten, ist nicht zu unterschätzen. Dies kann sich gerade bei Effekten auswirken. Eine vorberechnete Spriteanimation mag optisch nicht so beeindrucken wie Echtzeit-Partikel, die mit Lichtern versehen werden und den halben Bildschirm „vollspritzen“, aber sie funktionieren immer gleich gut und gleich schnell.
Dazu ein kleines Beispiel. 2022 entwickelte ich ein Werbespiel im Auftrag. Zu den Vorgaben gehörte, dass das Actionspiel im Browser laufen sollte. Außerdem sollte es auf „normalen Bürocomputern“ reibungslos funktionieren. Also wurde ein HTML5-Spiel daraus und ich traf – um die Forderungen erfüllen zu können – zwei wichtige Entscheidungen.
- Keine Shader.
- Keine Partikeleffekte.
Somit musste ich auf vorberechnete Animationen zurückgreifen. Sie sahen zwar nicht so beeindruckend aus, aber das Spiel funktionierte am Ende sogar auf einem besseren Taschenrechner.
Nachteile vorberechneter Animationen
In erster Linie ist da der Speicherplatz zu nennen. Egal wie beeindruckend eine Zwischensequenz gerendert und nachbearbeitet wurde, sie braucht sehr viel Platz auf der Festplatte bzw. SSD. Um dem entgegenzuwirken, arbeitet man gerne mit geringeren Auflösungen und stärkerer Kompression, aber dadurch macht man sich sehr schnell eine ansonsten beeindruckende Animation kaputt. Besonders eindrucksvoll zeigt uns das YouTube jeden Tag. Egal wie genial ein Spiel in Echtzeit aussieht, über die Videoplattform wirken vor allem schnelle Bewegungen wie Matsch.
Abgesehen davon fehlt vorberechneten Animationen vor allem die Dynamik. In den 1990er Jahren, als die CD-ROM die Computerwelt eroberte, erschienen zahlreiche Spiele, die fast nur aus Videoschnipseln bestanden. Damals sah das sehr beeindruckend aus, aber spielerisch war das i. d. R. eine Vollkatastrophe. Heute ist dies natürlich längst Geschichte, dennoch sollte man auch bei Zwischensequenzen stets die Dynamik und Flexibilität bedenken. Bei unterschiedlichen Handlungsverläufen, alternativen Enden usw. braucht es für jede Varianz normalerweise auch ein neues Video, womit wir wieder beim Thema Speicherplatz wären.
Ein weiterer Punkt, den man unter dem Begriff „Dynamik“ finden kann, sind die technischen Voraussetzungen. Gerade beim PC wissen wir nicht, mit welcher Bildschirmauflösung ein Spieler spielt. Hier kann das Video verzerrt oder womöglich überhaupt nicht abgespielt werden. Entwickelt man für verschiedene Systeme, muss dies zusätzlich berücksichtigt werden.
Vorteile von Echtzeitanimationen
Spätestens, wenn wir uns die Nachteile vorberechneter Animationen bewusst sind, erkennen wir die Vorteile von Echtzeitanimationen. Ja, der Programmieraufwand ist höher, stellenweise sogar deutlich höher, aber wir sind flexibler und sparen extrem viel Speicherplatz.
Dazu ein simples Beispiel. Meine Demo NO RUST belegt entpackt rund 49 MB. Das Video, welches ich auf YouTube hochgeladen habe, kommt auf rund 6 GB! Und das für eine Animation von gut sieben Minuten. YouTube komprimiert es anschließend und das Video sieht – zumindest an einigen Stellen – aus wie gequirlter Schleim. In Echtzeit hingegen wirkt es knackig scharf und passt sich auch noch an die Bildschirmauflösung an.
Aber: Das Video läuft sogar auf meinem Mini-PC flüssig. Die Demo hingegen ruckelt an einigen Stellen wie ein Rattenschwanz und ist damit ungenießbar – wie ein Rattenschwanz.
In 3D-Spielen ist es heute eher üblich, Zwischensequenzen in der Spielegrafik zu zeigen. Mit den richtigen Werkzeugen ist es nicht aufwändiger als es bspw. in Blender zu erstellen und zu rendern. Das hat zusätzlich den Vorteil, dass man nicht aus der Spielwelt gerissen wird und sich alles viel organischer anfühlt. Außerdem kann man die Gelegenheit nutzen und die Charaktere näher zeigen.
Doch es müssen nicht immer die ganz großen Animationen sein, bei denen man durch Welten fliegt und man mit tausend verschiedenen Effekten den Spieler beeindruckt. Meistens sind es die Kleinigkeiten, die es ausmachen. Etwa Menüs, die sich schrittweise aufbauen, ein verzerrter, wackelnder Bildschirm, Spielereien mit Farben und Formen. Ja, teilweise steckt darin mehr Arbeit als in der eigentlichen Spielmechanik, aber die Programmierung kann sehr viel Spaß machen und führt dazu, dass sich alles auf dem Bildschirm lebendiger anfühlt.
Durch die Dynamik können wir auf Ereignisse reagieren. Alternative Verläufe sind kein Problem mehr, sondern nur noch eine Frage von wenigen Variablen.
Spieleprogrammierung als Kunstform
Spieleprogrammierung im Allgemeinen und Grafikprogrammierung im Besonderen sind Formen der digitalen Kunst. Dies wird besonders deutlich, wenn wir uns alte Spiele anschauen. In den 1980er Jahren war die Hardware stark limitiert. Es gab keine fertigen Engines wie Unity, Unreal, Godot oder GameMaker. Die Programmierung erfolgte hardware-nah, was bedeutete, dass der Programmierer nicht nur allgemein gut programmieren, sondern auch umfassendes Wissen über die Hardware besitzen musste.
In einigen Fällen gab es nicht einmal die Möglichkeit, Sprites zu zeichnen, sodass jede Figur programmiert werden musste. Die Optimierung war entscheidend, damit das Spiel auf eine Diskette, Kassette oder ein Modul passte – idealerweise mit ansprechender Grafik und Musik.
Diese Zeiten sind zum großen Teil leider vorbei. Selbst bei der Webentwicklung schert sich heutzutage kaum noch jemand ernsthaft um Optimierungen. Dennoch bin ich der Meinung, dass man zumindest den Versuch unternehmen sollte, der Tradition der Programmierkunst zu folgen. Das beinhaltet für mich vor allem drei Punkte:
- Code optimieren, damit er schneller läuft.
- Überall dort, wo es sinnvoll erscheint, Echtzeitanimationen verwenden.
- Kreativität bei den Animationen walten lassen.
Das betrifft ebenso die Teile des Spiels, die mit dem eigentlichen Game nicht viel zu tun haben. Menüs, Credits, Abspann etc. Man kann ein Bild zeigen, man kann es aber auch kreativ einblenden. Ja, es ist wesentlich mehr Arbeit, jedoch selbst, wenn es der Spieler nicht bewusst registriert, nimmt er es unterbewusst wahr.
Fazit
Egal, ob man alleine oder im Team entwickelt, sollte man sich zunächst seiner Stärken und Schwächen bewusst werden. Außerdem ist es wichtig, die Zielgruppe zu kennen und zu wissen, auf welche Systeme das Spiel portiert werden soll. Von diesen Antworten hängen zahlreiche Entscheidungen ab, etwa ob man Animationen vorberechnet oder in Echtzeit darstellt. Wie bereits gezeigt, bietet Echtzeit viele Vorteile. Einer der wenigen Nachteile liegt im höheren Programmieraufwand, der jedoch je nach Animation überschaubar sein kann.
Weiterführende Links
Shader-Programmierung 1: Grundlagen und Sprites
AI Has Entered the Game – Teil 1: Die Games-Entwicklung wird zunehmend zum teuren und aufwendigen Spaß
Warum soll ich programmieren lernen?
Arcade-Spiele – die Mutter aller Genres?
Warum Retro?
RPG Maker – das ungeliebte Kind