Excessive noise/fireflies with Falloff as Glossiness

Hey guys,
I have a problem here where a Falloff map in the glossiness channel is causing excessive noise in the reflection pass, see attached screenshot.
The material is a clearcoat which later gets blended with another material.
The noise goes away when the mode is set to Fresnel or something else, but for look development reasons the Falloff has to stay as it is. Raising Min AA to 24 or even higher does not help.

Max 2023.2.2, V-Ray 6.00.20

Scene file is here: https://transfer.px2.de/\_8ZZcd15wNdV5AR

Regards

Oliver

EDIT: Setting Falloff mode to Fresnel does not help either, along the rear edge the noise is still visible.

You’re using a very long GTR tail (i.e. set at 1.55 instead of 2.0: image.png​) and that long tail will always be noisier than the default (GGX was chosen for very good reasons.).
You’ll just need many more samples for it to converge (the sampleRate RE indeed shows a ton of red.), a slightly tamer HDRI, or a tighter GTR tail falloff.
On the plus side, the higher sampling will be concentrated where needed.

P.s.: if when converged the noise is visibly still too high, you’re left with lowering noise threshold until you’re satisfied. You may need to also increase max AA in case, to ensure you are indeed converging to the set N.T. (meaning little to no red in the SR RE).

as it arrived:


and its sampleRate RE at 2-48:

​
As it becomes with 2-1000 max AA (notice max AA is NOT reached anywhere in the image, for this N.T.):


and its SR RE:
​
​
​

Thanks Lele, I will try this.

Regards

Oliver

Yep, it’s working. Thank you so much, Lele.
I wouldn’t have thought that such a high Max AA was needed for a still image. Most of the time we use those values for very high-intensity lights on motion blurred (remember the fast-spinning high gloss rims?) or out-of-focus parts of the image.

High sampling is needed any time there is a task that’s hard to converge: all of those you mentioned surely qualify.

In the case of the GTR tail, consider most other engines don’t offer it, precisely because it’s super hard to make noise free (and there’s a wee bit of math around the model that hasn’t been solved.)
Asen has made a ton of unique work around the GTR BRDF (Microfacet Shadowing, Anisotropy), which makes it usable for us.
For size, take the tail back to 2.0 and see how quick and clean it is.
Of course, you’re now stuck with a much tighter, less luscious highlight shape.

There’s a chance you may get somewhat similar looks layering coats, but then i’d wager you’d have to sample just as hard: sun in the 150k float, only a few pixels wide, as light…

what was the render time cost for getting the smooth results?

On the isolated case with just the bonnet: Negligible.
Will see how much difference it makes on the full image. Hopefully not so much.

Twenty times longer for the specific crop: from 22 seconds to shy of 8 minutes.
I imagine over the full image that’s truly negligible. :smile:

The problem does also go away if you just disable “Affect Reflections” in the domelight :slight_smile:
Might have unwanted effects on other materials which you could fix by splitting them up to a separate dome light. But in this case the result looks exactly the same just minus the noise.
Alternatively the denoiser seems to clean up the affected areas as well.

You’d be removing a big part of the look (sadly locked in) of that material if you disabled reflections.
Same with denoising, you’d need at the very least a uniform distribution of noise, otherwise the very sparsely placed brighter pixels (see the initial image) will turn into splotches (check it yourself by denoising the reflection RE separately.).
So, to denoise this kind of issue, one would have to render with fixed, ensuring no clumpiness, and then hope the denoised solution isn’t made up of unconnected patches.

original reflection RE:

​
​fixed 24 subdivs reflection RE (took only 1.5X the original):

​
Frankly speaking, however, this is smack in the middle of the “needs more AA” class, as it’s a combo of complex BRDF and difficult lighting.

Yeah, probably depends on the usecase :slight_smile: In production I would always try to find some practical workaround instead of bumping my max AA to 1000 but there are situations where its probably unavoidable.
Seems though the issue has nothing to do with the falloff itself but with glossiness values very close to 1 and a lowered Tail Falloff? So you recommend normally not touching the Tail Falloff at all?

Well, you are right. The scene I uploaded does indeed take considerably longer. However, the final material with the blended clearcoat does not take that much longer to render, but the noise is gone.

Setting affect reflection off for the domelight does help to some extent, but some specks of noise are still left:

Olli seems to have to deal daily with nightmare production cases: he can’t quite cheat it, the sizes are ginormous, people can see the dust specks.
I’d be twice my age if i had to do the same on a daily basis. :smile:

Seems though the issue has nothing to do with the falloff itself but with glossiness values very close to 1 and a lowered Tail Falloff? So you recommend normally not touching the Tail Falloff at all?
What we see in the reflection RE is essentially a very low probability (per sample), but very high intensity (per sample), reflection of the sun disk.
The longer tail simply reduces the probability of finding the sun, and increases the screen coverage of the specular lobe, both compounding the amount of work needed to converge.

