Difference between revisions of "Reference:Fog"

From POV-Wiki
Jump to navigation Jump to search
m (still testing that theory)
m (1 revision: link repair)
 
(2 intermediate revisions by the same user not shown)
Line 104: Line 104:
 
filters 70% of the background light and leaves 30% unfiltered.</p>
 
filters 70% of the background light and leaves 30% unfiltered.</p>
 
<p>
 
<p>
Fogs may be layered. That is, you can apply as many layers of fog as you
+
Fogs may be layered. That is, you can apply as many layers of fog as you like. Generally this is most effective if each layer is a ground fog of different color, altitude and with different turbulence values. To use multiple layers of fogs, just add all of them to the scene.</p>
like. Generally this is most effective if each layer is a ground fog of
 
different color, altitude and with different turbulence values. To use
 
multiple layers of fogs, just add all of them to the scene.</p>
 
 
<p>
 
<p>
 
{{#indexentry:turbulence, fog}}
 
{{#indexentry:turbulence, fog}}
 
{{#indexentry:keyword, turbulence}}
 
{{#indexentry:keyword, turbulence}}
You may optionally stir up the fog by adding turbulence. The <code>turbulence</code>
+
You may optionally stir up the fog by adding turbulence. The <code>turbulence</code> keyword may be followed by a float or vector to specify an amount of turbulence to be used. The <code>omega</code>, <code>lambda</code> and <code> octaves</code> turbulence parameters may also be specified. See the section [[Reference:Warp#Turbulence Warp|Turbulence Warp]] for details on all of these turbulence parameters.</p>
keyword may be followed by a float or vector to specify an amount of  
 
turbulence to be used. The <code>omega</code>, <code>lambda</code> and  
 
<code> octaves</code> turbulence parameters may also be specified. See  
 
section [[Reference:Pattern#Pattern Modifiers|Pattern Modifiers]] for details on all of these turbulence parameters.</p>
 
 
<p>
 
<p>
 
{{#indexentry:turb_depth, fog}}
 
{{#indexentry:turb_depth, fog}}
 
{{#indexentry:keyword, turb_depth}}
 
{{#indexentry:keyword, turb_depth}}
Additionally the fog turbulence may be scaled along the direction of the
+
Additionally the fog turbulence may be scaled along the direction of the viewing ray using the <code>turb_depth</code> amount. Typical values are from 0.0 to 1.0 or more. The default value is 0.5 but any float value may be used.</p>
viewing ray using the <code>turb_depth</code> amount. Typical values are from
 
0.0 to 1.0 or more. The default value is 0.5 but any float value may be
 
used.</p>
 
 
<p class="Note"><strong>Note:</strong> The fog feature will not work if the camera is inside a
 
<p class="Note"><strong>Note:</strong> The fog feature will not work if the camera is inside a
 
non-hollow object (see the section [[Reference:Interior#Empty and Solid Objects|Empty and Solid Objects]] for a detailed explanation).</p>
 
non-hollow object (see the section [[Reference:Interior#Empty and Solid Objects|Empty and Solid Objects]] for a detailed explanation).</p>

Latest revision as of 19:27, 23 July 2012

If it is not necessary for light beams to interact with atmospheric media, then fog may be a faster way to simulate haze or fog. This feature artificially adds color to every pixel based on the distance the ray has traveled. The syntax for fog is:

FOG:
  fog { [FOG_IDENTIFIER] [FOG_ITEMS...] }
FOG_ITEMS:
  fog_type Fog_Type | distance Distance | COLOR | 
  turbulence <Turbulence> | turb_depth Turb_Depth |
  omega Omega | lambda Lambda | octaves Octaves |
  fog_offset Fog_Offset | fog_alt Fog_Alt | 
  up <Fog_Up> | TRANSFORMATION

Fog default values:

lambda     : 2.0
fog_type   : 1
fog_offset : 0.0
fog_alt    : 0.0
octaves    : 6
omega      : 0.5 
turbulence : <0,0,0>
turb_depth : 0.5
up         : <0,1,0>

Currently there are two fog types, the default fog_type 1 is a constant fog and fog_type 2 is ground fog. The constant fog has a constant density everywhere while the ground fog has a constant density for all heights below a given point on the up axis and thins out along this axis.

The color of a pixel with an intersection depth d is calculated by

PIXEL_COLOR = exp(-d/D) * OBJECT_COLOR + (1-exp(-d/D)) * FOG_COLOR

where D is the specified value of the required fog distance keyword. At depth 0 the final color is the object's color. If the intersection depth equals the fog distance the final color consists of 64%

of the object's color and 36% of the fog's color.

Note: For this equation, a distance of zero is undefined. In practice, povray will treat this value as "fog is off". To use an extremely thick fog, use a small nonzero number such as 1e-6 or 1e-10.

For ground fog, the height below which the fog has constant density is specified by the fog_offset keyword. The fog_alt keyword is used to specify the rate by which the fog fades away. The default values for both are 0.0 so be sure to specify them if ground fog is used. At an altitude of Fog_Offset+Fog_Alt the fog has a density of 25%. The density of the fog at height less than or equal to Fog_Offset is 1.0 and for height larger than than Fog_Offset

is calculated by:

1/(1 + (y - Fog_Offset) / Fog_Alt) ^2

The total density along a ray is calculated by integrating from the height of the starting point to the height of the end point.

The optional up vector specifies a direction pointing up, generally the same as the camera's up vector. All calculations done during the ground fog evaluation are done relative to this up vector, i. e. the actual heights are calculated along this vector. The up vector can also be modified using any of the known transformations described in Transformations. Though it may not be a good idea to scale the up vector - the results are hardly predictable - it is quite useful to be able to rotate it. You should also note that translations do not affect the up direction (and thus do not affect the fog).

The required fog color has three purposes. First it defines the color to be used in blending the fog and the background. Second it is used to specify a translucency threshold. By using a transmittance larger than zero one can make sure that at least that amount of light will be seen through the fog. With a transmittance of 0.3 you will see at least 30% of the background. Third it can be used to make a filtering fog. With a filter value larger than zero the amount of background light given by the filter value will be multiplied with the fog color. A filter value of 0.7 will lead to a fog that filters 70% of the background light and leaves 30% unfiltered.

Fogs may be layered. That is, you can apply as many layers of fog as you like. Generally this is most effective if each layer is a ground fog of different color, altitude and with different turbulence values. To use multiple layers of fogs, just add all of them to the scene.

You may optionally stir up the fog by adding turbulence. The turbulence keyword may be followed by a float or vector to specify an amount of turbulence to be used. The omega, lambda and octaves turbulence parameters may also be specified. See the section Turbulence Warp for details on all of these turbulence parameters.

Additionally the fog turbulence may be scaled along the direction of the viewing ray using the turb_depth amount. Typical values are from 0.0 to 1.0 or more. The default value is 0.5 but any float value may be used.

Note: The fog feature will not work if the camera is inside a non-hollow object (see the section Empty and Solid Objects for a detailed explanation).