Page MenuHome

Adaptive Sampling Improvements
Confirmed, HighPublicTO DO

Assigned To
None
Authored By
Brecht Van Lommel (brecht)
Mar 9 2020, 6:23 PM
Tokens
"Love" token, awarded by nequine."Love" token, awarded by Arken."Love" token, awarded by russ1642."Love" token, awarded by mindinsomnia."Love" token, awarded by bnzs."Love" token, awarded by silex."Love" token, awarded by Shimoon."Love" token, awarded by SteffenD."Love" token, awarded by tuqueque."Like" token, awarded by Frozen_Death_Knight."Like" token, awarded by TheRedWaxPolice."Like" token, awarded by lordodin.

Description

  • Optimize PMJ pattern generation, and generate more samples

Addressed in Cycles X:

  • Denoising can detect patterns due to adaptive sampling only working per tile. (T79190)
  • Solve issues with combined CPU and GPU not using the same amount of samples. Possibly by using a higher adaptive step for both CPU and GPU.
  • Render multiple small times at the same time for GPU, to allow adaptive sampling to stop and match CPU without too much performance impact.

Event Timeline

Brecht Van Lommel (brecht) changed the task status from Needs Triage to Confirmed.Mar 9 2020, 6:23 PM
Brecht Van Lommel (brecht) created this task.
Brecht Van Lommel (brecht) changed the subtype of this task from "Report" to "To Do".

Will this allow us to render GPU at smaller tiles even when not using adaptive sampling? Because that would be a dream come true!

Without digging into the code it seems that adaptive sampling counts up to your render samples setting but won't change pixels if they're within your noise threshhold. It doesn't stop rendering when each pixel in the tile reaches the noise threshhold, it must keep running noise checks or something on every pixel for every sample.
Try this: With the default cube set the noise threshold to 0.1, minimum samples to 200, and the render samples to 10,000,000. It'll render the noisy tile and then spend minutes not changing the image at all but counting up to the 10,000,000 samples for no reason. Even for tiles that are entirely background. It seems this algorithm doesn't actually stop when the noise threshhold is reached.

Edit: This is for GPU rendering. CPU rendering doesn't do this.

Cooperative groups in CUDA 9+ should allow GPUs with SM 6.0 and newer to do adaptive sampling at the same granularity as the CPU.

Brecht Van Lommel (brecht) triaged this task as High priority.Jun 18 2020, 7:31 PM

Without digging into the code it seems that adaptive sampling counts up to your render samples setting but won't change pixels if they're within your noise threshhold. It doesn't stop rendering when each pixel in the tile reaches the noise threshhold, it must keep running noise checks or something on every pixel for every sample.
Try this: With the default cube set the noise threshold to 0.1, minimum samples to 200, and the render samples to 10,000,000. It'll render the noisy tile and then spend minutes not changing the image at all but counting up to the 10,000,000 samples for no reason. Even for tiles that are entirely background. It seems this algorithm doesn't actually stop when the noise threshhold is reached.

Edit: This is for GPU rendering. CPU rendering doesn't do this.

Yes, it's weird. I've been wondering the same. In other software, adaptative sampling is supposed to give you an uniform noise all around, by stopping sampling on areas that otherwise would come out clean. But blender's one does almost like the opposite? It's hard to understand how it works. Yes, it saves some rendertime with the default settings but I couldn't tell you why

Arken awarded a token.Oct 5 2020, 2:24 PM