Himmel
Die Himmel-Darstellung ist einigen Eigenheiten unterworfen. Es kommen viele Entscheidungen über Qualität vs. Performance zum tragen, vor allem weil sich die Darstellung des Himmels nicht ausschließlich auf den Himmel bezieht. Betrachten wir zuerst die beiden möglichen Umgebungen wo ein Himmer und/oder Himmelskörper wie Sterne, Mond und Sonne gewünscht werden können:
- Indoor nach oben hin offen. Diese Möglichkeit wird von vielen Ego-Shootern genutzt und ist um einiges einfacher zu handhaben als die 2. Möglichkeit.
- Eine Landschaft ist weder nach unten, noch nach oben hin begrenzt. Beispielsweise könnte man am höchsten Berg stehen und hinab sehen. Dadurch ergeben sich einige Eigenheiten bei der Abgrenzung zwischen Himmel und Landschaft.
Betrachten wir der Einfachheit halber vorerst den 1eren Fall mit reinem Indoor.
Inhaltsverzeichnis
Himmel für großteils Indoor Level
Ein Indoor Level ist örtlich sehr begrenzt. Das heißt im Gegensatz zu einem Outdoor Level fällt es überhaupt nicht unangenehm auf wenn immer der selbe Hintergrund zu sehen ist (selbst in Filmen hat man des öfteren für eine Szene immer genau den selben Hintergrund). Hier kann also ohne Gewissensbisse eine Skybox verwendet werden (wie beispielswiese in Halflife). Zusätzlich hat man den Vorteil, dass es keinen Übergang zwischen Hintergrund und Vordergrund gibt, sondern das dies eine scharfe Grenze ist (sei es durch eine Mauer oder durch eine steile Klippe).
Das Höchste der Gefühle bietet hier Quake 3, welches einen dynamischen Himmel bietet. Bei Quake 3 wird (meines Wissens) keine Skybox verwendet, sondern mehrere Ebenen über dem Betrachter. Das heißt der Himmel ist eine theoretisch unendliche Ebene, welche jedoch durch die sehr hohen Mauern des Indoor-Levels stark abgegrenzt wird. Um den Himmel etwas dynamischer zu gestalten werden hier ähnlich wie bei 2D-Scroll-Engines mehrere Ebenen verwendet, welche unterschiedlich schnell gescrollt werden. In 3D ist dies natürlich eine unterschiedlich schnelle Änderung der Texturcoordinaten der unterschiedlichen Ebenen.
Himmel für Outdoor
Bei Outdoor Landschaften erhält man im Normalfall zusätzlich das Problem von Popping wenn der Himmel nicht an die Landschaft angepasst wird. Hier hat man mehrere Möglichkeiten dies zu bewerkstelligen.
Himmel ohne Distance based Blending
Die einfachere Methode um die Landschaft oder das Outdoor-Level am Horizont gleich dem Himmel zu machen ist ein OpenGL-Nebel. Dieser Nebel ist Abhängig von der Entfernung eines Vertex oder auch eines gezeichneten Pixels (hier sind die OpenGL-Spezifikationen sehr offen). Der OpenGL-Nebel besitzt jedoch nur eine Farbe und standardmäßig wird der Alphawert nicht berücksichtigt. Es handelt sich also um eine Interpolation (welcher Art auch immer) vom realen Farbwart zu einem vorgegebenen Farbwert. Somit muss der Hintergrund (also der Himmel) bis in die maximale Höhe eines Landschaftspunktes genau die Farbe des Nebels aufweisen. Die Möglichkeiten sind also sehr beschränkt.
Skybox
Eine Skybox funktioniert nur dann, wenn der untere Teil der Skybox der Nebelfarbe entspricht. Natürlich ist eine Skybox statisch, kann also nur über Umwege animiert werden.
Skysphere
Eine Skysphere ist nur stark begrenzt für Outdoor-Levels ohne Distance based Blending einsetzbar, da eine Skysphere nur schwer auf den oberen Himmel-Bereich begrenzbar ist, sodass sie im unteren Bereich eine Konstante Farbe aufweist.
Wolken als Textur
Wolken die aus einzelnen Texturen gezeichnet werden sind jedoch sehrwohl möglich. Über die Qualität lässt sich wohl streiten (Microsoft hat hier das ein oder andere brauchbare Konzept für Flugsimulatoren entwickelt). Nichts desto trotz sind Wolken aus Texturen in einer vorgegebenen Minimalhöhe auch nicht optimal für die visuelle Darstellung.
Himmel mit Distance based Blending
Hier kann jeder beliebige Hintergrund (auch eine Skybox mit einer Landschaft als Hintergrund) verwendet werden. Denn Distance based Blending wird im Grunde nur verwendet, um einen gegebenen Hintergrund mit der Szene zu "vermischen", also den Übergang nicht erkennbar zu machen.
Natürlich ist bei einer Landschaft als Hintergrund zu beachten, dass der Benutzer/Spieler den Eindruck erhält, dass er in einem eher kleinen Raum gefangen ist. Eine statische Landschaft als Hintergrund bietet sich also nur bei einer stark beschränktem Ausdehnung der Landschaft - bzw. des Outdoor Levels - an.
Skybox mit Distance based Blending einer Outdoor Szene
Himmelarten
Generell wird ein Himmel meist am Anfang der Szene gezeichnet um beispielsweise transparente Objekte korrekt gegen den Himmer dar zu stellen. Üblicherweise wird auch das schreiben in den Depth-Buffer deaktiviert (siehe glDepthMask( 0 ) ), um die restliche Szene nicht zu beeinflussen. Der Himmel sollte meistens als Hintergrund dienen, und nur in den seltensten Fällen (bei Flugsimulatoren) als Bestandteil der Szene.
Skybox
Eine Skybox ist ein Würfel welcher mit 6 vordefinierten Texturen gezeichnet wird. Ein beliebtes Tool zur generierung einer Skybox ist Terragen. Eine Skybox ist üblicherweise eine statische Umgebung. Das bedeutet es gibt keinerlei Bewegung im Hintergrund (nicht einmal die Wolken bewegen sich).
Skysphere
Hier wird eine Himmelstextur auf einer Kugel aufgetragen. Die Bewegung von Wolken oder Himmelskörpern ist hierbei um einiges einfacher als bei einer Skybox. Jedoch ist hier eine unterschiedliche Bewegung von einzelnen Wolken auch nur übere Umwege möglich.
Außerdem sei an dieser Stelle auch noch auf den Skydome hingewiesen.
Wolken als Textur
Hier wird zuerst der Himmel (durch Blauwerte wenn nicht gerade Nacht ist) dargestellt. Zusätzlich werden "unter" dem Himmel verschiedene Wolken durch texturierte Rechtecke dargestellt. Dies ist eine sehr gute Möglichkeit zur Darstellung eines Himmels, da er sehr viel Animation erlaubt, jedoch wird die Darstellung durch die Anzahl der Wolkentexturen begrenzt. Die Wolkentexturen müssen üblicherweise von Grafikern erstellt werden, wodurch sich die Anzahl auch in Grenzen hält.
Realistische Himmelsdarstellung
Es gibt natürlich auch realistisch wirkende (die Behauptung "realistische" wäre hier wohl fehl am Platz) Himmelsdarstellungen. Eine davon ist Cloud cover dessen Algorithmus jedoch nur mit Pixel Shadern halbwegs effizient umzusetzen ist.