back to home

NVIDIA-RTX / NRD

NVIDIA Real-time Denoising (NRD) library

721 stars
67 forks
8 issues
HLSLC++CMake

AI Architecture Analysis

This repository is indexed by RepoMind. By analyzing NVIDIA-RTX/NRD in our AI interface, you can instantly generate complete architecture diagrams, visualize control flows, and perform automated security audits across the entire codebase.

Our Agentic Context Augmented Generation (Agentic CAG) engine loads full source files into context on-demand, avoiding the fragmentation of traditional RAG systems. Ask questions about the architecture, dependencies, or specific features to see it in action.

Source files are only loaded when you start an analysis to optimize performance.

Embed this Badge

Showcase RepoMind's analysis directly in your repository's README.

[![Analyzed by RepoMind](https://img.shields.io/badge/Analyzed%20by-RepoMind-4F46E5?style=for-the-badge)](https://repomind.in/repo/NVIDIA-RTX/NRD)
Preview:Analyzed by RepoMind

Repository Overview (README excerpt)

Crawler view

NVIDIA REAL-TIME DENOISERS (NRD) v4.17.2 OVERVIEW *NVIDIA Real-Time Denoisers (NRD)* is an API-agnostic, spatio-temporal library designed for high-quality denoising of noisy signals, focusing primarily on (but not limited to) 1 path/pixel path tracing. Engineered to handle both static and dynamic lighting, *NRD* utilizes per-pixel G-buffer guides (normal, roughness, viewZ and motion vector) to resolve noise on opaque surfaces. *NRD* is used in 15+ *AAA* game titles and *ProVis* applications, like: *Autodesk Aurora*, *Enscape* and *Lumion*. Its modern "SH" mode achieves quality comparable with *DLSS-RR*, offering a powerful, non-AI alternative that holds its own in an AI-dominated world. While NRD is not natively designed for volumetrics or transparency, the *NRD sample* demonstrates a robust "denoising-free" glass rendering path. This approach combines *SHARC*, clever reprojection of the currently denoised frame and dithering to deliver high-fidelity results via TAA or upscaling. *NRD* includes the following denoisers:• *REBLUR* - recurrent blur based denoiser• *RELAX* - A-trous based denoiser, has been designed for *RTXDI (RTX Direct Illumination)*• *SIGMA* - per-light shadow-only denoiser Supported signal types:• *RELAX*:• Diffuse & specular radiance (+Spherical Harmonics "SH" variants, actually Spherical Gaussian "SG")• *REBLUR*:• Diffuse & specular radiance (+Spherical Harmonics "SH" variants, actually Spherical Gaussian "SG")• Diffuse (ambient) & specular occlusion ("OCCLUSION" variants)• Diffuse (ambient) directional occlusion ("DIRECTIONAL_OCCLUSION" variant)• *SIGMA*:• Shadows from an infinite light source (sun, moon) or a local light source (omni, spot)• Shadows with translucency Performance on RTX 4080 @ 1440p (native) with the following settings - default denoiser settings, , (common for probabilistic lobe selection at the primary/PSR hit):• *REBLUR_DIFFUSE_SPECULAR* - 2.45 ms (3.35 ms in "SH" mode)• - +0-2% overhead• *RELAX_DIFFUSE_SPECULAR* - 3.15 ms (5.05 ms in "SH" mode)• - +7-10% overhead• *SIGMA_SHADOW* - 0.40 ms• *SIGMA_SHADOW_TRANSLUCENCY* - 0.45 ms Memory usage:• see table *NRD* is distributed as a source as well with a “ready-to-use” library (if used in a precompiled form). It can be integrated into any *D3D12*, *Vulkan* or *D3D11* engine using two variants:• Integration via *NRI*-based NRDIntegration layer. In this case, the engine should expose native *GAPI* pointers for certain types of objects. The integration layer is provided as a part of SDK• Native implementation of the *NRD* API using engine capabilities QUICK START NRD is easy to use:• build with • HOST code - use NRDIntegration layer for easy integration• understand inputs• set inputs and outputs via (see example)• on each frame call , , and • SHADER code - use NRD.hlsli• use and helpers in your path tracer (see example)• use and functions in the shader code to pack data for noisy inputs• use to convert noisy irradiance into radiance before "packing" data (remove materials)• use functions from to unpack data from outputs• for "SH" denoisers apply SG/SH resolve and re-jittering (see Interaction with upscalers)• use to convert denoised radiance back to irradiance after "unpacking" data (add materials back) See *NRD sample* project for all details:• branch (recommended) - focuses on path tracing and *NRD* best practices (less code, less preprocessor, easier to follow)• branch - contains everything needed for *NRD* development, testing and maintaining, all variants of *NRD* usage are here HOW TO BUILD?• Install *Cmake* 3.22+• Build (variant 1) - using *Git* and *CMake* explicitly• Clone project and init submodules• Generate and build the project using *CMake*• To build the binary with static MSVC runtime, add parameter when deploying the project• Build (variant 2) - by running scripts:• Run • Run *CMake* options:• Common:• - pull, build and include *NRI* into *NRD SDK* package, required to use NRDIntegration layer (OFF by default)• - shader output path override• - *NRD* compiles and embeds DXBC shaders (ON by default on Windows)• - *NRD* compiles and embeds DXIL shaders (ON by default on Windows)• - *NRD* compiles and embeds SPIRV shaders (ON by default)• Compile time switches (prefer to disable unused functionality to increase performance):• - build static library (OFF by default, visible in the parent project)• - *normal* encoding for the entire library• - *roughness* encoding for the entire library• - enable support (OFF by default)• - enable support (ON by default)• - enable and support (ON by default)• - enable support (ON by default)• - enable support (ON by default)• - better performance and worse image quality, can be useful for consoles (OFF by default) and can be defined only *once* during project deployment. includes encoding settings too. It can be used to verify that the library meets the application expectations. SDK packaging:• Compile the solution (*Debug* / *Release* or both, depending on what you want to get in *NRD* package)• Run • Grab generated in the root directory and (if needed) folders and use them in your project Updating:• Clone latest• Run • Run • Run • Run HOW TO REPORT ISSUES? NRD sample has *TESTS* section in the bottom of the UI, a new test can be added if needed. The following procedure is recommended:• Try to reproduce a problem in the *NRD sample* first• if reproducible• add a test (by pressing button)• describe the issue and steps to reproduce on *GitHub*• attach depending on the selected scene file from the folder• if not• verify the integration• If nothing helps• describe the issue, attach a video and steps to reproduce API Terminology:• *Denoiser* - a denoiser to use (for example: )• *Instance* - a set of denoisers aggregated into a monolithic entity (the library is free to rearrange passes without dependencies). Each denoiser in the instance has an associated *Identifier*• *Resource* - an input, output or internal resource (currently can only be a te…