Page MenuHome

Cycles: Add OptiX AI denoiser support

Authored by Patrick Mours (pmoursnv) on Dec 11 2019, 3:42 PM.
"Like" token, awarded by Maged_afra."Love" token, awarded by billreynish."Party Time" token, awarded by marcog."Love" token, awarded by MetinSeven.



This patch adds support for the OptiX denoiser as an alternative to the existing NLM denoiser in Cycles. It's re-using the same denoising architecture based on tiles and therefore implicitly also works with multiple GPUs.

Unfortunately the currently released drivers do not support tiling natively yet, neither do they accept arbitrarily-formatted data as input. The APIs for that are already there, but they are not implemented. So I had to add some workarounds for it to work anyway (e.g. the tile data is first copied into a tightly-packed RGB buffer and the result later copied back into the tile buffer). These are guarded with a "OPTIX_DENOISER_NO_PIXEL_STRIDE" define and can be disabled once the drivers support this for even better performance.

Two new options were added to the UI: one to switch between the OptiX denoiser and the NLM one and one to change which model the OptiX denoiser should use ("Color" only operates on the color data, "Color + Albedo" also takes albedo data into account which can help to preserve finer details).

Diff Detail

rB Blender
cycles_optix_denoiser (branched from master)
Build Status
Buildable 6185
Build 6185: arc lint + arc unit

Event Timeline

AR (arc4g) removed a subscriber: AR (arc4g).

Fixed normal data as additional input layer and rebased on master.

I think we should go ahead with this. Is isolated code, so even being late in release cycle for commit shouldn't backfire badly.
I've tested it on Linux with RTX 6000 and seems to work just fine.


Why is it 10? Intuitively i'd say its 8 neighbors.

This revision is now accepted and ready to land.Jan 8 2020, 2:35 PM
Lukas Stockner (lukasstockner97) added inline comments.

"Neighbors" is a bit misleading, it's including the center tile and an additional entry for the target of the denoising operation.
This is not specific to this patch, the existing denoiser does the same.

This revision was automatically updated to reflect the committed changes.