during a progressive sampled rendering is running I observed that at the end of the render process the noisy areas get more attention and are solved. That’s magic.
Now, I ask me, could it be possible to keep the noise over the whole image constant during the render process? At the moment at the beginning of the render process some areas clear quite fast and other areas are grainy. Couldn’t spend more samples at grainy areas at the beginning also? So, the user could get a rendering with homogeneous noise at every time and stop it, if it is good looking.
I don’ t think it makes much sense not to have the noise refining in an adaptive way. But you could set the min and max subdivs of the progressive sampler to the same value, like 100/100. This should prevent the rendering from beeing adaptive at all. In the end you will just get higher rendertimes or an overall noisier image in the same amount of time. Of course the same amount of noise in a high contrast area still is visually noisier than the same noise in a flat area, if it’ s that what you’ re after.
It lowers the threshold progressively during the rendering.
It sets itself a target threshold and continues till that threshold is reached for the whole image. Then it lowers the threshold and starts to clean up the whole image again. You can see that in the sample rate element. Every time it lowers the threshold the image will turn white again (or at least nearly white).
Maybe what you see is that some materials are fast enough to skip several noise threshold levels within one sample, so they won’t get touched by the sampler for a while. But I don’t think there is a good way to solve this because they couldn’t get less than one sample.
As for the SR element: only white pixels are active pixels, all other colors show how long a pixel isn’t actively sampled anymore because it reached the currently targeted threshold already. So yea, in the end you’ll have a very blue image with a bit of green and some red pixels no matter what threshold you set. If you want to see the noise amount instead, use the noise level element.
We added the dynamic noise threshold to achieve exactly this effect. However, it keeps the current threshold until the percentage of the active pixels drops under a certain value, not until all pixels have reached the goal. By default it’s 80%. This is done for performance reasons - the utilization will suffer if you wait for all pixels to reach each threshold. If you set it to 1% (the lowest you can set it), you should get a very similar behavior to what you describe.
You can set it with this MaxScript command: renderers.current.progressive_dynNoiseThreshold=1
I tried this value and the SR output looks more homogeneous, but not the noise. Radoslav, what do you think about a way to keep a homogeneous noise level over the whole image during the progressive process? So, the noise could be looking like analog film noise and the user could stop the progressive process by getting the right look. Should the progressive sampling not allow to stop the render process at this way?
Better ways to achieve this effect than the dynamic threshold are certainly possible but are not easy to implement. Still, the dynamic threshold should provide very close results to just rendering with the higher threshold, especially with a low percentage.
In any case, completely uniform analog-like noise is not really possible. For example, some parts of the scene may converge so quickly that they’re way below the threshold even with one sample. The threshold guarantees that the estimated noise for each pixel will not be higher than the value but it can still be lower.
OK, thank you for the details. I will test the parameter. Could be nice, if the progressive sampling could be optimized for stopping a render process at every time.
Actually there’s a way to do it now using resumable rendering. You can stop the rendering, set a new higher noise threshold and resume the rendering. Or alternatively, start with a high noise threshold and if the quality is not good enough at the end, lower the threshold and resume.
Unfortunately resumable rendering is not currently supported in V-Ray for Rhino from what I can see. V-Ray Standalone supports it though and can be used for this. It’s not as easy as pressing a button in the VFB but it should achieve the same result.