Paper: https://diglib.eg.org/items/a66e25db-7545-4612-bba8-3df6083209e8
Teaser:
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
The important files can be found in Source/RenderPasses/DitherVBuffer/:
DitherVBuffer.cpp/.h: RendererDither.slangh: Shader code for STD, RussianRoulette etc.DitherVBuffer.rt.slang: Ray tracing shader (uses functions fron theDither.slanghin the any-hit)PermutationLookup.h: Code for generating our 3x3 Dither Matrices
Additionally you can check out Source/RenderPasses/DitherVBufferRaster/ for the raster implementation.
- Windows 10 version 20H2 (October 2020 Update) or newer, OS build revision .789 or newer
- Visual Studio 2022
- Windows 10 SDK (10.0.19041.0) for Windows 10, version 2004
- A GPU which supports DirectX Raytracing, such as the NVIDIA Titan V or GeForce RTX
- NVIDIA driver 466.11 or newer
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 clickAdd a featureand selectGraphics 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.
- Click the Windows button and type
- NVAPI, CUDA, OptiX
Falcor uses the CMake build system. Additional information on how to use Falcor with CMake is available in the CMake development documentation page.
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.

