How is Optix denoiser comparing NRD and DLSS? Which one is best for offline and semi-realtime denoise?

While there are many denoise methods developed by Nvidia, I’d like to know the Pro and Con without integrating all of them.

Hi @iaomw,

Very generally speaking, DLSS is built for real-time (games), and OptiX denoiser is build for film workflows. OptiX denoiser can do both interactive (near real time) and batch (offline) scenarios. I don’t have experience with NRD, so I can’t speak to that one.

First off, the experience of using DLSS and OptiX denoisers is quite different, the interfaces and requirements aren’t the same. DLSS has a required set of auxiliary buffers you need to render, including motion vectors. The aux buffers in OptiX are a different set and they are optional. OptiX handles per-pixel jitter and DLSS does not (yet), with DLSS you currently need to use temporal camera jitter, because this is how games typically need to operate.

The OptiX denoiser has some features designed specifically for film customers that DLSS doesn’t support, including the ability to denoise multiple “AOV” buffer types at the same time.

DLSS is extremely good at low per-pixel sample counts, like 1 sample per pixel or even less on average. OptiX denoiser is better when the sample count is slightly higher, maybe 16 samples per pixel.

Some people are using both OptiX denoiser and DLSS in the same application and having them switch automatically based on how much interaction is going on and how many samples per pixel the renderer is using. For example, they use DLSS during user interactions and fast camera motions and when rendering 1-10 samples per pixel, and then when the camera is sitting still and starts to use progressive rendering to refine the image quality, they’ll switch to the OptiX denoiser.

Using DLSS in an OptiX application is somewhat difficult, so we are looking at ways to better support using DLSS in OptiX applications in the future.


David.

Thanks. I see there is an Optix Temporal denoiser, which requires something OptixDenoiserGuideLayer::flow described exactly as motion vector. Is that the same motion vector for DLSS by definition and numeric range?

Sometimes we see Optix denoiser got improved in release note. Does it mean denoise will not got improved automatically by new driver? Even if the improve doesn’t involve API changes, we need update Optix itself?

For motion vectors between DLSS and OptiX, the scale & range is the same, but the expected flow directions are reversed; OptiX expects vectors to point forward in time, while DLSS expects the vectors to point from current frame to previous frame.

The OptiX denoiser’s improvements, especially quality and speed improvements, are typically contained in driver releases and will update automatically after installing a new driver, without requiring a rebuild of your application. API changes, of course, will come with the SDK. It only happens rarely in OptiX, but if default settings changed somewhere, then you might need to sync the SDK and make a code change, even if the feature already existed in the driver.


David.