Entwicklertagebuch
Grafiktools in ANNO 1404

 

Wie kommen eigentlich…?

Wolfgang Klose & Andreas JupeWie kommen eigentlich die Löcher in den Käse, die Streifen in die Zahnpasta und die 3D-Objekte in die Anno-3DEngine?

Dieses Entwicklertagebuch wird sich unter anderem damit beschäftigen, wie die 3D-Objekte in die Annowelt gelangen. Da wir im Rahmen des Entwicklertagebuchs nur einen recht eng begrenzten Themenbereich erklären können, wird die Frage der Käselöcher und der Zahnpastastreifen vorerst ein auch weiterhin ungelöstes Rätsel bleiben.

Aber zurück zum Thema.
Um 3D-Objekte in eine 3D-Engine zu bringen, gibt es verschiedene Möglichkeiten. Einige 3D-Engines bieten zum Beispiel die Möglichkeit, Objekte mit einem in die Engine integrierten Editor zu erstellen. Das ist gut geeignet, um relativ simple Geometrien mit minimalem Zeitaufwand zu erstellen, zu  texturieren und auch gleich in derselben Anwendung zu testen. Allerdings hat es den Nachteil, dass bei komplexer werdenden Geometrien der Editor immer mehr Objekterstellungs- und Manipulationsmöglichkeiten haben muss und somit der Programmieraufwand für die Entwickler des Editors enorm steigt.

Da die Gebäude und Einheiten in ANNO eine recht hohe Komplexitätsstufe aufweisen, haben wir ein mehrstufiges System verwendet. Dieses setzt bei der Erstellung der Geometrien, Festlegung von Texturkoordinaten und Animation auf die Funktionsvielfalt von Autodesk’s  3D Studio MAX, welches sich auch schon bei der Entwicklung von ANNO 1701 bewährt hat.


Stufe 1: 3D Studio MAX

Festlegung der TexturkoordinatenIn 3D Studio MAX werden zunächst die Lowpoly-Gebäude erstellt und über die UV-Map Tools die Texturkoordinaten festgelegt. Dann wird ein zum Lowpoly passendes Objekt mit erheblich höherer Polygonzahl gebaut und texturiert. Von diesem kann über ein sogenanntes „Baking“-Verfahren die finale Textur generiert werden. Dieses Verfahren hat den Vorteil, das einfache Licht- und Schatteneffekte in die Textur mit eingerechnet werden können und das die generierte Normalmap sehr präzise ist.
Im Grunde wird dabei nur die Geometrie und Textur des hoch aufgelösten Objekts auf die vorhandenen Texturkoordinaten des Lowpoly-Objekts projiziert.
Ein Vorteil ist die relativ hohe Flexibilität bezüglich struktureller Änderungen, welche durch diese Technik gewährleistet wird. Die Festlegung von Materialien für das Lowpoly-Objekt erfolgt ebenfalls in MAX. Dabei können für ein Objekt mehrere Materialen definiert werden, um später im Spiel verschiedene Shader und Texturen für dieses Objekt verwenden zu können. Anschließend wird das Objekt in einem Format exportiert welches von der 3D-Engine verarbeitet werden kann. Wir bei RD nutzen zum Exportieren das Granny-Plugin von RAD Game Tools, welches sehr viele praktische Optionen bietet und die komplette Bandbreite der für Anno erforderlichen Daten aus MAX exportieren kann.

Export aus 3D Studio MAXDieses Gebäude beispielsweise, die Bäckerei, wird später im Spiel ein statisches Objekt sein und soll eine Normalmap enthalten. Dementsprechend werden die zu exportierenden Daten über das Granny-Plugin in 3DS MAX festgelegt. Bei diesem Objekt werden die Optionen „include tangent vectors“ und „include binormal vectors“ für die Darstellung der Normalmap-Daten aktiviert. Um unnötigen Speicherverbrauch zu vermeiden, werden immer nur die unbedingt notwendigen Daten aus MAX heraus exportiert. Da dieses Objekt im Spiel keinerlei Animationen oder Spezialfunktionen hat, werden alle unnötigen Exportoptionen wie Animation oder Vertexcolor deaktiviert.

