Deep Image Rendering


The goal of Deep ImageRenders frames with multiple depth samples in addition to typical color and opacity channels. Rendering is to improve the compositing workflow by storing Z-depth with samples. It works best in scenarios where traditional compositing fails like masking out overlapping objects, working with images that have depth-of-field or motion blur, or compositing footage in rendered volumes.


Most major compositing applications now support deep image compositing. The disadvantage of deep image rendering is the large amounts of memory required to render and store deep images.


The standard output format is OpenEXR.

What is a deep image?
Instead of having single RGBA values for a pixel, a deep images stores multiple RGBA channel values per pixel together with a front and back Z-depth (Z and ZBack channels respectively). This tuple (R, G, B, A, Z, ZBack) is called a deep sample. Deep samples come in two flavours: point samples which have only a front depth specified (more formally Z >= ZBack) and volume samples which have a front and a back depth (Z < ZBack). Hard surfaces visible through a pixel are point samples and visible volumes are (you guessed it) volume samples. From these samples, two functions can be calculated: A(Z) and C(Z) representing the alpha and color of the pixel not further away than Z. These two functions are the basis of depth compositing and allow to compose footage together at any distance Z instead of just composing image A over image B. (Please note, that these functions are calculated by the compositing application. Octane only calculates the samples). Of course, this is a very rough overview with a lot of hand waving. Get the bigger picture and a thorough explanation at The ultimate references are "Interpreting OpenEXR Deep Pixels" and "Theory of OpenEXR Deep Samples".


Enabling Deep Image Rendering

Deep image rendering is enabled via the Kernel node and is only supported for the Path Tracing and Direct Lighting kernels. Deep image can be enabled by checking the Deep image checkbox (Figure 1):



For a typical scene, thousands of samples per pixel will be rendered by the GPUThe GPU is responsible for displaying graphical elements on a computer display. The GPU plays a key role in the Octane rendering process as the CUDA cores are utilized during the rendering process., however, there is only a limited amount of VRAM. It is therefore necessary to be able to manage the number of samples stored. Two parameters are provided for this purpose.


Max. depth samples specifies an upper limit for the number of deep samples we can store per pixel.


Depth tolerance specifies a merge tolerance — i.e., when 2 samples have a (relative) depth difference within the depth tolerance they are merged together.