Is there any better option to denoise
an image so to not loose crucial details?
I am talking about the case in wich we
have glass material and a lot of textures and
lighting reflected and refracted through it.
On the picture I attach, the right part is the
denoised image.
My render settings:
Resolution 1200x1200
Camera samples=4
Diffuse samples=3 & Ray Depth=3
Specular samples=3 & Ray Depth=2
Transmission samples=3 & Ray Depth=10
My denoised settings:
Variance 0.5
Pixel Search Radius 15
Pixel Patch Radius 3
thx for any advice...
Solved! Go to Solution.
Is there any better option to denoise
an image so to not loose crucial details?
I am talking about the case in wich we
have glass material and a lot of textures and
lighting reflected and refracted through it.
On the picture I attach, the right part is the
denoised image.
My render settings:
Resolution 1200x1200
Camera samples=4
Diffuse samples=3 & Ray Depth=3
Specular samples=3 & Ray Depth=2
Transmission samples=3 & Ray Depth=10
My denoised settings:
Variance 0.5
Pixel Search Radius 15
Pixel Patch Radius 3
thx for any advice...
Solved! Go to Solution.
Solved by alan.kingFCDLA. Go to Solution.
Noice does not seem to work well with coherent specular reflections. I have not been able to get satisfactory results with glass surfaces.
It does work well with flat diffuse surfaces. As you've demonstrated, it's not so great with highly detailed textures. You need to find the tradeoff between initial sampling quality and denoising. Noice is great when the amount of noise in the image is fairly low.
I recommend you look into Adaptive Sampling, it's a better option in the case of the image you posted. I've found it can reduce render times by ~20% without mangling details. However, I don't recommend the settings described in the Arnold docs. Max Samples of 20 is insane and totally unnecessary. I usually get good results with AA samples ~ 3, Max Samples ~6.
Noice does not seem to work well with coherent specular reflections. I have not been able to get satisfactory results with glass surfaces.
It does work well with flat diffuse surfaces. As you've demonstrated, it's not so great with highly detailed textures. You need to find the tradeoff between initial sampling quality and denoising. Noice is great when the amount of noise in the image is fairly low.
I recommend you look into Adaptive Sampling, it's a better option in the case of the image you posted. I've found it can reduce render times by ~20% without mangling details. However, I don't recommend the settings described in the Arnold docs. Max Samples of 20 is insane and totally unnecessary. I usually get good results with AA samples ~ 3, Max Samples ~6.
Thx Aaron.
Didn't use adaptive sampling since now..
I am impressed of your knowledge that you confirmed that
there is a huge quality problem in denoising reflections...
I will check what yout told me and be right back 🙂
Thx Aaron.
Didn't use adaptive sampling since now..
I am impressed of your knowledge that you confirmed that
there is a huge quality problem in denoising reflections...
I will check what yout told me and be right back 🙂
Yup, Aaron is right -- denoising on glass is not going to work well. The reason is that noice will not have all the AOV info it needs in order to do a good job. For instance, all the normals that the denoiser gets are for the glass and not the object behind it (refraction) or in front of it (reflection), so we gets this smearing effect.
We are discussing in an internal ticket if there is anything we can do to make this better. In the meantime, like Aaron said, adaptive sampling can help. You might also be able to render without glass, denoise that, and then comp in a glass reflection render?
Yup, Aaron is right -- denoising on glass is not going to work well. The reason is that noice will not have all the AOV info it needs in order to do a good job. For instance, all the normals that the denoiser gets are for the glass and not the object behind it (refraction) or in front of it (reflection), so we gets this smearing effect.
We are discussing in an internal ticket if there is anything we can do to make this better. In the meantime, like Aaron said, adaptive sampling can help. You might also be able to render without glass, denoise that, and then comp in a glass reflection render?
thx a lot Thiago, I will try enable adaptive samping even if I consider bigger rendering times... I always avoid any post because when you have your boss over your head and "yesterday" delivery renderings, you understand how fast (and good of course) you should be 🙂
thx a lot Thiago, I will try enable adaptive samping even if I consider bigger rendering times... I always avoid any post because when you have your boss over your head and "yesterday" delivery renderings, you understand how fast (and good of course) you should be 🙂
@Aaron Ross
@Thiago Ize
Tried to include Adaptive sampling and
I get no significant difference, except increasing
my rendering time, wich I try always to keep it
balanced and not exceed one hour for each image...
(I have an i9 system)
Denoised image is still the same in both
enabled or disabled Adaptive sampling scenarios,
with all textures reflected and refracted
through glass partitions, faded out.
I know for some people this is not important,
but if you do very demanding interior renderings
where you have to show every single detail and
you have a lot of transparent surfaces like glass,
the only way to preserve rendering accuracy is
NOT to denoise anything, meaning that I have
to increase aa samples as much as I can,
so much much longer rendering times...
@Aaron Ross
@Thiago Ize
Tried to include Adaptive sampling and
I get no significant difference, except increasing
my rendering time, wich I try always to keep it
balanced and not exceed one hour for each image...
(I have an i9 system)
Denoised image is still the same in both
enabled or disabled Adaptive sampling scenarios,
with all textures reflected and refracted
through glass partitions, faded out.
I know for some people this is not important,
but if you do very demanding interior renderings
where you have to show every single detail and
you have a lot of transparent surfaces like glass,
the only way to preserve rendering accuracy is
NOT to denoise anything, meaning that I have
to increase aa samples as much as I can,
so much much longer rendering times...
I think we were both suggesting to use adaptive sampling instead of denoising, or if you do denoise, change the settings to make it much less aggressive.
Adaptive sampling won't save any time until the pixel has reached its AA_adaptive_threshold. Considering how noisy your image looks, I suspect that's mostly not happening. I suggest setting all other sample settings to 1 or maybe 2 if it's a huge source of noise, which is what then lets you raise the AA_max to something large like 20 or 30 (arnold docs need updating), and using AA_adaptive_threshold as your render time/noise dial.
I think we were both suggesting to use adaptive sampling instead of denoising, or if you do denoise, change the settings to make it much less aggressive.
Adaptive sampling won't save any time until the pixel has reached its AA_adaptive_threshold. Considering how noisy your image looks, I suspect that's mostly not happening. I suggest setting all other sample settings to 1 or maybe 2 if it's a huge source of noise, which is what then lets you raise the AA_max to something large like 20 or 30 (arnold docs need updating), and using AA_adaptive_threshold as your render time/noise dial.
To explain the max AA of 20: you used AA=4, and diffuse/specular/transmission samples of 3 (there's no mention what the light samples are), so that roughly means that if you cut those secondary samples form 3 to 1, then to get the same quality as before you roughly need to increase AA from 4 to 4*3=12. So an AA_max of 20 isn't really that big of a jump. The reason we do all this is that adaptive now has more room to give speedups. Instead of picking between AA values of 3, 4, 5, and 6, like in your previous AS test, we can now go from 3 all the way to 18, which can save more work.
To explain the max AA of 20: you used AA=4, and diffuse/specular/transmission samples of 3 (there's no mention what the light samples are), so that roughly means that if you cut those secondary samples form 3 to 1, then to get the same quality as before you roughly need to increase AA from 4 to 4*3=12. So an AA_max of 20 isn't really that big of a jump. The reason we do all this is that adaptive now has more room to give speedups. Instead of picking between AA values of 3, 4, 5, and 6, like in your previous AS test, we can now go from 3 all the way to 18, which can save more work.
Good points, thanks Thiago. Are you saying that camera AA adaptive sampling works best with low values to the component samples? I would have thought that we could optimize performance by dialing in customized values for the component samples, and using less aggressive camera AA adaptive sampling.
Petros, definitely check on the samples of your lights. I always increase them up to 3, sometimes higher. This SIGNIFICANTLY reduces noise in the directly illuminated area. You need to use Arnold lights for this, 3ds Max Photometrics are not supported. Sampling settings for the environment are in the Arnold tab of the Render Setup. For indirect bounce light, I increase the Diffuse samples.
The Adaptive Threshold parameter is extremely sensitive, very small changes have a huge impact.
I've unlocked this paid tutorial and made it free for you, or anyone else who needs help with adaptive sampling:
https://www.linkedin.com/learning/embed/3ds-max-tips-tricks-and-techniques-2/accelerate-arnold-rende...
Good points, thanks Thiago. Are you saying that camera AA adaptive sampling works best with low values to the component samples? I would have thought that we could optimize performance by dialing in customized values for the component samples, and using less aggressive camera AA adaptive sampling.
Petros, definitely check on the samples of your lights. I always increase them up to 3, sometimes higher. This SIGNIFICANTLY reduces noise in the directly illuminated area. You need to use Arnold lights for this, 3ds Max Photometrics are not supported. Sampling settings for the environment are in the Arnold tab of the Render Setup. For indirect bounce light, I increase the Diffuse samples.
The Adaptive Threshold parameter is extremely sensitive, very small changes have a huge impact.
I've unlocked this paid tutorial and made it free for you, or anyone else who needs help with adaptive sampling:
https://www.linkedin.com/learning/embed/3ds-max-tips-tricks-and-techniques-2/accelerate-arnold-rende...
All my lights samples (arnold lights + environment) are setting to 5.
Anyway thanks a lot both of you... This forum is really something holy
for this magic software that creates miracles, but! with correct..adjustments!! 🙂
Ok..... I am going try some tests inside my already complicated scene Thiago and..
I'll be back! 🙂 🙂
Aaron thx for the tut... you are already in the list of my favorite mentors! 🙂
All my lights samples (arnold lights + environment) are setting to 5.
Anyway thanks a lot both of you... This forum is really something holy
for this magic software that creates miracles, but! with correct..adjustments!! 🙂
Ok..... I am going try some tests inside my already complicated scene Thiago and..
I'll be back! 🙂 🙂
Aaron thx for the tut... you are already in the list of my favorite mentors! 🙂
Lower secondary samples give the adaptive sampler more room to do its thing.
To keep it simple, let's assume we just have diffuse noise. Then the number of diffuse rays cast is (diffuse_samples * AA)^2. So diffuse=1 and AA=6 is equivalent in quality to diffuse=6 and AA=1, which is also the same as diffuse=2 and AA=3 (all multiply to 6^2=36 diffuse rays).
Let's assume you need at least 45 diffuse rays to get rid of noise and AA_min is 3. The adaptive sampler would then terminate with the following combinations:
Lower secondary samples give the adaptive sampler more room to do its thing.
To keep it simple, let's assume we just have diffuse noise. Then the number of diffuse rays cast is (diffuse_samples * AA)^2. So diffuse=1 and AA=6 is equivalent in quality to diffuse=6 and AA=1, which is also the same as diffuse=2 and AA=3 (all multiply to 6^2=36 diffuse rays).
Let's assume you need at least 45 diffuse rays to get rid of noise and AA_min is 3. The adaptive sampler would then terminate with the following combinations:
diffuse=6, AA=3 -> (6*3)^2=324 diffuse
diffuse=1, AA=7 -> (1*7)^2=49 diffuse
diffuse=3, AA=3 -> (3*3)^2=81 diffuse
Of course, what's not shown here is that the AA=7 also cast 7^2=49 camera rays while the AA=3 only cast 3^2=9 camera rays. Camera rays do have a cost, but it's unlikely to offset the number of extra diffuse samples from the diffuse=6 case. So in this made up example, lowering the diffuse samples helped improve performance.
diffuse=6, AA=3 -> (6*3)^2=324 diffuse
diffuse=1, AA=7 -> (1*7)^2=49 diffuse
diffuse=3, AA=3 -> (3*3)^2=81 diffuse
Of course, what's not shown here is that the AA=7 also cast 7^2=49 camera rays while the AA=3 only cast 3^2=9 camera rays. Camera rays do have a cost, but it's unlikely to offset the number of extra diffuse samples from the diffuse=6 case. So in this made up example, lowering the diffuse samples helped improve performance.
Previous example was for easy pixels. For a difficult pixel, suppose
we needed 700 diffuse rays to terminate. We would thus terminate as
follows:
diffuse=6, AA=5 -> 900 diffuse rays (AA=4 would have given 576 rays)
diffuse=1, AA=27 -> 729 diffuse rays (AA=26 would have given 676 rays)
OK, in this case we save on diffuse rays, but we do spend quite a bit more on camera rays, so maybe the tradeoff isn't worth it. But, if we had done diffuse=2:
diffuse=2, AA=14 -> 784 diffuse rays (AA=13 would have given 676 rays)
Then we might have been on par. So, fewer diffuse can still help.
Previous example was for easy pixels. For a difficult pixel, suppose
we needed 700 diffuse rays to terminate. We would thus terminate as
follows:
diffuse=6, AA=5 -> 900 diffuse rays (AA=4 would have given 576 rays)
diffuse=1, AA=27 -> 729 diffuse rays (AA=26 would have given 676 rays)
OK, in this case we save on diffuse rays, but we do spend quite a bit more on camera rays, so maybe the tradeoff isn't worth it. But, if we had done diffuse=2:
diffuse=2, AA=14 -> 784 diffuse rays (AA=13 would have given 676 rays)
Then we might have been on par. So, fewer diffuse can still help.
Thiago, thanks for your detailed explanation. My concern is that diffuse is not the only component. If you increase the AA samples, you're also increasing all component samples by that same factor. I know Arnold is a brute force renderer, but this sounds like using a sledgehammer instead of a scalpel. I'm not comfortable with sending out zillions of rays for specular when it's the diffuse component that's causing the noise issue. Correct me if I'm wrong, but there's more than one kind of noise. There's antialiasing noise, and there's raytracing noise.
Thiago, thanks for your detailed explanation. My concern is that diffuse is not the only component. If you increase the AA samples, you're also increasing all component samples by that same factor. I know Arnold is a brute force renderer, but this sounds like using a sledgehammer instead of a scalpel. I'm not comfortable with sending out zillions of rays for specular when it's the diffuse component that's causing the noise issue. Correct me if I'm wrong, but there's more than one kind of noise. There's antialiasing noise, and there's raytracing noise.
It doesn't seem efficient to me to greatly increase the AA samples to get rid of noise in just one shading component. I can easily envision a common scenario in which increasing the AA samples negates any performance gain from adaptive sampling. On a good day, adaptive sampling might reduce render times by 20%. In my experience, in real world scenes, a conservative approach to Max AA samples hit the sweet spot.
It doesn't seem efficient to me to greatly increase the AA samples to get rid of noise in just one shading component. I can easily envision a common scenario in which increasing the AA samples negates any performance gain from adaptive sampling. On a good day, adaptive sampling might reduce render times by 20%. In my experience, in real world scenes, a conservative approach to Max AA samples hit the sweet spot.
You also need to test different settings for the denoiser. I noticed the issue with glass surfaces, which you can get away in some instances by rendering without the glass and another region render with the glass to get that Specular AOV.
You also need to test different settings for the denoiser. I noticed the issue with glass surfaces, which you can get away in some instances by rendering without the glass and another region render with the glass to get that Specular AOV.
Yes Ciro, as Thiago mentioned, this is the only way to have....anything!
I mean, noice for me is something magic. The way that eliminates pixel's
noise is unique and the fact of consuming a lot of precious rendering time.
So for the moment an intermediate solution for me is to keep that denoised
image and copy paste over the regions that I dont see well the materials, the
corresponding sections of the original rendering image.
Yes Ciro, as Thiago mentioned, this is the only way to have....anything!
I mean, noice for me is something magic. The way that eliminates pixel's
noise is unique and the fact of consuming a lot of precious rendering time.
So for the moment an intermediate solution for me is to keep that denoised
image and copy paste over the regions that I dont see well the materials, the
corresponding sections of the original rendering image.
I tried different values in denoiser and in rendering sampling values...
No significant difference. And of course the purpose is not to render a
static image for 5 hours or in a rendering farm to eilimate noise!
I tried different values in denoiser and in rendering sampling values...
No significant difference. And of course the purpose is not to render a
static image for 5 hours or in a rendering farm to eilimate noise!
Hello Petros,
I took a look at how you might get better results from noice in your particular scene setup, and think I may have found a way to do so.
Noice relies on a set of auxiliary AOVs like "Z", "N" and "denoise_albedo". The "denoise_albedo" is a Light Path Expression (LPE) that is currently being defined as: "((C<TD>A)|(CVA)|(C<RD>A))"
What this means is that it separates into an output layer the albedo components of sss (via "C<TD>A"), volumes (via "CVA"), and diffuse surfaces (via "C<RD>A"). I created a mock-up scene with a few simple shapes and a reflected area light to try to approximate your scene and found that this "denoise_albedo" AOV was missing all information about the surfaces behind a glass-like pane.
Here's what the raw RGB output of a few textured spheres behind a glass plane reflecting a thin quad light looks like:
And here's the corresponding "denoise_albedo":
As you can see, there is no albedo information behind the pane at all, which makes it hard for the denoiser to do its job in these areas. If we denoise the output as-is, this is the result:
The same types of blurriness that you're seeing in your textures happens here as well, as most of the detail except in the thickest rings disappears.
Fortunately, you should be able to redefine the output of this LPE to include this same type of data for surfaces that are behind the glass and for reflected lights by adding the following user option (user options for MAXtoA are explained here😞
light_path_expressions 1 1 STRING "denoise_albedo ((C<TD>A)|(CVA)|(C<RD>A)|(C<TS>+<TD>A)|(C<TS>+VA)|(C<TS>+<RD>A)|(CS+[LO]))"
This new light path expression adds the albedo of diffuse surfaces and volumes behind the glass, as well as lights and emissive objects after any number of refractions/reflections, and with these changes the denoised output looks like this, preserving the detail of the reflected quad light and the ringed textures on the spheres:
Hope that this helps!
Hello Petros,
I took a look at how you might get better results from noice in your particular scene setup, and think I may have found a way to do so.
Noice relies on a set of auxiliary AOVs like "Z", "N" and "denoise_albedo". The "denoise_albedo" is a Light Path Expression (LPE) that is currently being defined as: "((C<TD>A)|(CVA)|(C<RD>A))"
What this means is that it separates into an output layer the albedo components of sss (via "C<TD>A"), volumes (via "CVA"), and diffuse surfaces (via "C<RD>A"). I created a mock-up scene with a few simple shapes and a reflected area light to try to approximate your scene and found that this "denoise_albedo" AOV was missing all information about the surfaces behind a glass-like pane.
Here's what the raw RGB output of a few textured spheres behind a glass plane reflecting a thin quad light looks like:
And here's the corresponding "denoise_albedo":
As you can see, there is no albedo information behind the pane at all, which makes it hard for the denoiser to do its job in these areas. If we denoise the output as-is, this is the result:
The same types of blurriness that you're seeing in your textures happens here as well, as most of the detail except in the thickest rings disappears.
Fortunately, you should be able to redefine the output of this LPE to include this same type of data for surfaces that are behind the glass and for reflected lights by adding the following user option (user options for MAXtoA are explained here😞
light_path_expressions 1 1 STRING "denoise_albedo ((C<TD>A)|(CVA)|(C<RD>A)|(C<TS>+<TD>A)|(C<TS>+VA)|(C<TS>+<RD>A)|(CS+[LO]))"
This new light path expression adds the albedo of diffuse surfaces and volumes behind the glass, as well as lights and emissive objects after any number of refractions/reflections, and with these changes the denoised output looks like this, preserving the detail of the reflected quad light and the ringed textures on the spheres:
Hope that this helps!
Can't find what you're looking for? Ask the community or share your knowledge.