Iray Programmer's Manual

Progressive rendering

Iray Interactive supports progressive rendering into a render context.

On each render call the image will be refined more so that over time the image converges. The intermediate images can be displayed to the user thus giving a good early impression about the lighting and material look of the scene. The renderer makes some approximations aiming to produce an image with no or very little noise on exterior, turntable-type scenes.

For each render request, the renderer will automatically check if the parameters for the requested image (for example image resolution or camera position) match to the last rendered image. Also the scene will be checked for changes. If any changes are found that would result in visible changes in the image the render context will be reset and the progressive rendering starts from the beginning.

The following attributes on the mi::neuraylib::IOptions class, shown here with their default settings, control progressive rendering:

mi::Sint32 progressive_rendering_max_samples = 100

The maximum number of samples is compared to the number of samples since the beginning of this progression. The render call will return 1 if the rendering loop is terminated by this termination criterion.

mi::Sint32 progressive_rendering_max_time = 3600

The maximum time in seconds is compared to the rendering time since the beginning of this progression. The render call will return 1 if the rendering loop is terminated by this termination criterion.

A value of -1 will disable the criterion altogether.

Multi-GPU Scalability and automatic sample count adaption

Unlike Iray Photoreal, Iray Interactive does not support a non-interactive rendering mode. By default, Iray Interactive aims to increase interactivity when multiple GPUs are used, i.e., the same workload as when rendering with a single GPU is distributed over all selected GPUs on the host and potentially in the network. This default behavior leads to reasonable scaling on a moderate number of GPUs on a single host. However, due to constant overhead, network transfer times and the highly parallel nature of GPUs, the scalability with respect to frames per second is limited. Thus Iray Interactive allows to enable an automatic sample count adaption. This is controlled with the irt_automatic_sample_count rendering option.

bool irt_automatic_sample_count = false

If enabled, using multiple GPUs will not lead to a higher interactivity, but to faster convergence. Since high parallelism is sustained by adapting the amount of work computed in each frame to the available resources, the resulting scalability is improved drastically.

In some cases, this behavior can be too extreme. The trade-off between scalability and interactivity can also be controlled manually by adapting the number of samples per frame with the progressive_rendering_samples rendering option.

mi::Sint32 progressive_rendering_samples = 1

This sample count is taken into account if the automatic sample count is disabled. For instance, when rendering in the network on 2 hosts, each equipped with 4 GPUs, a reasonable choice would be to set the number of samples to 4, leading to higher interactivity (max. 2x) and faster convergence (max. 4x).

Screen space shadow approximations can degrade multi-GPU scalability drastically. It is currently recommended to use screen space shadows only in single-GPU mode.