Skip to content
This repository has been archived by the owner on Nov 22, 2022. It is now read-only.

Real-time denoising #2

Open
jaxry opened this issue Aug 15, 2019 · 12 comments
Open

Real-time denoising #2

jaxry opened this issue Aug 15, 2019 · 12 comments
Assignees
Labels
enhancement New feature or request help wanted Extra attention is needed wip work in progress, not ready for review

Comments

@jaxry
Copy link
Contributor

jaxry commented Aug 15, 2019

Currently, our renderer draws a scene progressively. The more frames rendered from a given camera angle, the higher quality the resulting render becomes. While progressive rendering is typical for path tracing, it is far from ideal with our goal to bring path tracing into real-time.

Lots of research has gone into methods for denoising a path traced image, with the objective of producing a high quality result in only one frame. I am aware of two papers describing similar methods that would be most applicable to our renderer. The design involves hybrid rendering - the scene is rasterized to several G-buffers, and a 1spp path traced image is spatially and temporally filtered with help from the G-buffers.

I'm not sure which approach is better suited for our needs, and I will try implementing both to compare the two. Does anyone have any experience with these two methods? Are there other methods?

@jaxry jaxry added the enhancement New feature or request label Aug 15, 2019
@jaxry jaxry added the help wanted Extra attention is needed label Sep 13, 2019
@sweco-sekrsv
Copy link

I saw these denoising shaders in shadertoy, might be interesting to have alook at:
https://www.shadertoy.com/view/ldKBzG
https://www.shadertoy.com/view/ldKBRV

Not sure if this has denoising but it converges really quick.
https://www.shadertoy.com/view/MsXfz4

@jaxry
Copy link
Contributor Author

jaxry commented Sep 16, 2019

Thanks for the links! That denoising shader seems to implement a cut-down version of SVGF, with its use of a wavelet filter. It may serve as a useful reference when we work on implementing SVGF in full.

@jaxry jaxry added the wip work in progress, not ready for review label Sep 29, 2019
@ManishJu
Copy link

@hoverinc hoverinc deleted a comment from tsharmamba2014 Jan 16, 2020
@jaxry
Copy link
Contributor Author

jaxry commented Jan 16, 2020

This looks like an excellent paper! It reports a ~2x speedup over SVGF, and the spatial filter looks conceptually simpler to implement as well. I've been starting to explore this technique, and I hope to see some results in a few weeks.

Does Nvidia Iray use the OptiX AI Denoiser that is compared to in the paper?

@ManishJu
Copy link

ManishJu commented Jan 17, 2020

Yes! Iray uses the Optix Denoiser.

@RenderTool
Copy link

Here is a denoise blog, I hope it will be useful to you.
https://alain.xyz/blog/raytracing-denoising

@barnabasbartha
Copy link

Can somebody write a quick update about how the development of the real-time path tracing is going? I'm really interested and super excited to see the outcome or the challenges this issue is facing with.

@jaxry
Copy link
Contributor Author

jaxry commented Apr 19, 2020

Hi @BarthaBRW . The biggest WIP feature right now is on this branch https://github.com/hoverinc/ray-tracing-renderer/tree/demodulate-albedo

The branch separates diffuse and specular light into separate buffers, and demodulates surface textures so that they're first applied in the post-processing step. It'll bring some big visual quality improvements because it'll increase the effectiveness of the temporal filter. But more importantly, it lays the necessary groundwork for the spatial filter.

The specifics of how to implement the spatial filter is up in the air though. I believe using BMFR (posted above) for diffuse light, and using a modified SVGF for specular light would give us the best possible results, but it's hard to say before trying it. Might you have any ideas?

@barnabasbartha
Copy link

Thanks @jaxry for the quick response. I'll need some time to catch up some of these topics but looking forward to contributing.

@jaxry
Copy link
Contributor Author

jaxry commented Apr 22, 2020

The pipeline described in NVIDIA's Minecraft RTX implementation looks like it fits the requirements of our renderer too!

https://www.youtube.com/watch?v=mDlmQYHApBU

They use SVGF on a diffuse buffer and a specular buffer separately, and a special anisotropic kernel is used for the sky shadows. Light in their implementation works very similar to what we have, so their solutions likely would work great.

@jaxry
Copy link
Contributor Author

jaxry commented May 11, 2020

Just giving a heads up: I'm spending all my time working on a full denoising pipeline as we speak, and I hope to get some good results in a few weeks. Expect other development on the renderer (like better Three.js support) to be on the backlog for now.

@jaxry jaxry pinned this issue May 11, 2020
@jaxry jaxry unpinned this issue May 11, 2020
@trsh
Copy link

trsh commented May 3, 2021

Is it ready? :)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request help wanted Extra attention is needed wip work in progress, not ready for review
Projects
None yet
Development

No branches or pull requests

6 participants