Atmospheric Effects

Normalerweise werden die Bilder in einem Vakuum erzeugt. Um Rauch, Lichtstrahlen, etc. zu zeigen, muß man die Atmosphäre in POV-Ray verändern.
Als "Atmospheric Effects" zählen: Hintergrund, Nebel, Atmosphäre, Himmelskugel und Regenbogen


Der Hintergrund
Die simpelste Methode, das schwarze Vakuum zu verändern ist:
background { colour <"Farbe"> }
Es wird ein Hintergrund in einer bestimmten Farbe, bzw. mit einem bestimmten Farbmuster erstellt, der keine Objekte berührt oder schneidet.

Statt colour ist auch color möglich.
Dies ändert jedoch nichts an den atmosphärischen Bedingungen.

Zurück

Nebel
Um Nebel zu erzeugen verwendet man "fog". Es wird ein farbiger Nebelschleier gezeigt, der Objekte vernebelt. Je weiter weg von der Kamera, desto vernebelter ist die Szene.
"Fog" macht jedoch KEINE Lichtstrahlen sichtbar!
fog {
01fog_type "Nebelart (1 oder 2)"
02distance "Dichte (Wert um 100)"
03colour <"Farbe, Transmittance, Filter">
04[turbulence <"Turbulenzen">]
05[turb_depth "Tiefe des Berechnungspunktes der Turbulenzen"]
06[omega "OMEGA"]
07[lambda "LAMBDA"]
08[octaves "OCTAVES"]
09[fog_offset "max. Höhe für konstanten Nebel"]
10[fog_alt "Schnelligkeit der Ausdünnung"]
11[up <"Vektorangabe">]
12["TRANSFORMATION"]
}

Es gibt 2 Arten von Nebel: constant fog und ground fog (01)
constant fog: Er hat eine konstante Dichte, ist also in jeder Höhe gleich dicht.
ground fog: Er hat eine konstante Dichte bis zur einer bestimmten Höhe, die orthogonal zum up-Vektor verläuft und dünnt langsam nach oben hin aus.
Die beiden Nebelarten sind wie folgt definiert:
#declare Constant_Fog =1
#declare Ground_Fog =2
Der "up" Vektor (11)gibt die Richtung nach oben an. Z.B. "ground fog", also Nebel, der eine bestimmte Dichte nur bis zu einer bestimmten Höhe reicht und zu dieser Richtungsachse nach oben ausdünnt, wird relativ zu diesem Vektor errechnet. Normalerweise ist der "up" Vektor gleich dem Kamera-"up"-Vektor.
distance (02)gibt die Dichte des Nebels an. Kleine distance-Werte verdichten den Nebel, größere Lichten ihn.
Die Farbe wird dem Nebel durch color (03)zugeordnet, welches drei Definitionsmöglichkeiten hat. Zum ersten wird dem Nebel eine Farbe zugeordnet, zum zweiten einen transmittance-Wert, mit dem man definieren kann, wieviel des Hintergrundlichtes mit dem Nebel reagiert. Ein Wert von 0.7 läßt 70% des Lichtes filtern. Zum Schluß kann noch ein Filterwert angegeben werden, der bestimmt welche Mindestmenge Licht durch den Nebelschleier kommt. Bei einem Wert von 0.3 sind also mindestens 30% des Hintergrundes sichtbar.
turbulence (04)macht den Nebelschleier interessanter, weil er dann den Anschein hat, eine nicht-konstante Dichte zu haben. Turbulence bestimmt die Menge der Turbulenzen im Nebel, während der turb_depth (05) - Wert angibt, an welchem Punkt der Sichtstrahlen turbulence berechnet wird. Werte in der Nähe von Null, bewegen diesen Punkt in Richtung des Betrachters, Wert gegen 1 von ihm weg (der Standardwert ist 0.5).
turbulence verändert die Dichte des Nebels nicht!
Die Erscheinung von ground_fog wird durch die Parameter fog_offset (09)und fog_alt (10)bestimmt. Fog_offset bestimmt die Höhe in Richtung des up-Vektors in die der Nebel eine konstante Dichte hat. Fog_alt setzt fest, wie schnell der Nebel nach "oben" hin ausdünnt. In der Höhe von fog_offset + fog_alt wird der Nebel noch eine Dichte von 25% haben.
Schließlich kann man den Nebel auch noch drehen, etc. Um das zu erreichen benützt man die selben Befehle wie bei anderen Objekten

