2.3.3.7 Max_Trace_Level
In scenes with many reflective and transparent surfaces POV-Ray can get bogged down tracing multiple reflections
and refractions that contribute very little to the color of a particular pixel. The global setting
max_trace_level defines the integer maximum number of recursive levels that POV-Ray will trace a ray.
global_settings { max_trace_level Level }
This is used when a ray is reflected or is passing through a transparent object and when shadow rays are cast. When
a ray hits a reflective surface, it spawns another ray to see what that point reflects. That is trace level one. If it
hits another reflective surface another ray is spawned and it goes to trace level two. The maximum level by default is
five.
One speed enhancement added to POV-Ray in version 3.0 is Adaptive Depth Control (ADC). Each time a new ray
is spawned as a result of reflection or refraction its contribution to the overall color of the pixel is reduced by
the amount of reflection or the filter value of the refractive surface. At some point this contribution can be
considered to be insignificant and there is no point in tracing any more rays. Adaptive depth control is what tracks
this contribution and makes the decision of when to bail out. On scenes that use a lot of partially reflective or
refractive surfaces this can result in a considerable reduction in the number of rays fired and makes it safer to use
much higher max_trace_level values.
This reduction in color contribution is a result of scaling by the reflection amount and/or the filter values of
each surface, so a perfect mirror or perfectly clear surface will not be optimizable by ADC. You can see the results
of ADC by watching the Rays Saved and Highest Trace Level displays on the statistics
screen.
The point at which a ray's contribution is considered insignificant is controlled by the adc_bailout
value. The default is 1/255 or approximately 0.0039 since a change smaller than that could not be visible in a 24 bit
image. Generally this setting is perfectly adequate and should be left alone. Setting adc_bailout
to 0 will disable ADC, relying completely on max_trace_level to set an upper limit on the number of rays
spawned.
If max_trace_level is reached before a non-reflecting surface is found and if ADC has not allowed an
early exit from the ray tree the color is returned as black. Raise max_trace_level if you see black areas
in a reflective surface where there should be a color.
The other symptom you could see is with transparent objects. For instance, try making a union of concentric spheres
with a clear texture on them. Make ten of them in the union with radius's from 1 to 10 and render the scene. The image
will show the first few spheres correctly, then black. This is because a new level is used every time you pass through
a transparent surface. Raise max_trace_level to fix this problem.
Note: that raising max_trace_level will use more memory and time and it
could cause the program to crash with a stack overflow error, although ADC will alleviate this to a large extent.
Values for max_trace_level can be set up to a maximum of 256. If there is no max_trace_level
set and during rendering the default value is reached, a warning is issued.
|