|
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 hasn't 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.
|