Entwicklertagebuch
Wie entsteht ein Zierobjekt in Anno?

 

Hallo ANNO-Fans

In ANNO 1701 gibt es mehr als 150 Gebäude und jedes davon ist einzigartig. Ihr könnt euch sicher vorstellen, dass in jedem einzelnen viel Arbeit steckt. Hier erhaltet ihr einen Einblick in den technischen Entstehungsprozess eines solchen ANNO-Gebäudes. Lasst uns einen Triumphbogen bauen, mit dem ihr eure Bewohner stolz auf deren Stadt macht.

Bevor man etwas baut, sollte man den Bau planen, d. h. es wird eine Konzeptzeichnung erstellt. Der Illustrator (hier: Stefan Speth) muss sich dabei schon an bestimmte Vorgaben halten, wie z. B. die Größe. Die ANNO-Welt ist in rechteckige Segmente, genannt Grids, aufgeteilt. Jeder Gebäude-Typ hat eine fest definierte Größe - Fläche und Höhe. Zum Beispiel nehmen alle Wohnhäuser eine Fläche von 3x3 Grids ein und werden pro Zivilisationsstufe um ein Stockwerk höher. Der Triumphbogen ist ein Zierobjekt, das ihr erst ab der Aristokraten-Stufe bauen könnt. Er kann ruhig etwas größer sein als ein Wohnhaus, also 5x2 Grids und vier Stockwerke hoch.

Da die Rechenleistung eines Computers begrenzt ist, müssen wir Grafiker die 3D-Objekte mit möglichst wenigen Polygonen erstellen. Dies ist eine Kunst für sich, bei der wir buchstäblich einen Quader in eine Kugel verwandeln müssen. So schlimm ist es auch wieder nicht, denn schließlich gibt es ja Normal-Mapping. Es handelt sich hierbei um eine Technik, die die Illusion von mehr räumlichen Details an niedrig aufgelösten 3D-Objekten erzeugt.

Okay, wir bauen jetzt erst einmal den "Quader", der später per Normal-Mapping wie eine "Kugel" aussehen wird - aus Tausenden von Polygonen bestehend. Sobald mir die Konzeptzeichnung vorliegt, beginne ich mit dem Bau des "Quaders", genannt Lowpoly-Objekt. Dabei erstellt man das Objekt aus möglichst einfachen, primitiven Formen. Die Details kommen später in die Normal-Map. Das Lowpoly-Objekt ist später die Geometrie, die im Spiel zum Einsatz kommt. Hier muss man sich an genaue technische Limitationen halten, natürlich genauso wie der Illustrator an die Größe, also 5x2x4 Grids.


Ich möchte mich aber nicht zu sehr in technischen Details verlieren, z. B. wie viele Maßeinheiten in der 3D-Software einem Grid entsprechen usw. Nur noch soviel dazu: Das Lowpoly-Objekt wird in 3D Studio Max modelliert und in dreifacher Ausfertigung benötigt, den LOD-Stufen (Level Of Detail), also mit immer jeweils weniger Polygonen.

Für die nicht so technisch versierten unter euch, sei erwähnt, dass diese Methode dazu dient, möglichst weit aus der ANNO-Welt herauszoomen zu können. Ein Rechner kann immer nur eine begrenzte Anzahl von Polygonen innerhalb des Bildschirmrahmens darstellen. Zoomt man ganz nah heran, sind nur wenige Objekte innerhalb des Bildschirmrahmens sichtbar, das bedeutet, diese Objekte können eine höhere Polygonanzahl haben. Zoomt man nun heraus, sind mehr Objekte sichtbar, also muss die Polygonanzahl der einzelnen Objekte sinken, damit die Gesamtanzahl von Polygonen in etwa gleich bleibt, um eine stets optimale Spiel-Performance zu gewährleisten.

Durch Performance-Tests wurde ermittelt, dass pro Grid 32 Polygone in LOD0, 90 Polygone in LOD1 und 200 in LOD2 verbraten werden dürfen. Zur Berechnung der Polygon-Anzahl ist nur die Flächengröße entscheidend. Bei einer Fläche von 5x2, also 10 Grids, darf der Triumphbogen entsprechend 320 Polygone in LOD0, 900 Polygone in LOD1 und ganze 2000 Polygone in LOD2 haben. Die LOD-Stufen sind so definiert, dass LOD2 ab einer bestimmten Entfernung ausgeblendet wird, während LOD1 ab einer bestimmen Entfernung mit LOD0 vertauscht wird.


Auf dieses Lowpoly-Objekt muss man eine Textur, d. h. ein Bild projezieren, damit die ANNO-Welt auch recht bunt wird. Dazu vergibt man sogenannte UV-Koordinaten (im Folgenden "UVs" genannt). Stellt euch vor, man faltet die einzelnen Flächen eines Quaders auf, sodass der Quader auf eine zwei-dimensionale Fläche passt. Diese aufgefalteten Flächen sind dann die UVs und bestimmen die Bereiche einer Textur (eines zweidimensionalen Bildes), die auf den Quader projiziert werden.

Diese Textur muss natürlich ebenfalls wie das Lowpoly-Objekt in den Speicher eures Computers geladen werden. Deshalb sollten die UVs möglichst die gesamte Textur in Anspruch nehmen, damit wenig unbenutzte Texturbereiche euren Speicher auffüllen. Die Textur darf eine Größe von 512x512 Pixel haben.