Es ist möglich, mehrere "FOGs" (auch unterschiedlicher Art) in einer Szene zu verwenden. So kann man ganz schöne Effekte erzielen.
Fog funktioniert nicht, wenn die Kamera innerhalb eines nicht-hohlem (festen / geschlossenen) Gegenstandes ist.
Omega, Lambda und Octaves (06, 07, 08) werden in der Anleitung für Nebel nicht beschrieben.

Zurück

Die Atmosphäre
atmosphere {
01 type "Atmosphärentyp (1, 2, 3, 4 oder 5)"
02 distance "Dichte (von MORAY um 100)"
03 [scattering "Streuungswert"]
04 [eccentricity "Wert für Typ 5 (Streuungsberechnung)"]
05 [samples "Probenanzahl"]
06 [jitter "Rauschen"]
07 [aa_threshold "Schwelle zur AA-Methode"]
08 [aa_level "Anzahl zusätzlicher Unterteilungen"]
09 [colour <"Farbe, Filter">]
}
Es gibt insgesamt 5 Atmosphären-Typen. Am einfachsten ist es, wenn man die 5 Typen am Anfang definiert:
11 #declare ISOTROPIC_SCATTERING =1
12 #declare MIE_HAZY_SCATTERING =2
13 #declare MIE_MURKY_SCATTERING =3
14 #declare RAYLEIGH_SCATTERING =4
15 #declare HENYEY_GREENSTEIN_SCATTERING =5
Isotropic Scattering (11)
ist die einfachste Form, weil die Streuung nur von der Richtung abhängig ist. Die Menge des Lichtes, das gestreut wird ist vom Winkel des Betrachters und des einfallenden Lichtes unabhängig.
Rayleigh Scattering (14) stellt die Streuung des Lichtes durch sehr kleine Teilchen, z.B. die Moleküle in der Luft dar. Die Menge des gestreuten Lichtes hängt vom Einfallswinkel des Lichtes ab. Sie ist am größten, wenn das Licht parallel oder anti-parallel zum Betrachter einfällt, und am kleinsten, wenn das Licht senkrecht zum Betrachter einfällt. POV-Ray berechnet dabei nicht die Abhängigkeit der Streuung durch die Wellenlänge des Lichtes.
Mie Scattering (12 & 13) wird für relativ kleine Partikel, wie z.B. Wasserdampf (Nebel) und Teilchen, die für die Luftverschmutzung verantwortlich sind, benutzt. Bei diesem Modell ist die Streuung am größten, wenn das Licht anti-parallel zur Betrachtungsrichtung scheint (das Licht kommt direkt auf den Betrachter zu), und sie ist am kleinsten, wenn das Licht parallel zu ihr verläuft.
Die Haze (12) und Murky (13) Atmosphäre unterscheiden sich durch ihre Charakteristik. Das Murky-Modell ist richtungsbetonender als das Haze-Modell.
Die Henyey-Greenstein Streuung (15) basiert auf einer analytischen Funktion und kann eine große Anzahl verschiedener Streuungstypen darstellen. Diese Funktion berechnet sich durch eine Ellipse mit einem gegebenen eccentricity, welche von dem optionalen Schlüsselwort eccentricity (04), das nur in Typ 5 verwendet wird, bestimmt ist. Ein Wert von Null definiert die Isotropic Streuung, während positive Werte das streuen in Richtung des Lichtes und negative Werte in Gegenrichtung leiten. Größere Werte (bzw. kleinere Werte bei negativen Zahlen) erhöhen die Richtungswichtigkeit der Streuung.
distance (02) bestimmt die Dichte der Teilchen in der Atmosphäre. Diese Dichte ist für die gesamte Atmosphäre konstant. Der distance-Parameter funktioniert in gleicher weise, wie der fog-distance-Parameter.
Mit scattering (03) kann man die Menge des gestreuten Lichtes, beim vergrößern oder verkleinern der Helligkeit der Atmosphäre, ändern. Kleinere Werte verringern die Helligkeit, während größere sie erhöhen.
Mit colour oder color (09) färbt man die Atmosphäre. So kann sie z.B. als Filter für das hindurchgehende Licht dienen. Die Standartfarbe ist Schwarz.
Außerdem kann man einen Filterwert angeben. Ein Wert von Null bedeutet, Licht wird von der Farbe der Atmosphäre nicht beeinflußt. Bei 1 wird alles Licht gefiltert.
 Beispiel:
