Skip to content

Commit 52d2f04

Browse files
committed
Updated README
1 parent 67665e3 commit 52d2f04

File tree

1 file changed

+50
-29
lines changed

1 file changed

+50
-29
lines changed

README.md

Lines changed: 50 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,48 @@
11
# NRD SAMPLE
22

3-
All-in-one repository including all relevant pieces to see [*NRD (NVIDIA Real-time Denoisers)*](https://github.com/NVIDIA-RTX/NRD) in action. The sample is cross-platform, it's based on [*NRI (NVIDIA Rendering Interface)*](https://github.com/NVIDIA-RTX/NRI) to bring cross-GraphicsAPI support.
4-
5-
*NRD sample* is a land for high performance path tracing for games. Some features to highlight:
6-
- minimalistic path tracer utilizing *Trace Ray Inline*
7-
- HALF resolution (checkerboard), FULL resolution and FULL resolution tracing with PROBABILISTIC diffuse / specular selection at the primary hit
8-
- NRD denoising, including occlusion-only and spherical harmonics (spherical gaussians) modes
9-
- overhead-free multi-bounce propagation (even in case of a single bounce) based on reusing the previously denoised frame
10-
- SHARC radiance cache
11-
- reference accumulation
12-
- several rays per pixel and bounces
13-
- realistic glass with multi-bounce reflections and refractions
14-
- mip level calculation
15-
- curvature estimation
16-
- native integration of DLSS-SR and DLSS-RR via NGX API (not StreamLine)
3+
NRD Sample is a high-performance playground and reference implementation for path tracing in games. It provides a comprehensive environment to see [*NRD (NVIDIA Real-time Denoisers)*](https://github.com/NVIDIA-RTX/NRD) in action across all possible use cases and compare it directly with *DLSS-RR*. While *NRD* and *DLSS-RR* are highly competitive today, effective comparison requires enabling *NRD* "SH" mode (set via the `NRD_MODE` macro in `Shared.hlsli`). The sample is designed to demonstrate production-ready path tracing best practices suitable for real-time gaming that balance visual fidelity with high performance. A core focus of the project is high-performance glass and transparency rendering. Built on the [*NRI (NVIDIA Rendering Interface)*](https://github.com/NVIDIA-RTX/NRI), the sample is natively cross-platform, supporting both *D3D12* and *Vulkan*. The ideas from the sample are already used in several *AAA* games and game mods.
4+
5+
Features:
6+
- best-in-class performance:
7+
- RTX 4080 @ 1440p (native) shows ~150 FPS at day time and ~110 FPS at night time in *Bistro* scene (when the importance sampling comes into play)
8+
- fast path tracing based on *Trace Ray Inline* supporting:
9+
- tracing variants:
10+
- full resolution: probabilistic diffuse or specular lobe selection at the primary hit (recommended main use case)
11+
- half resolution: 0.5 diffuse ray + 0.5 specular ray (checkerboard rendering)
12+
- full resolution: 1 diffuse ray + 1 specular ray
13+
- material models:
14+
- "base color - metalness"
15+
- RTXCR hair and skin
16+
- smart levels of radiance caching, allowing to do only 1 bounce:
17+
- L1 radiance cache: previously denoised frame (essential for refractions)
18+
- L2 radiance cache: [*SHARC*](https://github.com/NVIDIA-RTX/SHARC) (global voxel-based cache)
19+
- simple and robust importance sampling scheme designed to work with generic emissive pixels, i.e. not analytical lights (not RESTIR)
20+
- realistic fast and robust glass with multi-bounce reflections and refractions not requiring denoising
21+
- several rays per pixel and bounces (mostly for comparison)
22+
- extremely fast implementation of Ray Cones for mip level calculation
23+
- curvature estimation
24+
- *NRD* denoising:
25+
- simple integration based on [*NRD Integration*](https://github.com/NVIDIA-RTX/NRD/tree/master/Integration) layer
26+
- *RELAX* and *REBLUR* for radiance
27+
- *SIGMA* for sun shadows
28+
- Spherical Harmonics (Gaussians) mode essential for upscalers
29+
- history confidence bumping IQ of dynamic lighting to a new level
30+
- *NRD* debug validation layer
31+
- denoising best practices including hair denoising
32+
- occlusion-only modes
33+
- reference accumulation
34+
- NRD unit tests
35+
- NRD special tests
36+
- native integration of *DLSS-SR*, *DLSS-RR*, *FSR* and *XeSS* via *NRIUpscaler* extension (not StreamLine)
37+
- NOTE: don't forget to modify `NRD_MODE` in `Shared.hlsli` to `SH` to unclock Spherical Harmonics (Gaussians) resolve mode essential for image quality!
1738

1839
GitHub branches:
19-
- `main` - "all-in-one" branch: all possible options and settings are there. Since this branch covers all aspects, it's for NRD development and maintenance mostly
20-
- `simplex` - "best practices" branch: optimized for the recommended usage (the path tracer does a probabilistic split at the primary hit, `HitDistanceReconstructionMode::AREA_3X3` enabled in NRD). This branch is recommended to borrow best practices of path tracing and NRD usage. It offers better performance and has less code
40+
- "best practices" `simplex` branch
41+
- optimized for recommended usage (probabilistic split, `HitDistanceReconstructionMode::AREA_3X3` reconstruction). Recommended for learning NRD integration and borrowing PT code. It offers better performance and has less code
42+
- "all-in-one" `main` branch
43+
- contains every possible option and setting, used primarily for NRD development and maintenance.
2144

22-
# BUILD INSTRUCTIONS
45+
## HOW TO BUILD
2346

2447
- Install [*Cmake*](https://cmake.org/download/) 3.30+
2548
- Build (variant 1) - using *Git* and *CMake* explicitly
@@ -30,22 +53,25 @@ GitHub branches:
3053
- Run `1-Deploy`
3154
- Run `2-Build`
3255

33-
### CMAKE OPTIONS
56+
*CMake* options:
3457

3558
- `USE_MINIMAL_DATA=OFF` - download minimal resource package (90MB)
59+
- `RTXCR_INTEGRATION` - use RTXCR for hair and skin rendering, download sample scene
3660

37-
# HOW TO RUN
61+
## HOW TO RUN
3862

39-
- Run `3-Run NRD sample` script and answer the cmdline questions to set the runtime parameters
63+
- Run `3-Run` script and answer the cmdline questions to set the runtime parameters
4064
- If [Smart Command Line Arguments extension for Visual Studio](https://marketplace.visualstudio.com/items?itemName=MBulli.SmartCommandlineArguments) is installed, all command line arguments will be loaded into corresponding window
41-
- The executables can be found in `_Bin`. The executable loads resources from `_Data`, therefore please run the samples with working directory set to the project root folder (needed pieces of the command line can be found in `3-Run NRD sample` script)
65+
- The executables can be found in `_Bin`. The executable loads resources from `_Data`, therefore please run the samples with working directory set to the project root folder (needed pieces of the command line can be found in `3-Run` script)
4266

43-
### REQUIREMENTS
67+
Requirements:
68+
- any GPU supporting "trace ray inline"
4469

45-
Any ray tracing compatible GPU.
70+
## USAGE
4671

47-
### USAGE
72+
By default, NRD is used in common mode. To switch to "SH" or "occlusion-only" modes, modify the `NRD_MODE` macro in `Shared.hlsli` to one of the following: `NORMAL`, `OCCLUSION`, `SH`, or `DIRECTIONAL_OCCLUSION`. RELAX doesn't support AO / SO denoising. If RELAX is the current denoiser, ambient term will be flat.
4873

74+
Controls:
4975
- Right mouse button + W/S/A/D - move camera
5076
- Mouse scroll - accelerate / decelerate
5177
- F1 - toggle "gDebug" (can be useful for debugging and experiments)
@@ -54,8 +80,3 @@ Any ray tracing compatible GPU.
5480
- Tab - UI toggle
5581
- Space - animation toggle
5682
- PgUp/PgDown - switch between denoisers
57-
58-
By default *NRD* is used in common mode. But it can also be used in occlusion-only (including directional) and SH (spherical harmonics) modes in the sample. To change the behavior `NRD_MODE` macro needs to be changed from `NORMAL` to `OCCLUSION`, `SH` or `DIRECTIONAL_OCCLUSION` in `Shared.hlsli`.
59-
60-
Notes:
61-
- RELAX doesn't support AO / SO denoising. If RELAX is the current denoiser, ambient term will be flat, but energy correct.

0 commit comments

Comments
 (0)