|
|
Eigene Skydome Texture definieren Verwendung von Sichtweitenbegrenzung und Nebel
Für die Stimmung innerhalb eines Außenlevels ist eine Änderung der Lichtverhältnisse ein wesentlicher Effekt. Dies kann über verschiedene vordefinierte SKY Strukturen ab der Version 6 einfach erreicht werden. Ich habe in meinem Projekt die Skydome Texturen auf www.terminal26.de verwendet. Ob Skydome oder Skycube ist für den Wetterwechsel nicht relevant. Grundsätzlich sind aber Skycubes wesentlich einfacher selbst zu erzeugen. 1. Schritt Sky definieren Im ersten Schritt müssen jetzt alle SKY die für den Wetter- bzw. Tag & Nachtwechsel benötigt werden in C-Script definiert werden. Hierbei können Dome und Cube beliebig vermischt werden. Die unten verwendeten Texturen (skydome01.tga und skydome02.tga) können auf www.terminal26.de heruntergeladen werden. Definition der Sky sky skybox1 { sky skybox2 { sky skybox3 { 2. Schritt Sky umschalten Das wechseln der Sky ist in C-Script völlig problemlos. Bei dem gewünschten Sky muss nur das visible Flag gesetzt werden. Wichtig ist es bei allen nicht benötigten Sky das visible Flag auf OFF zu setzen. Umschalten der SKY: function sky1() {
Bild: Szene mit den unterschiedlichen Sky-Strukturen
In der oben dargestellten Methode erfolgen die Wechsel äußerst schlagartig. Deshalb ist es ratsam die Übergänge zwischen zwei SKY-Texturen abzumildern und überzublenden. Dabei werden beide SKY transparent gesetzt. Bei dem auszublendenden SKY wird der Alphawert jetzt kontinuierlich verkleinert und bei dem ein- zublendenden SKY jetzt kontinuierlich vergrößert. Dadurch verschwindet die alte SKY-Textur und wird durch die neue ersetzt. Die Laufzeit der Schleife muss dann noch den jeweiligen Bedürfnissen angepasst und über die time Variable von der möglichen Framerate des Rechners unabhängig gemacht werden. Codebeispiel Überblendung von Texturen skybox4.transparent=ON;
Für die Nacht konnte ich keine Texturen finden und wollte deshalb einen eigenen Skycube definieren und Ihn komplett Schwarz füllen. In der Skycubetextur wird der Himmel als Rechteck abgewickelt und es können jetzt alle Außenseiten, der Boden und der Himmel gefüllt werden. Daher muss die Skycubetextur aus 6 gleich großen Quadraten bestehen deren Größe ein Faktor von 2 sein sollte. Es eignen sich hier Größen von 256x256, 512x512 oder größer, da sonst die Details nicht ausreichen und der Himmel pixelig aussieht. Die Himmelstextur muss (oder sollte?) im TGA Format erstellt werden. Bild: Meine Himmelstextur für die Nacht in 3072 x 512 Pixeln Jetzt habe ich die Textur noch wie gehabt eingesetzt uns sofort ausprobiert. sky skybox3 { Ein Blick auf das Resultat ist sehr ernüchternd. Meine erste Himmelstextur scheint obwohl sehr einfach gestrickt nicht wirklich verwendet zu werden. Vielmehr erscheint der bekannte Standardhimmel des WED. Bild: Szene mit der erzeugten schwarzen Himmelstextur Ein kurzer Vergleich meiner Himmelstextur mit einer funktionierenden die ich mir aus einem Tutorial organisiert habe zeigt den Unterschied. Offensichtlich muss in der Textur ein Alpha-Kanal vorhanden sein damit Sie auch im Skycube zur Verwendung kommen kann. Der Alpha-Kanal kann z.B. in PaintShopPro erstellt oder von einer vorhanden Himmelstextur importiert werden. Nach hinzufügen des Alpha-Kanals ist dann auch meine erste eigenen Himmelstextur funktionstüchtig. Verwendung von Sichtweitenbegrenzung und Nebel Neben der Himmelstextur ist für den Tag & Nachtwechsel auch die Einstellung der Sichtweite und des Nebels wesentlich um die Szene stimmungsvoll anzupassen. Bild: Nachtansicht mit den Sichtweiten- und Nebeleinstellungen Tag Die Details im Hintergrund werden noch mit dem weißen Schatten des Tagesscriptes dargestellt. Zusätzlich ist die Sichtweite für die Nacht zu groß. Script zur Veränderung der Sichtweiten- und Nebeleinstellungen // Tag function fog1() { // Nacht function fog3() { Es können unter File - MapProperies - Fog 5 verschiedene Nebel definiert werden, die über C-Script mit fog_color = 1..5 ausgewählt werden können. Bei Umschaltung auf die Nacht-Himmelstextur muss also auch der Nebel und die Weitsicht entsprechend angepasst werden. Mit den Nebel- und Weitsichteinstellungen muss abhängig von der Levelgröße experimentiert werden. Insbesondere die Weitsichteinstellung (camera.clip_far) hat extreme Auswirkungen auf die Framerate.
Besonders bei großen Außenleveln in denen die Weitsicht beschränkt werden muss ist die Beschaffenheit der Himmelstextur von großer Bedeutung. Bild: Szene mit Blick in den Wald Oben dargestellte Bilderserie zeigt den Blick in einen Wald. Mit den Tageinstellungen ist das Waldstück optimal sichtbar und es kann bis auf die begrenzenden Berge geblickt werden. Der Wald soll jedoch dunkel und düster erscheinen. Dafür wird die Nebelfarbe auf Schwarz geändert. Die Weitsicht kann ebenfalls reduziert werden, da in der Dunkelheit kein so weiter Blick erforderlich ist. Üblicherweise ist die Reduktion der Weitsicht auch notwendig um die Framerate innerhalb des Waldstückes halten zu können, da der Wald naturgemäß aus einer hohen Anzahl von Modellen besteht. Bei reduzierter Weitsicht zeigt sich jetzt aber oben im mittleren Bild dargestelltes Phänomen. Die Bäume sind dunkel aber aufgrund der reduzierten Weitsicht werden die Berge nicht mehr dargestellt. Hier scheint jetzt die Himmelstextur durch und ergibt ein völlig wiedersinniges Bild, dass eine weite freie Fläche nach den Bäumen vermuten lässt. Auch hier kann mit der richtigen Himmelstextur das Problem wieder gelöst werden. Bei Verwendung einer Textur, deren Seitenflächen Schwarz sind wird das Bild trotz reduzierte Weitsicht als dichter dunkler Wald dargestellt.
Himmel nach unten holen Oft wird am Horizont unter der Himmelstextur ein Übergang zum blauen Standardhimmel des WED dargestellt der unschön und störend ist. Deshalb ist es möglich den Himmel sowohl bei Cube als auch bei Dome noch über C-Script auszurichten.
Ausrichtung bei Dome sky_clip = -180 ... 180 (Wert ist der Winkel des gezeichneten Bereiches) Natürlich sollte nur so viel gezeichnet werden wie tatsächlich notwendig ist um keine Lücken zwischen den Bergen am Horizont und dem Himmel zu erhalten. Ausrichtung bei Cube über den Parameter z sky skybox6 { Bei einem Skycube wird die Textur über den Parameter z beliebig nach oben oder unten verschoben.
|