Skip to content

Commit 52488ba

Browse files
committed
Updated to v2.1.0
1 parent 1018431 commit 52488ba

140 files changed

Lines changed: 5296 additions & 3454 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ChangeLog.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,32 @@
11
# RTXDI SDK Change Log
22

3+
4+
## 2.1.0
5+
6+
**Release highlights:**
7+
8+
- Major refactor of C++ API that separates the ReSTIR DI, ReGIR, and ReSTIR GI algorithms into distinct contexts.
9+
- Shader functions and structs renamed to reflect partition of algorithms.
10+
- Added `ImportanceSamplingContext` class that collects all 3 algorithms into a central class to ensure shared state is properly managed.
11+
- UI redone for the rtxdi-sample project's ReSTIR DI, ReGIR, and ReSTIR GI sections.
12+
13+
**Breaking changes:**
14+
15+
- C++ API changed completely. Algorithms are now organized by a single context each.
16+
- ReSTIR DI reservoir struct renamed from RTXDI_Reservoir to RTXDI_DIReservoir, with corresponding changes to DI reservoir functions.
17+
- ReSTIR DI resampling functions renamed to have a DI infix to distinguish them from their GI counterparts.
18+
- Shader headers broken down into more files.
19+
20+
**Fixed issued:**
21+
22+
- Fixed SPIR-V compiler issues.
23+
- Reorganized UI to reflect algorithm/code path.
24+
25+
**Misc improvements:**
26+
27+
- Decoupled boiling filter, bias correction, and several other settings for ReSTIR DI and ReSTIR GI.
28+
- Broke down ReSTIR DI local light sampling code into smaller functions for easier reuse and expansion.
29+
330
## 2.0.0
431

532
**Release highlights:**

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
# RTXDI SDK and Sample Applications
33

4-
Version 2.0.0.
4+
Version 2.1.0.
55

66
[Change Log](ChangeLog.md)
77

@@ -18,7 +18,7 @@ For more information about RTXDI, see the [NVIDIA Developer Page](https://develo
1818
[`rtxdi-sdk`](rtxdi-sdk) contains the SDK source code files that are meant to be included into the application build:
1919

2020
- [`rtxdi-sdk/include`](rtxdi-sdk/include) has the include files, both for host code and for shaders
21-
- [`rtxdi-sdk/include/rtxdi/ResamplingFunctions.hlsli`](rtxdi-sdk/include/rtxdi/ResamplingFunctions.hlsli) is the main shader include file that contains the resampling implementation
21+
- [`rtxdi-sdk/include/rtxdi/DIResamplingFunctions.hlsli`](rtxdi-sdk/include/rtxdi/DIResamplingFunctions.hlsli) is the main shader include file that contains the resampling implementation
2222
- [`rtxdi-sdk/shaders`](rtxdi-sdk/shaders) has the shader files that are supposed to be compiled through whatever means the application normally uses
2323
- [`rtxdi-sdk/src`](rtxdi-sdk/src) has the host code with various utility functions for setting up the parameters and resources for resampling
2424

@@ -99,6 +99,8 @@ The RTXDI sample applications can run using D3D12 or Vulkan, which is achieved t
9999

100100
By default, the sample apps will run using D3D12 on Windows. To start them in Vulkan mode, add `--vk` to the command line. To compile the sample apps without Vulkan support, set the CMake variable `DONUT_WITH_VULKAN` to `OFF` and re-generate the project.
101101

102+
To enable SPIV-V compileation tests, set the `GLSLANG_PATH` variable in CMake to the path to glslangValidator.exe in your Vulkan installation.
103+
102104
## Integration
103105

104106
See the [Integration Guide](doc/Integration.md).

doc/Confidence.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Introduction
44

5-
Modern denoisers, specifically those provided by the [NRD library](https://github.com/NVIDIAGameWorks/RayTracingDenoiser), are spatio-temporal filters. That means they accumulate lighting information over multiple frames in order to produce a stable output signal. While this approach is very effective for noise reduction, it has a major downside: the output signal often reacts to abrupt changes in the input relatively slowly. That can be seen as light turning on and off smoothly instead of instantly, shadows lagging behind the objects that cast them, and illumination from moving lights being smeared. The NRD denoisers include some heuristics to mitigate these effects, but they're only effective to some degree.
5+
Modern denoisers, specifically those provided by the [NRD library](https://github.com/NVIDIAGameWorks/RayTracingDenoiser), are spatiotemporal filters. That means they accumulate lighting information over multiple frames in order to produce a stable output signal. While this approach is very effective for noise reduction, it has a major downside: the output signal often reacts to abrupt changes in the input relatively slowly. That can be seen as light turning on and off smoothly instead of instantly, shadows lagging behind the objects that cast them, and illumination from moving lights being smeared. The NRD denoisers include some heuristics to mitigate these effects, but they're only effective to some degree.
66

77
Fortunately, it is possible to provide external hints to the denoisers to tell them where scene lighting has changed, and therefore, where the accumulated history should be reset. NRD calls that the "confidence" inputs, and it's a screen-sized single-channel texture that has 1.0 where the lighting is stable and 0.0 where it's changed. There are two confidence channels, one for diffuse lighting and one for specular. The RTXDI sample application implements a fast and effective solution to compute the confidence channels using the light reservoir information and some ray tracing.
88

@@ -36,7 +36,7 @@ First, the gradients are filtered spatially using a wide blur. The blur size and
3636

3737
Second, the filtered gradients are normalized, i.e. luminance differences are divided by the absolute luminance values, and then converted into (0-1) confidence using a simple function. This signal can already be fed into the confidence input of the denoiser, but there is one extra trick.
3838

39-
The gradients are often noisy even after the spatial filtering, which sometimes results in patchy history invalidation. More importantly, singular events like a light turning on or off only create nonzero gradients on one frame. The spatio-temporal nature of ReSTIR leads to noisy and locally biased lighting on that first frame after a significant change. If the denoiser history is reset momentarily and then accumulation starts from scratch, that local bias has a significant weight in the history, resulting for example in a "black dip" effect around a light that has turned off.
39+
The gradients are often noisy even after the spatial filtering, which sometimes results in patchy history invalidation. More importantly, singular events like a light turning on or off only create nonzero gradients on one frame. The spatiotemporal nature of ReSTIR leads to noisy and locally biased lighting on that first frame after a significant change. If the denoiser history is reset momentarily and then accumulation starts from scratch, that local bias has a significant weight in the history, resulting for example in a "black dip" effect around a light that has turned off.
4040

4141
The solution to both noisy confidence and local bias is simple: we can apply a short-history temporal filter to the confidence input of the denoiser. When the temporal filter is tuned right, deoniser history invalidations happen smoothly over a few frames and not abruptly. The temporal filter can be very simple; refer to [`ConfidencePass.hlsl`](../shaders/ConfidencePass.hlsl) for a reference implementation.
4242

0 commit comments

Comments
 (0)