Spieleentwicklung im Web

Tutorial 30 – Real-Time Procedural Planet Rendering

Im heutigen Tutorial befassen wir uns mit den Grundlagen der prozeduralen Erzeugung und Darstellung von Planetenoberflächen.










In Abhängigkeit von der Entfernung eines Planeten zur Kamera kommen bei der Darstellung der Planetenoberfläche drei unterschiedliche Verfahren zum Einsatz:

Betrachtet man einen Planeten aus größerer Entfernung, dann wird dessen Oberfläche aus sechs sphärisch gewölbten, unabhängig voneinander texturierbaren Terrainflächen (Faces) zusammengesetzt, die jeweils nacheinander gerendert werden.


 (voreingestellter Wert: g_SimplePlanet_NumVerticesPerRowORColumn_PerFace = 51

Tutorial 29 – Screen Space Atmospheric Scattering

Grundlage für die Simulation von dynamischen Tageszeitänderungen oder einer realistischen Planetendarstellung ist die Berechnung der korrekten Himmelsfarben in Abhängigkeit vom Sonnenstand und der Kameraposition innerhalb bzw. außerhalb der Atmosphäre.

Für den blauen Himmel bei Tag sowie für das Morgen- bzw. Abendrot ist physikalisch gesehen die sogenannte Rayleigh-Streuung verantwortlich. Hierbei werden die einfallenden Lichtstrahlen an Teilchen (Luftmolekülen) in der Atmosphäre gestreut, deren Durchmesser deutlich kleiner sind als die Wellenlängen des sichtbaren Lichts. Während rotes Licht die Atmosphäre nahezu ungestört durchqueren kann, wird blaues Licht sehr viel stärker gestreut.



Teilchen, deren Durchmesser in etwa den Wellenlängen des sichtbaren Lichts entsprechen (Wassertröpchen/Nebel, Staubteilchen und Rauch), streuen das einfallende Licht unabhängig von seiner Farbe auf gleiche Weise. Dieses als Mie-Streuung bekannte Phänomen ist für den grauen Himmel bei Smog oder an einem regnerischen Tag verantwortlich.






Tutorial 29 demonstriert Ihnen, wie sich besagte Streulichtberechnungen im Rahmen des Post-Processings durchführen lassen. Hierbei werden zwei Methoden unterstützt:










Tutorial 28 – Deferred Shadow Calculations

Das Shadow Mapping gilt heutzutage als Standardverfahren für die Simulation von Schattenwürfen in einer 3D-Szene. Unabhängig von den Fortschritten, die man bei der Darstellung von Echtzeitschatten erzielt hat, ist die den Schattenberechnungen zugrunde liegende Idee denkbar einfach – man überprüft, ob ein Szenenpixel von einer Lichtquelle aus gesehen sichtbar ist (kein Schatten) oder nicht (Schatten). Damit sich dieser Test durchführen lässt, muss zunächst – im Verlauf eines zusätzlichen Render-Durchgangs – das Tiefenabbild der 3D-Szene aus der Blickrichtung der betreffenden Lichtquelle (Lichtquellen-Perspektive) in einer separaten Textur – der sogenannten Shadow Map – zwischengespeichert werden.

Im Zuge des Deferred Renderings (Lightings) bietet sich jedoch eine modifizierte Form der Schattenberechnung an. Für die Durchführung der Beleuchtungsberechnungen ist es hierbei notwendig, sowohl die Kameraraum-Normalen wie auch die Kameraraum-Positionen der sichtbaren Szenenpixel in separaten Render-Targets (Texturen) zwischenzuspeichern. Speichert man darüber hinaus zusätzlich die Kameraraum-Positionen der Schattenspender-Pixel aus der Blickrichtung einer Lichtquelle in einer Shadow Map, lassen sich die Schattenwürfe wie folgt berechnen:

  • Transformation der Position eines sichtbaren Szenenpixels aus der Kameraperspektive in die Lichtquellen-Perspektive. Als Ergebnis erhält man die Texturkoordinaten, an denen das transformierte Szenenpixel in der Shadow Map zu finden wäre, sofern es nicht durch einen Schattenspender-Pixel verdeckt wird.
  • Die Kameraraum-Position, die bei den zuvor berechneten Texturkoordinaten in der Shadow Map gespeichert ist, dient als Ursprung einer virtuellen Punktlichtquelle, welche das potenziell verdeckte Szenenpixel mit einem sogenannten Negativ-Licht (Antiradiance) beleuchtet (abdunkelt).

Hinweis: Das Negativ-Licht wirkt als Schattenspender. Mit zunehmender Distanz zwischen dem transformierten Szenenpixel und dem Schattenspender-Pixel schwächt sich der Abdunklungseffekt (die Schattenintensität) mehr und mehr ab. Für den Fall, dass ein transformiertes Szenenpixel auch von der Lichtquelle aus gesehen sichtbar ist, wird kein Schatten berechnet.

Im Rahmen des heutigen Tutorials wird die Schattenberechnung sowohl für
direktionale Lichtquellen, wie auch für Spotlights oder omnidirektionale Lichtquellen (Punktlichter) demonstriert.
.