15
$\begingroup$

I noticed that with some shaders, every other sample seems have less noise than the sample before and after it.

The shaders I noticed this with:

  • SSS

  • rough Diffuse

  • Toon

  • Translucent

  • Velvet

For example, using the SSS shader:

Sample 1:

enter image description here

Sample 2:

enter image description here

Sample 3:

enter image description here

What is the technical reason for this?

Example .blend

$\endgroup$
  • $\begingroup$ I would guess that switching to the Branched Path Tracer would yield different results. The regular Path Tracer chooses random things for each sample (a different shader for example, or perhaps a different piece of the SSS calculation). $\endgroup$ – Greg Zaal Feb 17 '14 at 11:21
  • $\begingroup$ @GregZaal I thought the shader was randomly picked (or picked based on mix shader factors and stuff) per ray, perhaps I'm wrong? $\endgroup$ – gandalf3 Feb 17 '14 at 21:39
  • $\begingroup$ Sounds like a question for Ton Rosendal. $\endgroup$ – Scalia Oct 15 '14 at 18:07
  • 1
    $\begingroup$ @VinceScalia Or Brecht ;) $\endgroup$ – gandalf3 Oct 15 '14 at 18:54
  • $\begingroup$ This question appears to be off-topic because it is a localized technical question. $\endgroup$ – someonewithpc Dec 1 '14 at 21:56
13
$\begingroup$

Sometimes it so happens that if the renderer has to sample N discrete things, and the number of samples is a multiple of N, then it can be that each thing gets exactly the same number of samples, which gives less noise.

With path tracing, each AA sample picks one light at random. If you have 2 lights with 2 AA samples then each light can be picked once, but if you have 3 AA samples then one light must necessarily get more samples than the other, which results in noise.

If Cycles used pure random sampling to pick the light for each AA sample this effect would not happen, with 2 AA samples a light might then get 0, 1 or 2 samples and it would still be noisy. However the Sobol and Correlated Multi-Jitter sampling distributions used by Cycles are such that each light does get exactly the same number of samples. For Sobol this works if the number of lights is a power of two, for Correlated Multi-Jitter it works for any number of lights.

For SSS it's more difficult to explain. We use ray tracing to find nearby points on the surface, where 50% of the rays are distributed along the direction of the normal, and 25% along two tangent directions. For flat surfaces only the rays along the direction of the normal will find points on the surface, and the sample distributions are such that an even number of AA samples will cause each pixel to hit the surface the same number of times.

$\endgroup$
4
$\begingroup$

As stated by Blender Developer Brecht Van Lommel:

That's the correct behavior. It samples one of the two lamps at random (unless you use branched path tracing). So at even samples it can sample both of them the same number of times, on odd samples that is not possible so there is noise from that.

There is also a thread on BlenderArtists about this, one of things that was mentioned was this:

Are you using the Correlated Multi-Jitter sampler (because I've read that the best results using it will come when you set the sample count to a power of 2)?

In this case, values like 8, 16, 32, 128, 4096 will produce less noise than say, 7 or 4000, so if you're not using Sobol, it's no surprise.

If you are using the default Sobol sampler, then there may or may not be an issue because I don't think the values placed for the samples should matter that much.

$\endgroup$
  • $\begingroup$ I was using the default Sobol sampler, but the quote from Brecht (on the dev.bo.o link) makes perfect sense. If you add it to the answer I'll accept :) $\endgroup$ – gandalf3 Jan 10 '15 at 20:14
  • $\begingroup$ Updated the answer! $\endgroup$ – VRM Jan 10 '15 at 20:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.