Skip to content

TU-Clausthal-Rendering/SpatioTemporalDithering

Repository files navigation

Spatio-Temporal Dithering for Order-Independent Transparency on Ray Tracing Hardware

Paper: https://diglib.eg.org/items/a66e25db-7545-4612-bba8-3df6083209e8

Teaser:

YouTube

Contents:

Demo User Interface

This project was implemented in NVIDIAs Falcor rendering framework.

You can download the executable demo from the Releases Page, or build the project by following the instructions in Building Falcor.

After downloading the demo from the releases page, you can execute it with the RunFalcor.bat file. In the Demo, you can configure the renderer after expanding the DitherVBuffer tab. In the DitherVBuffer tab you can select the specific transparency technique in the Dither dropdown:

  • Disabled: Everything will be interpreted as opaque
  • STD 3x3: Our STD from the paper, with 3x3 dither matrices
  • DitherTemporalAA: Unreal Engine's DTAA
  • RussianRoulette: Russian Roulette renderer from the paper
  • HashGrid: (not in the paper) This renderer tries to pin the noise to the surface of the objects, instead of pinning it to screen space. This works somewhat well for white and blue noise, but produces extreme moiree patterns for regular patterns like bayer dithering matrices.
  • FractalDithering: (not in the paper) This technique also tries to pin a texture to the surface of the objects, but uses a recurring fractal dithering pattern to do so. Unfortunately, scaling this dithering pattern to subpixel also produces extreme moiree patterns. The technique itself comes from this Youtube video.
  • STD 2x2: STD, but with 2x2 dither matrices (using all 24 permutations of 2x2 matrices)
  • Periodic: Tries to utilize the uniform distribution modulo one, to select the optimal temporal sequence. Unfortunately, this flickers a lot.
  • SpatioTemporalBlueNoise: Implementation based on Wolfe et al. [WMAR22] (Screen-Space noise)
  • SurfaceSpatioTemporalBlueNoise: Same as above, but the texture is being attached to the surfaces as in the HashGrid technique above.
  • BlueNoise3D: Screen-space blue noise, where the third axis is represented by time.

=> For the baseline, set the Hybrid Threshold slider to 0.0

In the correction dropdown you can enable or disable the DLSS correction.

You can navigate the camera with WASD and dragging the mouse for rotation. Hold shift for more camera speed QE for camera up and down Space to pause the animation

Source Code

The important files can be found in Source/RenderPasses/DitherVBuffer/:

  • DitherVBuffer.cpp/.h: Renderer
  • Dither.slangh: Shader code for STD, RussianRoulette etc.
  • DitherVBuffer.rt.slang: Ray tracing shader (uses functions fron the Dither.slangh in the any-hit)
  • PermutationLookup.h: Code for generating our 3x3 Dither Matrices

Additionally you can check out Source/RenderPasses/DitherVBufferRaster/ for the raster implementation.

Falcor Prerequisites

Optional:

  • Windows 10 Graphics Tools. To run DirectX 12 applications with the debug layer enabled, you must install this. There are two ways to install it:
    • Click the Windows button and type Optional Features, in the window that opens click Add a feature and select Graphics Tools.
    • Download an offline package from here. Choose a ZIP file that matches the OS version you are using (not the SDK version used for building Falcor). The ZIP includes a document which explains how to install the graphics tools.
  • NVAPI, CUDA, OptiX

Building Falcor

Falcor uses the CMake build system. Additional information on how to use Falcor with CMake is available in the CMake development documentation page.

Visual Studio

If you are working with Visual Studio 2022, you can setup a native Visual Studio solution by running setup_vs2022.bat after cloning this repository. The solution files are written to build/windows-vs2022 and the binary output is located in build/windows-vs2022/bin.

About

EGSR 2025 Paper

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 18