atmosphere {
...
color <1,0,0,0.25>
...
}
D.h.: die Atmosphäre ist rot und 25% des Lichtes werden gefiltert.
Nun gibt es noch 4 Parameter um die Frakturen zu minimieren:
samples (05) bestimmt die Anzahl der Proben die in einem Intervall berechnet werden. Das Intervall wird entweder durch distance (02) oder durch den ausgeleuchteten Teil, welcher immer kleiner ist, bestimmt.
Mit jitter (06) kann man das "Rauschen" der sample-Punkte bestimmen.
Eine andere Technik ist das Super-sampling (eine anti-aliasing Methode).
Hierbei werden an Punkten größerer Intensität (z.B. Schattengrenzen) weitere sample-Punkte hinzugefügt. Das anti-aliasing wird durch aa_level (08) eingeschaltet. Bei einem Wert größer Null wird das super-sampling benutzt. aa_level 1 bedeutet, daß es eine Unterteilung gibt (ein zusätzlicher sample-Punkt); 2, daß es zwei Unterteilungen gibt (bis zu 3 zusätzliche sample-Punkte), etc.
Die Schwelle der Intensitätsänderung durch aa_level wird mit aa_threshold (07) gesetzt. Wenn diese Schwelle überschritten wird, wird anti-aliasing benutzt.


Die Atmosphäre wird nicht funktionieren, wenn die Kamera in einem nicht-hohlem (festen / geschlossenem) Gegenstand ist.
Wenn eine Szene mit Atmosphäre nicht wie gewünscht aussieht, bzw. man überhaupt nichts sieht, sollte man die Lichtintensität verändern, oder gar die "Reaktion mit der Atmosphäre" ganz ausschalten.
Beispielsszenen von POV-Ray sind
atmos1.pov, atmos2.pov, atmos3.pov, atmos4.pov und atmos5.pov.
!!!Atmosphären brauchen sehr viel Zeit zum rendern, sinnvolles arbeiten mit Atmosphären ist erst ab einem P200 möglich. (Vor allem bei komplexen Bildern)!!!


Zurück


Die Himmelskugel (SKY_SPHERE)
Die Himmelskugel wird dazu benutzt, einen realistischen Himmel als Hintergrund zu haben.
sky_sphere {
pigment {PIGMENT 1}
pigment {PIGMENT 2}
pigment {PIGMENT 3}
...
[TRANSFORMATION]
}
Die Pigmente bestimmen das Aussehen der Kugel. Es kann beliebig, nach den Optionen von PIGMENT definiert werden. So sind fast alle Variationen eines Himmels möglich, vom nächtlichen Sternenhimmel, über einen wolkenverhangenen stürmischen Tag bis zum paradiesischen Sonnenuntergang.
Transformation wird benutzt um die Himmelskugel "zurechtzurücken". Als Werte, die als am wirklichsten Wirken, wird SCALE 2 und TRANSLATE -1 angegeben. Meistens muß man die Kugel am Anfang drehen um das Zentrum (die Sonne) in den Blickbereich zu bekommen. Außerdem kann es (vor allem in Animationen) hilfreich sein, wenn man die Kugel dreht, und somit eine auf- und untergehende Sonne, sowie vorbeiziehende Wolken zu bekommen.
Beispiele: skysph1.pov und skysph2.pov (keine Animationen!)


Es ist nicht möglich zwei Himmelskugeln in einer Szene zu haben.


Zurück