Für das Normal-Mapping benötigt man eine zusätzliche Textur. Diese beiden Texturen nennt man Diffuse- und Normal-Map. Die Diffuse bringt Farbe auf den Triumphbogen, die Normal-Map bringt mehr Details, wie z. B. Ziegelsteine. Die Details der Normal-Map berechnet man aus einem hochaufgelösten Objekt mit mehreren tausend Polygonen. So, fertig, da ist er auch schon.

Ganz so schnell geht das auch wieder nicht. Ihr könnt euch sicher denken, dass darin einige Tage Arbeit stecken. Bevor wir fortfahren, lassen wir uns noch einmal die Polygonzahlen auf der Zunge zergehen. Das Highpoly-Modell hat etwa die 370-fache Polygonanzahl. Bei diesem nackten Zahlenvergleich wird wohl jedem klar, dass das Highpoly-Modell unmöglich in einem Spiel zum Einsatz kommen kann. Das Normal-Mapping bietet uns die Möglichkeit, die vielen Details des Highpolys an einem niedrig aufgelösten Modell darzustellen.

  

Das Verfahren zur Berechnung der Normal-Map nennt man Textur-Baking. Ab hier braucht man nichts mehr zu tun, als zu warten bis der Computer die Diffuse- und Normal-Map berechnet hat. Wie ihr im Bild sehen könnt, sind Lowpoly- und Highpoly-Objekt exakt zueinander ausgerichtet, so dass die Details des Highpoly-Modells auf das Lowpoly-Modell projiziert werden können. Der Computer "malt" praktisch die Details des Highpoly-Objekts auf die Textur, die auf das Lowpoly-Objekt "geklebt" wird. Und wohin der Computer diese "malt", das bestimmen wiederum die UVs des Lowpoly-Objekts.

In unserem Bombastic Object Builder - kurz "BOB" - bekommt das Lowpoly-Objekt noch viele spielrelevante Einstellungen. Hier werden u. a. die Entfernungen für die LOD-Stufen definiert, der Shader für das Normal-Mapping eingestellt, Effekte gesetzt, weitere Objekte, wie z. B. Bäume, Wägen und andere Dekorationen hinzugefügt usw.

Jetzt ist der Triumphbogen fertig, und wir können ihn in unsere ANNO-Welt setzen. Zusammen mit ein paar Statuen werden die Bewohner richtig stolz auf ihre einzigartige Metropole sein. Wer noch nicht genug hat, kann jetzt noch interessante Details über das Normal-Mapping erfahren.

3D-Objekte bestehen aus Polygonen, exakter: aus Triangles, weil ein Dreieck die kleinstmögliche Fläche ist. Der Rechner benötigt für die Darstellung eines Triangles folgende Daten: 3 Vertices (Scheitelpunkte) und eine Normale, die angibt, welche Seite des Triangles dargestellt werden soll, da Triangles immer nur von einer Seite sichtbar sind.

Bauen wir einmal eine Szene zur Normal-Map-Berechnung nach. Das muss man für das Texture-Baking natürlich nicht machen. Dieser "Versuchsaufbau" repräsentiert nur das, was der Computer automatisch bzw. intern bei der Berechnung einer Normal-Map macht.



Man beleuchtet das Highpoly-Objekt auf der X-Achse mit rot und negativ rot, auf der Y-Achse mit grün und negativ grün und auf der Z-Achse mit blau. Das Polygon mit seinen (im Bild blauen) Normalen repräsentiert einen Ausschnitt des Lowpoly-Objekts. "Negativ" bedeutet nur, dass die roten Farbwerte des Lichts subtrahiert werden.

Jetzt kommen wir zu dem vielleicht wichtigsten Tipp. Der nächste Versuchaufbau zeigt eindeutig, dass die Normal-Map keine Höhenunterschiede kennt. Das scheint nur zunächst verwirrend. Exakter definiert könnte man sagen: Die Normal-Map stellt Höhenverläufe dar.

Im Bild seht ihr auf der berechneten Normal-Map, dass der Höhenunterschied der beiden Quader zu keinem Höhenunterschied auf der Normal-Map führt. Beide Quader haben den mittleren blauen Tiefenwert R128 G128 B255. Eine wirkliche Tiefe in der Normal-Map entsteht nur durch die Kombination der drei Farbwerte, die man nur durch Höhenverläufe erreicht.

Und Höhenverläufe erreicht man durch eine Abrundung der Objekte. Kantet man die Quader ab, erhält man leichte Tiefenverläufe an den Kanten. Der Großteil der Quaderfläche bleibt trotzdem im Standard-Blau ohne Tiefeninformation. Möchte man z. B. Ziegelsteine modellieren und einen möglichst starken Normal-Map-Effekt erzielen, sollte man die Ziegelsteine so rund wie möglich modellieren, um möglichst großflächige Tiefenverläufe auf der Normal-Map zu erhalten.

So, ich hoffe euch hat diese kleine Normal-Map-Kunde Spaß gemacht. Ich wünsche euch noch viel Vergnügen beim ANNO-Zocken. Und wenn ihr es bis zur Aristokraten-Stufe schafft, dann denkt daran, eure Einwohner mit einem Triumphbogen zu erfreuen.

Von Valentin Koch, Digital Artist

 

               

© © 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