Die exportierten Daten werden dann in unserem Inhouse-Tool, dem RD Object Builder geladen und weiterbearbeitet.



Stufe 2: Der Object Builder

Damit die in 3D Studio Max erstellten Objekte und Texturen in Anno dargestellt werden können, müssen diese im Object Builder zusammengefügt und konfiguriert werden. Dieser Zwischenschritt ist notwendig, da in diesem Tool viele Einstellungen vorgenommen werden können, welche in 3D Studio Max nicht oder nur sehr umständlich definiert werden könnten. In den folgenden drei Abschnitten werden nun die wichtigsten Objekt-Typen jeweils anhand eines kleinen Beispiels erläutert.

Gebäude anlegen

Statische Objekte wie z.B. die Bäckerei sind relativ einfach zu konfigurieren. Hierzu muss lediglich das exportierte Objekt in den Object Builder eingefügt und die Texturen zugewiesen werden.
Aus 3D Studio Max exportierte Bäckerei inkl. TexturenEigentlich könnte die Bäckerei bereits jetzt schon im Spiel verwendet werden, jedoch würden z.B. Einheiten durch das Gebäude durchlaufen oder man könnte andere Gebäude auf die Bäckerei bauen. Um dieses Problem zu beheben, müssen Bereiche als nicht bebaubar und nicht begehbar markiert werden. Hierfür kann ein beliebiges Polygon unterhalb des Gebäudes aufgezogen werden. Im Spiel werden dann auf dem Terrain diese Bereiche als bebaut markiert und der Wegsuche mitgeteilt, dass dort keine Einheiten entlang laufen dürfen.

Rot: Nicht bebaubarer und nicht begehbarer Bereich, Grün: BegehbarUm die Bäckerei optisch noch ein wenig aufzuwerten, können z.B. noch ein Effekt am Schornstein des Backofens angebracht und eine Bodentextur definiert werden.
Effekte werden in einem weiteren Tool, dem Effekt Builder erstellt. Diese Effekte können, wie auch die aus 3D Studio Max exportierten Objekte, als eigene Objekt-Typen in den Object Builder eingefügt werden und laufen selbstständig ab. Um den Effekt an den Schornstein des Backofens zu verschieben, muss lediglich ein „Orientation Transformer“ eingefügt werden. Dies erfolgt aber automatisch sobald der Effekt direkt in der 3D Szene über Drag and Drop verschoben wird.

Fertig definierte BäckereiDie Bodentextur ist lediglich eine Textur, die an der Position des Gebäudes auf das Terrain gerendert wird, um das Gebäude besser in die Welt integrieren zu können. Das sogenannte Terrain-Decal wird auch als eigener Objekt-Typ eingefügt und ihm wird lediglich eine Textur zugewiesen und evtl. noch die Texturkoordinaten und Größe angepasst.



Animierte Einheiten anlegen

Ein Objekt zu animieren ist eigentlich nur eine Erweiterung eines statischen Objektes. Eine Einheit wird genauso wie ein Gebäude angelegt. Zuerst wird das aus 3D Studio Max exportierte Objekt in den Object Builder eingefügt und dann die Texturen zugewiesen. Zusätzlich dazu bekommt aber die Einheit noch all die Animationen zugewiesen, die später abgespielt werden sollen.

Einheit inkl. Animationen und einer SequenzenAnimationen werden als getrennte Dateien aus 3D Studio Max exportiert. Diese Dateien werden dann per Drag and Drop dem bereits im Object Builder definierten Objekt zugewiesen.
Dadurch ist die Figur aber noch nicht in der Lage sich zu bewegen, denn das Spiel hat noch keine Möglichkeit eine bestimmte Animation zu starten. Hierfür müssen einzelne Sequenzen angelegt werden. Über die Sequenzen können dann schließlich die Animationen eines Objektes angesprochen werden. So kann etwa nur eine einzelne Animation abgespielt werden, zwei nacheinander oder zwei gleichzeitig. Es können sogar Effekte zeitlich gesteuert werden, d.h. zu einer bestimmten Zeit ein bzw. ausgeschaltet werden.