I’ll try and simplify the renderer logic below (please do not take it as exact, but as a guideline.):

A pixel color is the result of the average of the samples V-Ray took for it.
In our case, this reflection requires very high sampling because most samples will return very manageable values (when the sun isn’t hit, most of the backdrop is in the visible range.), but every now and then the sampler will find the sun disk, and that sits in the 1e06 range, which will of course throw off the average for the pixel, and instruct V-Ray that we have that very bright, very lone sample in the mix and should continue to look for it if possible (i.e. if we have Max AA subdivs available.).

As a mental excercise, say we have 50 samples that average to 0.03f and then one comes in at 150000.0f (we hit the sun disk!).
If we discarded the sample as “bad”, we’d get no sun reflection whatsoever, but to properly sample the reflection, we’d need 50 times the 50+1 samples to try and get 50 sun disk samples.
As we deal with statistics, it’s not even guaranteed that we’d get those fifty bright samples if we sampled fifty times more.

Enter IntelPGL, the MLT Solver for progressive caustics, and other such techniques to try and learn from a scene to then guide the engine, reducing the randomic nature of the searches that all path tracers perform.
They don’t specifically help here (beyond what other importance sampling is already at work on the dome and the shader.), but they do in a number of other cases where we have the low-probability, high-intensity scenarios.

Thanks for the breakdown, very interesting to peak behind the curtains of whats happening :slight_smile:
I was under the impression that the Max Ray Intensity parameter in the render globals was designed to deal with those kind of situations. Is that of not much help in this kind of conext?

Well, it’s another form of clamping.
If we clamped the first bounce (i.e. this is a reflection of the dome), we’d mute the dynamic range severely.
The Max Ray intensity works better for secondaries, and GI, in general, but it still reduces the light flux in the scene quite massively.
I personally have it off, and manually control the energies put in the scene.
In this case, i’d have probably poked the shader and HDR, while free to change looks, until it was as close the what was wanted by the client as the render budget allowed.
And this may well be where Olli is locked into.
Thankfully i understand he’s well endowed with rendering hardware. :smile:

Curious how much additional Light Cache samples help in this sort of scene. With Path Guiding?

Also, what sort of effect will the new Adaptivity Clamp have on this? Would it make it worse because it would reduce the number of samples in the bright highlights? Need to get a pause so I can install the latest update.

We usually end up adjusting a second HDRI for just the reflections, and either blur the sun, or reduce it’s intensity. This can sometimes have deleterious effects on the look-- very case by case. I know Olli has tried all this before.

Pgl helps nothing at all for this case.
I think it’s because this is a direct reflection from a dome, albeit with those characteristics of occasional high intensity.
PGL has been seen helping the very difficult, many-bounce stuff, like thin volumes, tertiary speculars, and so on.
I’ll profile the render and talk to the Dev to see if anything can be done.

Also, what sort of effect will the new Adaptivity Clamp have on this? Would it make it worse because it would reduce the number of samples in the bright highlights? Need to get a pause so I can install the latest update.
Considering the reflection is entirely in the visible range, adaptivity clamping wouldn’t help here as it wouldn’t be called into action.
I am left wondering if Olli could get to a similar look using sheen + GGX, and if that was the case, if it required less or more sampling to converge porperly.
I may give it a gander myself.

We usually end up adjusting a second HDRI for just the reflections, and either blur the sun, or reduce it’s intensity. This can sometimes have deleterious effects on the look-- very case by case. I know Olli has tried all this before.
Indeed, this is what i referred to in my earlier post mentioning trying to reach a compromise.
It’s sadly not always possible, and I personally would have been pretty happy to know it eventually converged properly with whatever look, if with a ton of brute force, when in production, as That I could budget for.

Interesting idea about sheen. Gotta say I don’t use it a whole lot, except for velvet and dust. Should probably do more experiments there. I often find myself lowered the GGX tail down to even as low as 1.3 It looks really beautiful. Have not run into fireflies that I could specifically attribute to that, but perhaps because I did not know to look there.

The single biggest firefly fix for non-HDRI I have found is to duplicate the lights and reduce the directionality of the copy using the copy for the reflections. Highly directional lights (like > ~0.5, but especially up in the 0.9 + range) cause no end of firefly troubles.

I also think it’s an awesome BRDF.
Even without energy preservation at low gloss, i was having fun making it look diffuse, but not quite. Just something else compared to the others around.
I mean, the retro-reflectivity at low gloss and tail is truly a joy for the eyes.

​

I won’t pretend to understand fully this issue, but what if there was a boolean argument (if that is the correct terminology) to arbitrarily clamp or otherwise deal with the random e.g. 150000.0f instance when it occurs?
I’m guessing that this has maybe been thought about, but it’s intersesting and too much wine says I should ask :slight_smile: