Monday, February 16, 2015

Blender Cycles Render Options: a Review to get to Fast but Nice Results

Summary / Abstract

The Cycles render engine of the Blender 3D modeling and rendering software offers a multitude of settings to tweak the rendering output. The backside of this flexibility is the influence of the several parameters on the rendering time.
To get a reasonable balance between output quality and rendering time, especially for animated movies - where easily thousands of images need to be rendered - the optimal set of parameters needs to be chosen with care. Especially the use of the samples parameter on the Light -> Data panel has drastic impact on rendering times (only available for the samples method Branched Path Tracing) and should not be set high if not special quality constraints (e.g. highlights stemming from light sources) require high settings there.

Background

Currently I am working on some hobby movie project where I am using Blender, the free modeling and rendering software. To achieve nice results I am using the Cycles rendering engine.
I am a 3D-graphics hobbyist (so not much experience) and I do not have super sophisticated hardware at hand - at work I have a Dell T3600 with 16 GB and an AMD/ATI FirePro V5900 (2 GB) graphics card, at home a MacBook Pro (late 2008) with 8 GB memory and no fancy graphics card whatsoever - so rendering time becomes an issue if we think of some thousand images to be rendered.
So I was looking for some reasonable balance between output quality and rendering times. With "reasonable" in term of rendering time I find an output rate of a minimum of 10 frames per hour the absolute limit - to illustrate this: I have an animation of 1500 frames, which takes about one week days at this rate.
This post is about the experiences I made during my "research".

Blender Settings Influencing Output Quality / Render Speed

Blender and its UI has plentiful settings and parameters to influence the output quality and to play with. As I am not a friend of reading manuals, here a review of those I tried and found useful/important.
First let's take a look at the

Render Dimensions

The render dimensions are definitively the most basic parameters influencing the render speed. If one doubles the image dimensions, render times will be four times as long (because number of pixels increases by factor of 4)
The dimensions can be set in the Properties Panel -> Render options -> Dimensions:

One important note here: please notice the percentage parameter below the x/y dimensions. Here one can specify percentages of the desired image dimensions (can be quite handy):
  • 100%: output image size as given by x/y
  • <100%: smaller images useful for preview rendering
  • >100%: can be used to render Images intended for downsampling to achieve antialiasing (see below)
Yet another note: please take note of the x/y parameters of the "aspect ratio". If you want to produce anastigmatic/un-skewed output, these parameters need to be set to 1/1.  I realized this, as I entered values 16/9 for images with aspect ration 16:9 which ended up in skewed objects in my output images. Here a comparison:
Aspect Ratio 1:1

Same Settings, Aspect Ration 16:9

Antialiasing Settings in the Render Layers panel

A bit hidden, but with high impact, the Render Layers panel offers the possibility to influence antialiasing and rendering time:


The mouse-help told me: "Override the number of render samples in this render layer, 0 will use the scene setting" which did not make me think immediately of anti-aliasing, even more as on the Scene tab I did not find any setting I could relate to AA. But as it came out it has a strong influence on AA on the image overall PLUS the rendering time if the settings below are not set optimally .
If you choose "0" (Use Scene Settings), the attributes in the following sections are used, other than "0" overrides these settings.

Antialiasing Settings in the Data Panel of a Light Source

This is as well a "hidden" parameter - well to those who do not read enough documentation ;) - influencing drastically output quality and render speed. I only becomes available if ones sets the Sampling Method for Lights and Materials on the Render -> Sampling panel to "Branched Path Tracing" (see below).
For any light source in your scence, in the Data panel one can set the number of light samples for each AA sample (set on the Render panel (see below) or the Render Layers panel above):


Antialiasing Settings on the Render Panel

The most intuitive and most straight forward settings to influence antialiasing sampling and render speed can be found on the Render panel, Sampling section. By default, the settings are as follows:


The option "Method to sample light and material" is by default set to "Path Tracing". If you want to tweak you render quality in detail, put it to "Branched Path Tracing" which gives you access to every knob and button to influence individually the sampling method for any shader type used in the scene:


Aditionally, only with the sampling method set to "Branched", the option to influence the number of samples of a light source becomes available (see above).

Speed versus Output Quality Comparison

So - knowing all these settings above, I asked myself how do these influence the quality and rendering speed? To check this I created a very simple scene with a cube (diffuse BSD) on a plane (Mix shader Glossy BSD + Diffuse BSD) and one Area Light, the hardware I used was my MacBook Pro at home. The output dimension was 50% of 1920x1024 (i.e. 960x512 pixel)

Baseline: minimum quality maximum speed

  • Sampling Method: "Path Tracing"
  • Render Samples: 1
  • Render Layers Samples: 0
  • -> Render Time 1.85 s

Increasing Samples on Render panel

4 samples / 4.4 s: 













8 samples / 7.7 s:













For this image dimension the image quality does not increase significantly if one increases the number of samples. Hence here only the render times:

16 samples / 14.4 s
32 samples / 27 s

Increasing Samples on Render Layer panel

The render time / quality behavior behaves exactly the same as the Samples on the Render panel with "Path Tracing" active on the Render panel

Same for Branched Path Tracing

Baseline all Samples to "1", "0" on Render Layers

render time = 2.2 s

Influence of Samples on Render Layers, all other at "1"

4 samples / 5.8 s
8 samples / 10.6 s
16 samples / 20.2 s
32 samples / 39.3 s

Influence of Samples on Light -> Data

Samples on Render panel = "1", Samples on Render Layer panel = "4"

1 light sample / 5.8 s
4 light samples / 9.2 s
8 light samples / 13.2 s
16 light samples / 21.5 s
32 light samples / 38.3 s

The influence of the light samples are mostly visible if you are dealing with diffuse reflections / bright spots on surfaces. The effect can be seen if you focus your attention on the bright spot on the lower edge of the image compared to those above:














Influence of AA Samples on Render panel

Render Layers samples = "0", Light -> Data samples = 1, Shader samples on Render panel = 1

4 AA samples / 5.9 s
8 AA samples / 10.7 s
16 AA samples / 20.3 s
32 AA samples / 39.5 s

The results are comparable with those of "standard" Path Branching. Specular reflections / highlights remain grainy/noisy even at high sampling rates.

Influence of "Diffuse" Shader Samples

Render Layers samples = "0", Light -> Data samples = 4, AA samples on Render panel = 4

All other shader samples set to 1
1 Diffuse shader sample / 9.1 s
4 Diffuse shader samples / 12,2 s
8 Diffuse shader samples / 16.5 s
16 Diffuse shader samples / 25.4 s
32 Diffuse shader samples / 41.7 s

Increasing the other shader's samples increases the render time by a similar amount - e.g. setting the samples for the glossy shader up to 32 adds another 40 seconds to the total render time. The Light -> Data -> Samples impacts the rendering time not as an adding but multiplying factor. E.g. if the light samples are increased by a factor of 8, rendering time increases by this factor as well.