Rendering Basics

Supported GPUs and APIs

The NVIDIA Omniverse RTX™ Renderer renderer requires an NVIDIA RTX GPU with support for DirectX Ray Tracing and NVIDIA’s Vulkan Ray Tracing extensions. On Windows 10 (version 1809 or newer is needed) the DX12 API is used. On Linux the Vulkan API is used.

The following is a non-exhaustive list of supported Ampere RTX GPUs:

  • Ampere GeForce RTX: 3080, 3080 Ti, 3090

  • Ampere RTX: A4000, A5000, A6000, A40

Selecting a Renderer

In applications based on NVIDIA Omniverse™ Kit there is usually an option to select between ‘real-time’ and ‘path-traced’ and the ‘Iray Photoreal’ renderer.

In Create for example, this is available as a drop-down menu in the viewport.

../_images/rendering_render-mode-dropdown.png

In Omniverse View, you can select between Draft, Preview and Photo modes. Draft mode uses the ‘real-time’ render mode, while Preview and Photo use the ‘path-traced’ render mode. Each setting also affects the settings of the renderer with appropriately balanced quality for the expected view mode simplifying the process.

Rendering Settings

See Render Settings Overview.

Multi-GPU

NVIDIA Omniverse RTX™ Renderer supports multi-GPU rendering. This guide is here to help you leverage the most out of Multiplier GPU in NVIDIA Omniverse RTX™ Renderer.

Enabling Multi-GPU Rendering

To enable Multi-GPU rendering in NVIDIA Omniverse RTX™ Renderer you must have a system with multiple Omniverse RTX Renderer enabled GPUs.

While the GPUs do not need to be identical, uneven GPU memory capacity and performance will result in suboptimal utilization. When GPUs with different memory capacity are used, the GPU with the lowest capacity can make it impossible to load a scene that fits on the memory of other GPU with higher capacity. Therefore removing or disabling this GPU can be necessary to avoid this limitation.

Similarly, a GPU with lower performance will hold back other GPUs. This will be addressed in a future release with an automatic load-balancing algorithm.

Pre-requisite: SLI mode must be globally disabled in the NVIDIA control panel for multi-GPU to work in NVIDIA Omniverse RTX™ Renderer. Enabling SLI will result on a single GPU being used. This will be addressed in future releases.

To enable Multi-GPU you must launch NVIDIA Omniverse™ Kit adding the following argument to its command line:

`--/renderer/multiGpu/enabled=true`

To set the maximum number of GPUs used add the following command line option:

`--/renderer/multiGpu/maxGpuCount`

Note that GPU devices that do not support Omniverse RTX Renderer ray tracing are skipped automatically.

Multi-GPU in ‘path-traced’ mode

  • In the Path Tracing render settings ensure the checkbox labeled ‘Multi-GPU - Enabled’ is set (this should be the default)

  • You can manually control the amount of path tracing work assigned to the first GPU (GPU 0) with the setting labeled ‘Multi-GPU - GPU 0 Weight’ (also in the Path Tracing render settings window).

Multi-GPU Load Balancing in ‘path-traced’ mode

For path tracing we don’t have automatic load balancing yet (coming soon), so to achieve maximum utilization, open nvidia-smi dmon (or the utilization graphs in the NVIDIA control panel) and adjust GPU 0 Weight manually.

This controls the fraction of the number of pixels assigned to GPU 0 for path tracing, relative to the number it would normally be assigned by evenly splitting the pixels across all GPUs. All other GPUs always have a weight of 1. A GPU 0 weight of 1 means GPU 0 perform path tracing for the same number of pixels as any other GPU. Since GPU 0 also performs sample aggregation, denoising, post processing and UI rendering, a lower weight is usually needed to ensure perfect utilization is achieved across all GPUs.

In practice, a GPU 0 weight of 0.65 - 0.8 seems to maximize utilization best. The best value which postprocessing effects are enabled and whether the denoiser is enabled (OptiX denoiser has the biggest impact) and the amount of work per GPU for path tracing (i.e., Samples per Pixel per-Frame).

Maximizing Multi-GPU utilization in ‘path-traced’ mode

Multi-GPU scaling may sometimes hit bottlenecks, such as CPU or copy overhead. Some of these will see significant improvements in the next release. Until then, to alleviate the impact of these overheads and improve scaling and GPU utilization, you can increase the number of samples per pixel per frame (in path tracing settings or via –/rtx/pathtracing/spp).

Multi-GPU in ‘real-time’ mode

Real-time mode supports a simple scheme to split all rendering work across GPUs. This technique splits the rendering into multiple large tiles, one per GPU. To prevent seams between these tiles, the tiles are allowed to overlap with by a configurable number of pixels.

AOVs

../_images/AOV.jpg

Arbitrary Output Variables (AOVs) are data known to the renderer and used to compute illumination. Typically, AOVs contain the decomposed lighting information such as: direction and indirect illumination, reflections and refractions, and objects with self illumination. But can also contain geometric and scene information such as surface position in space, orientation of normals, and depth from camera.

As the final image is computed, the intermediate information used during rendering can optionally be written to disk. Having these extra images can be hugely beneficial as it provides additional opportunities to modify the final image during Compositing or provide additional in-site through 2D analysis. The auxiliary images are called passes which USD calls “Render Products”: are basically just named outputs. The AOV data used by the renderer is referred to as a “Render Variable” and defines what is written for each Render Product or pass.

Matte Objects

../_images/matte_objects.png

A Matte object is an invisible object that still receive shadow and secondary illumination effects such as reflections or global illumination. This is effect is helpful for rendering shadows and reflections into your scene through a backplate or domelight.