Der Regenbogen
Ein Regenbogen wird folgendermaßen definiert:
// empfohlen, aber nicht notwendig
// bestimmen der Farben des Regenbogens
#declare r_violet1 = colour rgbf<1.0, 0.5, 1.0, 1.0>
#declare r_violet2 = colour rgbf<1.0, 0.5, 1.0, 0.8>
#declare r_indigo = colour rgbf<0.5, 0.5, 1.0, 0.8>
#declare r_blue = colour rgbf<0.2, 0.2, 1.0, 0.8>
#declare r_cyan = colour rgbf<0.1, 1.0, 1.0, 0.8>
#declare r_green = colour rgbf<0.2, 1.0, 0.2, 0.8>
#declare r_yellow = colour rgbf<1.0, 1.0, 0.2, 0.8>
#declare r_orange = colour rgbf<1.0, 0.5, 0.2, 0.8>
#declare r_red1 = colour rgbf<1.0, 0.2, 0.2, 0.8>
#declare r_red2 = colour rgbf<1.0, 0.2, 0.2, 1.0>
// Beispielfarben!
Die folgenden Werte sind Beispielwerte und nicht Standardwerte.
Die Werte sind voll aus der Anleitung übernommen, weil man dadurch einen ziemlich realistischen Regenbogen bekommt. Die colour_map-Werte (09 bis 19) sind unbedingt notwendig! Nur die transmit-Werte (mit /* und */ eingeklammert) sind optional.
// der Regenbogen wird definiert durch:
rainbow {
01 angle "Winkel unter dem der R. sichtbar ist" //42.5
02 width "Weite des Farbstreifens" //5
03 [arc_angle "Teil der sichtbar ist" //120 (Grad)]
04 [falloff_angle "Teil, in dem der R. verschwimmt" //30]
05 distance "Dichte der Teile, die den R. verursachen" //1.0e7
06 direction <"Vektorangabe"> "des Lichtes //<-0.2, -0.2, 1>
07 [up <"Vektorangabe"> //Standardwert: y-Achse]
08 [jitter "Rauschen" //0.01]
09 colour_map {
10 [0.000 colour r_violet1 /*transmit 0.98*/]
11 [0.100 colour r_violet2 /*transmit 0.96*/]
12 [0.214 colour r_indigo /*transmit 0.94*/]
13 [0.328 colour r_blue /*transmit 0.92*/]
14 [0.442 colour r_cyan /*transmit 0.90*/]
15 [0.556 colour r_green /*transmit 0.92*/]
16 [0.670 colour r_yellow /*transmit 0.94*/]
17 [0.784 colour r_orange /*transmit 0.96*/]
18 [0.900 colour r_red1 /*transmit 0.98*/]
19 }
}
Der Regenbogen wird hauptsächlich von drei Dingen bestimmt:
  1. angle (01) bestimmt den Winkel, unter dem der Regenbogen zu sehen ist.
  2. width (02) bestimmt die Weite des Farbenstreifens
  3. direction (06) bestimmt die Richtung des einfallenden Lichtes, und dieses die Position des Regenbogens.
Der Regenbogen ist sichtbar, wenn der Winkel zwischen dem Richtungsvektor und des einfallenden Lichtes größer als "angle - width / 2" und kleiner als "angle + width / 2" ist.
Das einfallende Licht ist eine virtuelle Lichtquelle. Für einen Regenbogen muß man kein "wirkliches" Licht erstellen.
Der Regenbogen ist eine Art Nebel-Effekt, d.h. die Farben des Regenbogens mischen sich mit der Hintergrundfarbe, was auf die Entfernung zum Reaktionspunkt basiert. Bei kleinen distance-Werten (05) kann der Regenbogen auch auf Objekten sichtbar werden. Um das zu verhindern, verwendet man sehr große distance-Werte.
Die color-map (09 bis 19) beinhaltet alle Farben des Regenbogens, wobei solche, die Werte in der Nähe von 0 im Inneren und solche, mit Werten von 1 ganz außen auf dem Ring liegen.
Der Filterwert wird auf gleicher Weise wie beim Nebel verwendet. Er bestimmt wie viel Licht beim hindurchscheinen von der Farbe gefiltert wird.
Um den Regenbogen nicht so leuchtend erscheinen zu lassen, wird dem color_map der transmit-Wert hinzugefügt. Er bestimmt, wie beim Nebel, wieviel des Hintergrundes durch die jeweilige Farbe zu sehen ist. Für einen realistischen Regenbogen verwendet man relativ hohe Werte (> 0.9).
Einige Unregelmäßigkeiten werden dem Farbband durch jitter (08) hinzugefügt.
Um nicht immer einen ganzen Kreis als Regenbogen zu haben (weil man vielleicht keinen Boden hat), verwendet man arc_angle (03). Es werden nur noch "arc_angle"-Grad des Regenbogens gezeigt.
Damit der Regenbogen nicht abrupt endet, verwendet man mit arc_angle meist auch falloff_angle (04). An beiden Enden ist nun eine "falloff_angle"-Grad große Region, in der der Regenbogen sanft in nichts / den Hintergrund übergeht.
Der arc-angle bezieht sich auf die Regenbogen-"nach oben"-Richtung, welche mit up (07) bestimmt werden kann. Ist nichts als up definiert, bezieht sich der arc_angle auf die y-Achse.


Beispieldateien sind rainbow1.pov, rainbow2.pov und rainbow3.pov.


Außerdem gibt es noch die global_settings.

zurück zum Anfang
zur Seite der VR-AG
zur Startseite des GBG-Winnenden


Written by Michael Hanig
Last Updated 03.02.1998
Alle Angaben ohne Gewähr - Der Rechtsweg wird mal wieder ausgeschlossen
Veränderungen, die der Verbesserund des Dokuments dienen sind gestattet.
Lesen auf eigene Gefahr! Es wird keinerlei Haftung übernommen! Kinder haften für ihre Eltern!