Open
Description
What problem does this solve or what need does it fill?
We already have TAA. DLSS takes temporal rendering a step further, and renders at a lower resolution and then upscales it over time. This can be a huge performance increase when the cost of shading a pixel is very expensive, such as in per-pixel ray/path tracing.
What solution would you like?
Integrate DLSS as an optional anti-aliasing method, completing our existing MSAA, FXAA, TAA options.
Current Progress
- I have a seemingly-working
dlss_wgpu
crate allowing usage of DLSS from wgpu https://github.com/JMS55/dlss_wgpu- Depends on my wgpu fork More as_hal() methods gfx-rs/wgpu#3376
- I have a branch of bevy adding support for DLSS https://github.com/JMS55/bevy/blob/dlss/crates/bevy_core_pipeline/src/dlss.rs
Problems
- Quality seems bad/wrong - there's heavy aliasing even at 4k quality mode. I'm not sure why.
- There's a crash when enabling one of the ultra quality/performance modes (I forget which).
- Currently using DLSS requires disabling pipelined rendering, due to non-thread safety of the DLSS SDK. I need to figure out how to get around this.
- I haven't setup support (in either dlss_wgpu or bevy) for DLSS A-F presets (different from the quality/performance modes).
- Only Vulkan is supported, and not yet DirectX12.
What alternative(s) have you considered?
DLSS is NVIDIA only, and closed-source. FSR (#5232) is an alternative option from AMD that works on more GPUs and is open-source. There's also XeSS from Intel. For macOS, the only option is MTLFXTemporalScaler.
I've looked into integrating FSR but ran into difficulties. I haven't bothered looking into XeSS or MTLFXTemporalScaler.