- Anno 117
- DevBlog
DevBlog: Feuer und Zerstörung – der Job eines Technical Artists
Hallo Anno Community!
Mein Name ist Oliver Mertins, Senior Technical Artist bei Anno 117: Pax Romana. Ich bin seit fünf Jahren bei Ubisoft Mainz und habe von Anfang an an Anno 117: Pax Romana mitgearbeitet.
Oft werde ich gefragt: „Was macht ein Technical Artist eigentlich?“
Einfach gesagt sind sie das Bindeglied zwischen dem Art-Team (z. B. Level-Art, 3D-Art, Animation) und den Entwicklungsabteilungen (z. B. Gameplay-Programmierung, Engine-Entwicklung, Tool-Entwicklung).
Während Grafiker eher in Formen, Farben und Timing denken, denken Programmierer eher in Spielelogik, Code-Design-Mustern oder Datentypen. Um eine Brücke zwischen ihnen zu schlagen, braucht es einen Technical Artist, der beide Welten versteht und in Meetings unterstützen kann, Skripte und kleine Tools zur Unterstützung der Artists schreibt, Recherchen durchführt, um neue Interessengebiete zu erkunden, oder sich mit der Optimierung von Assets befasst, um die Spielperformance zu verbessern. Er kümmert sich um die eher technische Art-Seite, wie das Erstellen von Funktionen aus Knotennetzwerken, das Erstellen von Control Rigs für Charaktere oder Objekte, die Entwicklung prozeduraler Materialien oder atemberaubender visueller Effekte unter Verwendung verschiedener Techniken oder sogar das Schreiben von Shadern.
Wenn man an Anno denkt, denkt man sofort daran, ein wunderschönes Imperium aufzubauen. Aber heute zeige ich euch, wie man es bis auf die Grundmauern niederbrennt und Zerstörung und Chaos hinterlässt. Neugierig? Dann lest weiter!
Ein Feuer erschaffen
In der Antike war das Feuer für das Überleben und den Wohlstand der Menschheit von zentraler Bedeutung. Es spendete nicht nur Licht in der Nacht, sondern ermöglichte es uns auch, Essen zu kochen und zuzubereiten, Güter und Waffen herzustellen und uns vor wilden Tieren zu schützen. Doch immer dann, wenn wir glaubten, die Naturgewalten vollständig unter Kontrolle zu haben, wurden wir eines Besseren belehrt, wie beispielsweise der große Brand in Rom unter Kaiser Nero zeigte.
All diese Fälle fanden Eingang in Anno 117: Pax Romana – doch bevor wir beginnen, ein Inferno zu entfachen und zu kontrollieren, müssen wir zunächst lernen, kleine Flammen und Funken zu beherrschen.
Um einen lebendigen, lodernden Feuereffekt zu erzielen, kombinieren wir mehrere visuelle Komponenten: Im Kern stehen leuchtende Flammen, ergänzt durch Funken für feine Details, Hitzeverzerrungen und eine Lichtquelle, die Licht und Schatten in die Umgebung strahlt, damit sich das Feuer in der Spielwelt glaubwürdig verhält. Einige Aspekte werden im Vergleich zur Realität künstlerisch übertrieben dargestellt, damit sie aus der Spielerperspektive in Anno sichtbar sind oder um dramatischere Bilder zu erzeugen.
Zur Erstellung animierter Flammen greifen wir auf das fortschrittlichste Tool zur Erstellung visueller Effekte zurück: Side FX Houdini. Hier erhalten wir die Möglichkeit, digitale Regeln für das Feuer zu erstellen, die dessen Verhalten in der realen Welt nachbilden. Dies wird als Simulation bezeichnet und wird für jedes Element durchgeführt: die Flamme, den Rauch und die Glut, die durch die erhitzte Luft fliegen.
Da eine hochauflösende Simulation zu viele Daten enthält, um in einer Echtzeit-Spielumgebung verarbeitet zu werden, müssen wir die Informationen vereinfachen, indem wir eine einzelne animierte Flamme in eine Textur „einbacken“ – das „flipbook“ (=Daumenkino). Dieses wird später von einem Shader wiederholt von links nach rechts und von oben nach unten gelesen.
Nun möchten wir auch den Eindruck eines dreidimensionalen Objekts erwecken. Dazu erstellen wir mehrere sich im Raum bewegende Punkte, sogenannte „Partikel“, und fügen an jedem Punkt das “flipbook” ein, um so die sich bewegende Gesamtform des Feuers zu erzeugen. Hier ein Überblick über die Bestandteile des Feuers:
Von Partikeln, Wärmeeffekten und Lichtquellen
„Aber Moment mal, die flipbook-Textur ist doch nur schwarz-weiß – wo sind denn die Farben?“, fragt ihr euch vielleicht.
Indem wir eine Graustufen-Textur für die Flammen und eine Farbverlaufstextur für das Feuer verwenden, können wir später die Farben aller Feuer im Spiel an einer zentralen Stelle anpassen. Das erleichtert die Iteration und das Erreichen einer einheitlichen Qualität erheblich. Wir gehen sogar noch einen Schritt weiter und teilen die Farbe in zwei Verlaufstexturen auf, eine für die emittierte Farbe und eine für die reine Albedo-Farbe. Dies dient jedoch nur dazu, einen lebendigeren Farbverlauf zu erzielen. Diese werden später als separate Eingaben für unseren Shader verwendet.
Was würde man sonst von einem Feuer erwarten? Genau, Funken! Fügen wir also welche hinzu:
Zurück in Houdini erstellen wir Partikel, die unter dem Einfluss von Windturbulenzen und der Schwerkraft umherfliegen. Wir machen sie etwas größer als in der Realität, damit sie auch aus größerer Entfernung sichtbar sind.
Nachdem wir nun die auffälligeren und „lauteren“ Komponenten erstellt haben, ist es an der Zeit, uns den subtileren zu widmen. Wir möchten die Hitze spüren, die das Feuer ausstrahlt, das heißt, wir möchten die Luft um das Feuer herum verzerren. Fügen wir also auch dafür ein paar Partikel hinzu. Um diesen Effekt zu erzielen, wird im Shader eine Normal Map zugewiesen, die die darunterliegenden Pixel verformt.
In der realen Welt werden nicht nur Objekte beleuchtet, sondern auch die Luft um die Lichtquelle herum. Winzige Staubpartikel schweben durch die Luft, reflektieren das Licht und leiten es weiter, wodurch beispielsweise das entsteht, was wir als Lichtstrahlen oder Sonnenstrahlen wahrnehmen.
Und da haben wir es:
Wie man eine Stadt in Brand setzt (im Spiel)
Nachdem wir nun Feuer erzeugt haben, wollen wir uns die ungeliebten Feuer-Zwischenfälle in der Stadt ansehen.
In Anno 117: Pax Romana gibt es drei Arten von Zwischenfällen: Brände, Seuchen und Aufstände. Feuer-Zwischenfälle sind das, was wir uns genauer ansehen wollen.
Insgesamt waren Feuer-Zwischenfälle ein komplexes Thema, da mehrere Abteilungen erforderlich waren, um das gewünschte Gesamterlebnis zu schaffen. Wenn der Zwischenfall eintritt, geraten die Bewohner in Panik und fliehen, Einsatzkräfte eilen zur Hilfe und löschen kleinere Brände. Die Luft füllt sich mit Rauch, Löcher in den Dächern werden sichtbar und mehrere Brände breiten sich in gefährlichen Ringen über die Stadt aus und hinterlassen Ruinen. Daher wurden verschiedene Arten von Feuer- und Raucheffekten in unterschiedlichen Größen erstellt, Positionsmarkierungen an jedem Gebäude angebracht und alle Elemente aufeinander abgestimmt und angepasst. Ein Beispiel: In der ersten Version war der Rauch aus der Perspektive der Spieler viel zu intensiv und verdeckte die Aktionen der Bewohner und Einsatzkräfte.
Zunächst entstehen Rauch und kleine Feuer, die immer größer und bedrohlicher werden.
Nachdem das Feuer das Gebäude sicht im Haus ausgebreitet hat, werden Löcher im Dach sichtbar, durch die glühende und schwarz verkohlte Holzbalken zu sehen sind. Wenn das Gebäude endgültig zerstört ist, stürzt es in sich zusammen und hinterlässt nur noch Trümmer.
Wie man ein Gebäude zerstört
Das bringt mich zum letzten Thema: Gebäudezerstörung.
Da Anno 117: Pax Romana viele verschiedene Gebäudetypen enthält und die Erstellung einer individuellen Zerstörungsanimation erheblichen zusätzlichen Festplattenspeicher erfordern würde, haben wir für bestimmte Fälle mehrere Lösungen entwickelt.
Der Großteil der Gebäude, die nicht so oft zerstört werden, erhält eine Shader-Lösung mit zusätzlichen Rauch- und Staubeffekten, während die detaillierte Zerstörungsanimation militärisch-strategischen Zielen wie Mauern, Türmen, Toren und der Villa vorbehalten bleibt, die relativ häufig zu sehen sind.
Normalerweise werden die Gebäude im „Zwiebelstil“ erstellt, d. h., es werden mehrere einseitige Schalen hinzugefügt, um ein Gebäude zu bilden. Leider ist dies für den Zerstörungsprozess nicht ideal, für den eine „solide“ Geometrie – also eine von allen Seiten geschlossene Geometrie – benötigt wird.
Daher wird das “Mesh” zunächst so vorbereitet, dass es fest ist. Anschließend wird es in Stücke geschnitten – „zerbrochen“, wie wir sagen – unter Verwendung vereinfachter Bruchmuster, die jeweils für ein anderes Material stehen, etwa Holz, das in lange Splitter zerfällt, während Ziegelsteine im Gegensatz zu Beton, der in viele Teile zerbröckelt, als einzelne Steine erhalten bleiben. Marmor beispielsweise wird horizontal in mehrere Stücke zerteilt:
Schauen wir uns nun an, wie wir die Zerstörungsanimation für den Steinturm umgesetzt haben.
Wenn wir nur lose Bruchstücke hätten, würde unser Turm sofort auf unkontrollierte Weise auseinanderfallen – aber das wollen wir nicht. Um die Kontrolle zu behalten, kleben wir die losen Teile zusammen und entfernen den Klebstoff im Laufe der Zeit teilweise, genau dort und genau dann, wo und wann wir es wollen. Das führt dazu, dass der Turm an einigen Stellen früh, an anderen erst später und so weiter zerbröckelt, was viel realistischer aussieht.
In unserer Spiel-Engine – der Empire Engine – verwenden wir eine Technik namens „Vertex-Animation“, um die Animation der herabfallenden Teile in einem Shader wiederzugeben. Dies ist eine alternative Methode für animierte Meshes im Vergleich zum Ansatz „Knochen mit Skinned Mesh“, der üblicherweise für Charaktere und Tiere verwendet wird. Eine Vertex-Animation erfordert neben dem zerbrochenen Mesh zwei Animationstexturen: eine für die Translation und eine für die Rotation der zerbrochenen Teile. All diese Elemente werden von einem Python-Skript exportiert, konvertiert und zusammengefügt, um den Prozess zu beschleunigen und zu optimieren.
Damit komme ich zum Ende meines Einblicks in das Thema Feuer und Zerstörung. Ich hoffe, euch gefallen die Effekte beim Spielen von Anno 117: Pax Romana genauso gut wie uns.
Viel Spaß,
Oliver









Kommentare