Progressive Rendering Basics

Introduction to progressive rendering and Sampling Level (SL)

Progressive rendering is an alternative to the normal flam3 / Apophysis rendering mode, first introduced by Chaotica.

In flam3 / Apophysis you have to specify ahead of time how much computational effort should go into the rendered image (via a "quality" parameter). If the resulting image doesn't look good enough, it must be re-rendered from scratch with a higher "quality" value; if it looks the same as it would have in half the time, then the value was set too high.

Tweaking this parameter is basically a big waste of time, when you can just let the computer progressively improve the image, and simply stop it when it looks good enough. Chaotica by default does automatic image updates while rendering (fewer over time, to let it render more), and you can press F5 at any time to update the image.

The following examples show the advantage of Chaotica's progressive rendering in comparison to different quality settings of Apophysis render:
apophysis 200 00_44 Apophysis
Density: 200
Render time: 44 seconds.
Too low density, needs rerender.
apophysis 4000 15_02 Apophysis
Density: 4000 (default)
Render time: 15 minutes 2 seconds.
Still too low density, needs rerender again.
apophysis 10000 38_17 Apophysis,
Density: 10000
Render time: 38 minutes 17 seconds.
Too high density, waste of time.
chaotica SL9.0 19_54 Chaotica
Stopped at SL 9.0
Render time: 19 minutes 54 seconds.

In conclusion, it is clearly visible from the comparison that Chaotica's progressive rendering saves time while preserving quality.

This is especially useful for print and animation rendering, where an early finish can save hours or even days of wasted rendering.

The Sampling Level metric

A useful indicator of image quality is the Sampling Level metric, which is defined as the (base 2) logarithm of the number of contributions per pixel in the rendered image. Let's break apart this definition to better understand why it's useful.

  • Contributions per pixel
    The IFS algorithm is performed for a certain number of iterations, however not all of these iterations produce contributions to the image (particularly if the viewing rectangle is very small / zoomed in).

    The ratio of contributions to iterations is called the (rendering) efficiency, and it is better to measure the image quality in terms of the number of actual contributions to the image.

    We pedantically put the flam3 / Apophysis "quality" parameter in quotes in the introduction because it doesn't correlate with actual image quality, precisely because it fails to account for the rendering efficiency.

  • Logarithmic vs linear contributions per pixel
    The logarithm captures the exponentially growing work required for equal perceptual difference steps in the image:

    If you've been rendering for 10 seconds, then 1 extra second won't make a big difference, but 20 seconds in total will be noticeably different; after that, an extra second is just a drop in the pond compared to the amount of work already expended, and it's not until 40 seconds rendering that it becomes worth doing another image update. This process continues exponentially, and it's useful to quantify which "level" we're on, and how far through it we are - this is precisely what the logarithm function does.

Since a fractal's overall "smoothness" depends strongly on its parameters, there is no fixed Sampling Level that suffices for all images; however, a range of 10-13 normally suffices to produce a high quality final image.