Cycles Adaptive Sampling

Hi,

I guess above Blender w/Adaptive Sampling (nota bene Sobol integrator has been proven to work best w/ CUDA) build has been made w/EMT64 flag in MSVC 2013 however on AMD Phenom X4 it does not want to work, anybody has an idea why ?

try copy *dll from standert blender

Still refuses to cooperate (((

The tooltip says 1 corresponds to noisefree looking image but it seems the opposite, the more near 0 the less noiser is. Or am i doing something wrong?

For example 1024 samples, 1 Tolerated error, is noisy like…about 256 samples without adaptive…if i decrease tolerated error near zero it gets much cleaner (and longer)

I get the same results as marco. So does it behave like error threshold (the lower the less noise it allows)? Or is it more like quality (the more the better)?

@ Ivan I owe you an apology. I performed a test using your file and saved copies of the render for

  1. no Adaptive sampling
  2. Adaptive sampling and distribution on set tot he defaults.
    3 Adaptive sampling and distribution on and the error set to 0.20 as was suggested.

Then I opened the compositor and setup image inputs for each of the 3 files. Added a math node set to subtract and connected the full quality (number 1) image as the top input. Then connected each of the other 2 images to the lower input to compare what was left which should be the difference.

The difference between the full quality and the AS on with error set to 0.20 was almost imperceptible and the difference between the full quality and the default AS setting was very apparent.

Also as you mentioned the brighter areas seem to have more sample in the default setting. In looking at the result of subtracting the default AS render from the full render the area with the brightest reflections on the ground plane seem to Null out the full sample a bit better.

Hopefully I now understand what you were getting at originally.

Hi tomtuko, it would be nice if you can post some images.

Thanks, mib

Then i think the tooltip is incorrect, probably should say 0 (zero) corresponds to noise free image. Seems more logic, how much error do I tolerate? -> 0 -> no error in image -> noisefree… imho. Maybe it’s just a typo

Here is a zip with the 3 renders.

https://drive.google.com/file/d/0B4rqfTwu09IQelRiOTZGY05tRjQ/view?usp=sharing

I think I see another problem with the default AS render. You will notice it when you use the compositor as I explained. There are verticle and horizontal lines that define the boundary of one of the tiles as it rendered.

Thanks tomtuko.
@lukasstockner97, I cant get any meaningful results with the BMW scene.
Got same render time with error 0.8 or 2.0, really strange.
If you don´t have it already: http://www.blenderartists.org/forum/showthread.php?239480-2-6x-Cycles-render-benchmark

Cheers, mib

I’m not sure if i’m getting entirely…the adaptive stopping makes sense “only” with an adequate number of samples, right? The whole system is clamped by the standard rendering sample settings it seems.

For example setting 64 samples will make little to zero difference whether it is adaptive with 2, 1 or 0.2…instead setting for example 2000 samples, the adaptive patch will stop firing rays if it doesn’t need the whole 2000 samples, and then it will move to the next tile…??

:spin:

I do not know, but it works very well for me.
Render stops either tolerated error or render samples.
If your render samples is lower than tolerated error there will not difference.

Try set number render samples crazy high, for example 10 000,
then your render stops amount tolerated error
then there must be difference if you set 0,5 ot 2 …
0,5 lower noise higher time
2 higher noise lower time

also set map update rate lower , maybe 10 for
more frequently re-estimate

Hi jachtarfranko, idea was start with lower samples to get an impression what is the best error setting.
Than set the final sample value.
I start with 100 samples, error 1 and max. update rate 10 and Adaptive distribution ON.
Then set error to lower values step by step to compare with the render without AS.
This does not work. :slight_smile:
Can you tell me your settings to get faster render with the same amount of noise for the BMW scene?

Cheers, mib
EDIT: I use GPU with 270x240 Tiles.

I am not on PC now, but I think 100 render samples doesn’t have a sense for adoptive sampling.
I think number of render samples always have to be bigger than necessary
and render time should be stopped by “tolerated error”

then everywhere will be the same amount of noise
therefore to compare render with adaptive and without(edit) adaptive is not very wise

Yes, that’s exactly how it works. With 100 samples set the adaptive stopping won’t work well/at all since the tiles will stop before the have a chance of reaching the tolerated error. I usually set the sample value to something like 100000 to avoid that.
It seems that this is the main source of confusion, but I don’t see a way to improve this. Any suggestions?

The error parameter is indeed a threshold, the lower you set it, the better the image becomes.

@tomtuko Try increasing the map interval. This might be one of the cases where it could help.

Yes, that’s indeed the case. CMJ relies on the samples setting, using only a prefix of the complete sequence breaks the low-discrepancy property.

By the way: Which DLLs are missing, so that I can include them the next time?

Any OpenCL Build?

Ah now it’s much clearer thank you. The only way i can think to make it dead simple would be:

If you check Adaptive sampling, the “vanilla” Render Samples gets grayed out, an they get set to 10’000 in the background (not exposed in the UI). Then the user only tweaks the Tolerated Error from a default value (lets say =1 for rather noisy image) towards zero for noise free images…the tooltip could say something like "0 correspond to a noise free looking image, but higher render times)
Though Sergey and Thomas could suggest how it should be probably.

***vcomp120.dll IIRC, not sure.

Thanks for clarification.

@marcoG_ita, sound reasonable. Another idea, add a separate Sampling field in AS panel, default 10000, overwrite the regular sample setting. Adaptive Samples maybe.
@Ohto, I posted OpenCL error to the patch tracker.

Cheers, mib

You will be waiting a while for the actual adaptive sampling to start if you set the adaptive map update interval to 100 samples. The resulting warmup will be 300 samples.

Yes, that’s indeed the case. CMJ relies on the samples setting, using only a prefix of the complete sequence breaks the low-discrepancy property.

However, in more recent testing, it seems like using a higher update interval value like 25 is making the distribution a lot more accurate from what I can tell. Even though it would be true that areas lit by direct light would be messier to start with, the multi-jitter will still clean it up and, with the somewhat higher update values, seems to actually produce an advantage for areas that see a noticeable contribution from indirect light. I can tell the accuracy is likely improved because the convergence rate appears a bit higher than at low values such as 5.


By the way: Which DLLs are missing, so that I can include them the next time?

msvcp120.dll, msvcr120.dll, and vcomp120.dll. These can just be packaged in the .zip before uploading.

Control over the samples is something which is definitely needed… I don’t see why another field is needed for this… Something to ask DingTo maybe? or the UI Team?