3. Stoffsimulation in Anno 1404

Ein interessantes Beispiel für die Prozesskette zur Erstellung von Spezialobjekten für Anno  ist die Stoffsimulation, welche unter anderem für Segel von Schiffen verwendet wird.
Die Erstellung der Lowpoly-Geometrien erfolgt in MAX, nach dem gleichen Verfahren mit dem auch die Gebäude erstellt werden. Das Schiff, wie auch die Segel, werden später im Spiel eine Normalmap haben. Das Schiff selbst wird, da es keine Spezialfunktionen hat, exakt wie ein Gebäude aus MAX heraus exportiert. Die Segel hingegen erhalten vor dem Exportieren in die 3D-Engine noch eine „Spezialbehandlung“ in MAX. Definition von festen oder losen StoffteilenDie Stoffsimulation der 3D-Engine nutzt zur Definition von festen oder losen Teilen des Segels vordefinierte Farben an den Eckpunkten (Vertices) der Stoffgeometrie. Da die Geometrien später von der Stoffsimulation in der Engine noch unterteilt werden, kann das Ausgangsobjekt aus sehr wenigen Vertices bestehen. Die dadurch recht übersichtliche Anzahl der Eckpunkte erleichtert auch die Definition von festen oder losen Stoffteilen.
In diesem Fall soll das Segel oben und an zwei Punkten im unteren Bereich „fest“ sein. Dafür werden die entsprechenden Eckpunkte in, vorher festgelegten, Blautönen eingefärbt. Eckpunkte die schwarz (sozusagen ein Null-Wert) eingefärbt sind werden später in der Simulation beweglich sein.

Nachdem die Voreinstellungen abgeschlossen sind, kann das Objekt mit dem Granny-Plugin exportiert werden. Bei diesem Objekt wird im Granny-Plugin zusätzlich die Option „include vertexcolors“ aktiviert um die Einfärbungen der Eckpunkte zu übernehmen.
Technisch gesehen sind diese Farben eigentlich nichts anderes als ein Datenkanal, in dem zusätzlich zu den normalen Positions- und Mapdaten ein Wert von 0-255 für jeden Eckpunkt einer Geometrie definiert werden kann. Die Unterteilung in die drei Grundfarben (RGB) dient mehr oder weniger der Vereinfachung des Definierens dieser Werte. Der blaue Farbton den wir hier verwenden, wird später im Spiel nicht sichtbar sein.

Nachdem das Objekt exportiert ist, wird es als Clothobject in den Object Builder geladen.

Die Simulation startet sofort nachdem das Objekt als Clothobject geladen wird. Anschließend werden Texturen, Shader und diverse Werte für die Simulation ( Gravitation,Wind…etc.) festgelegt. Im Object Builder können außerdem noch Kollisionsobjekte für die einzelnen Stoffteile festgelegt werden, um z.B. zu verhindern, dass ein Segel durch einen Mast hindurch dringt oder Fahnen in Gebäuden „verschwinden“.

Laden des Segels als Clothobject in den Object Builder Simulation des Clothobjects



von Andreas Jupe (Digital Artist, Related Designs)
&
Wolfgang Klose (Senior Software Developer, Related Designs)

 

               

© © 2015 Ubisoft Entertainment. All Rights Reserved. Anno 2205, Ubisoft and the Ubisoft logo are trademarks of Ubisoft Entertainment in the US and/or other countries.
Anno, Blue Byte and the Blue Byte logo are trademarks of Ubisoft GmbH in the US and/or other countries.
Datenschutz | Nutzungsbedingungen | Impressum | Kontakt | Jobs | Presse | Händler | Support | Über Ubisoft