Anno 1404: Technikdetails zur Simulation des Meeres
Im zweiten Teil des Entwicklertagebuchs stellen wir Ihnen die Simulation des Meeres vor. Da in Anno 1404 ein Großteil der Welt aus Wasser besteht und die Schifffahrt eine entscheidende Rolle innerhalb des Spiels einnimmt, liegt ein besonderes Augenmerk auf der Darstellung des Wassers.
Das Tagebuch wurde geschrieben von Sven Janusch - Related Designs, Software-Entwickler.
"Was aber macht die Darstellung von Wasser so besonders? Zu den wichtigsten Merkmalen zählen unter anderem die Wellenform, die Wellenbewegung, die Reflexion von Licht und die Brechung sowie Absorption von Licht innerhalb des Wassers. Weiterhin existieren innerhalb einer Welt verschiedene Klimazonen, die sich durch unterschiedliche Wellen und Farbgebungen bemerkbar machen. Damit wir all diese Merkmale auch realistisch darstellen können, müssen wir die Simulation in mehrere Einzelschritte aufteilen.
Refraktion und Reflexion
Zur Realisierung der Brechung beziehungsweise Reflexion der Umgebung müssen wir zuerst die sogenannte Refraction- und Reflection-Map füllen. Die Refraction- und die Reflection-Map kann man sich als zwei Texturen vorstellen, in die alle Objekte sowie die Landschaft hineingezeichnet werden. In einem späteren Schritt können wir die zwei Texturen dann auf das Wasser projizieren und ermöglichen so die Brechung der Umgebung unterhalb des Wassers sowie die Spiegelung der Landschaft über dem Wasser.
Allerdings rendern wir nicht alle Objekte in beide Texturen, sondern teilen sie auf diese auf. Alle Objekte, die sich oberhalb des Meeresspiegels befinden, werden an diesem gespiegelt und in die Reflection-Map gezeichnet. Objekte unterhalb des Meeresspiegels werden hingegen in die Refraction-Map gerendert und erhalten außerdem eine erweiterte Beleuchtung, die sich in Form von Kaustik bemerkbar macht. Bei der Berechnung der Kaustik (Begriff aus der technischen Optik) simuliert die Engine Lichtstrahlen, die durch das Wasser gebündelt werden und dadurch einige Bereiche innerhalb des Wassers aufhellen und andere abdunkeln (siehe Bild auf Seite 83 rechts unten). Zusätzlich wird dabei Licht umso stärker absorbiert, je tiefer es ins Wasser eindringt.
So entstehen Brechung, Spiegelung u. Wellengang: Für die Wasserdarstellung erstellen die Entwickler zwei Texturen, in die alle Objekte sowie die Landschaft hineingezeichnet und in einem späteren Schritt auf das Wasser projiziert werden. Dynamische Wellen werden durch eine Textur mit Farbkanälen simuliert.
Die Wellensimulation
Die darauffolgenden Schritte dienen der Generierung des Wellengangs. Dabei unterscheidet die Engine zwischen zwei Wellenarten: die Standard-Wellen und die dynamischen Wellen. Im Gegensatz zu den Standardwellen entstehen dynamische Wellen durch den Einfluss von Objekten. So ermöglicht diese Technik zum Beispiel die Realisierung des Fahrwassers von Schiffen oder die Darstellung spezieller Brandungseffekte.
Wie zur Simulation der Refraktion und Reflexion benötigen auch die dynamischen Wellen eine Textur, die Dynamic-Wave-Map. Anstatt, wie normalerweise üblich, dort Farben von Objekten zu speichern, verwendet die Dynamic-Wave-Map ihre Farbkanäle, um Informationen über die dynamischen Wellen abzulegen. Dazu zählt zum Beispiel die Höhe der Welle und wie viel Schaum sie erzeugt. Aus diesem Grund werden in die Dynamic-Wave-Map nur spezielle Effekte und keine Objekte gezeichnet.
Nachdem die Dynamic-Wave-Map erstellt ist, kombinieren wir den Wellengang des Meeres mit den dynamischen Wellen und speichern dies innerhalb einer Displacement-Map. Während dieser Berechnung können wir den Wellengang verändern, unter anderem die Höhe der Wellen oder deren Geschwindigkeit. Auf diese Weise ist die Engine in der Lage, von ruhiger See (flache, langsame Wellen) bis hin zu rauen Gewässern (mit spitzen und hohen Wellen) jeden Meereszustand darzustellen und zu ändern.
Das Rendern der Wassergeometrie: Um das Rendering der Wassergeometrie effizient auszuführen, wird diese nur innerhalb eines sichtbaren Bereichs dargestellt. Zu diesem Zweck projizieren die Techniker mithilfe des Kamera-Blickfeldes ein Gitternetz auf die Wasseroberfläche.
Rendering
Im letzten Schritt folgt das eigentliche Rendering der Wassergeometrie. Damit das Rendering möglichst effizient vonstatten geht, lassen wir die Geometrie nur innerhalb des sichtbaren Bereichs darstellen. Dazu wird ein Grid (Gitternetz) mithilfe des Kamera-Frustums (Blickfeld der Kamera) auf die Meeresoberfläche projiziert. Dieses Grid besitzt immer die gleiche Struktur, unabhängig davon, wie nah sich die Kamera am Wasser befindet. Durch den Einsatz dieser Technik erreichen wir eine detaillierte Darstellung und eine konstante Leistung für das Rendering. Zum guten Schluss kombinieren wir alle vorherigen Aktionen in einem letzten Render-Schritt. Dazu wird zuerst die Geometrie anhand der erzeugten Displacement-Map verändert, wodurch sie ihre Wellenform annimmt. Zusätzlich werden die Refraction- und Reflection-Map auf das Wasser projiziert, die Beleuchtung für das Wasser berechnet, der Schaum generiert und dem Meer seine Farbe gegeben.
Interaktion mit Objekten
In Anno 1404 haben wir aber nicht nur die Darstellung des Wassers verbessert, sondern auch dessen Interaktion mit den Objekten. Dies stellt insofern ein Problem dar, da alle Schritte zur Berechnung des Wassers - einschließlich der Berechnungen des Wellengangs - auf der GPU ausgeführt werden. Die Positionierung und die Ausrichtung der Objekte hingegen werden von der Engine ausgeführt, also auf der CPU. Um die Interaktion zu ermöglichen, muss jeder Punkt auf dem Wasser von der Engine reproduzierbar sein. Ist dies möglich, kann die Position sowie die Ausrichtung der Objekte dem Wellengang angepasst werden, wodurch beispielsweise Schiffe und Treibgut sanft auf den Wellen schaukeln.
Der realistische Beleuchtungseffekt simuliert Lichtstrahlen, die durch Wasser gebündelt werden und so einige Bereiche aufhellen und andere abdunkeln.
Still ruht der See
Die Darstellung der Seen erfolgt nach einem ähnlichen Prinzip wie die des Meeres. Allerdings verfügen Seen über keinen hohen Wellengang, weshalb wir die Simulation der Wellen hier stark vereinfacht haben und beim Rendering auf ein projiziertes Gitternetz verzichten. Im Gegensatz zur Engine von Anno 1701 kann das neue technische Fundament mehrere Seen auf unterschiedlichen Höhenlagen rendern, ohne dass Probleme bei der Darstellung von Refraktion und Reflexion entstehen."


Habe die gesamte Anno Serie von 1602, 1501, 1701.
Von Serie zu Serie wurde die Grafikumsetzung besser und schöner, ebenso die Wirtschaftssimulation und der Ausbau der Städte.
Wünsche mir aber dennoch eine abwechslungsreichere Inselwelt.
Und bei 1701 kommt es auch nur darauf an wie groß deine Inseln sind
Aber freu mich schon riesig drauf.
Hoffentlich wirds so gut und bugfrei wie 1701, ne schöne Limited Edition wär auch wieder schön