Rendering problem / artifacts on surface

Hello,

I am trying to render a interior archviz shot.
Everything looks good so far, except for the couch.
This is a model from the “Interior Models” pack.
https://superhivemarket.com/products/interior-models

On the pictures you can see a nice clean surface and then some strange darker wrinkles.

additional info:

  • blender 4.5.2
  • cycles “supported” mode
  • nishita sky / also tried hdr instead
  • denoise quality “high”

The more samples the worse it gets.

4096 samples:

Do you have an idea what could cause this strange artifact?
Setting the rendersettings to “final” leads to a clean render - but what exactly causes this problem?

regards
Triac

Welcome!

You need more “min samples” in your render settings. Interior scenes are noisier and harder to render than outdoors and benefit from more min samples so the noise treshold can work correctly. Instead of the default 0, try 128 or 256.

Explanation:

The purpose of the noise treshold is to speed up the render. It does this by deactivating pixels from the render when they fall below a certain amount of noise, so the rendering time isn’t wasted on parts of the image that are already clean.

For this deactivation to work properly and without artifacts, you need to use min samples, they give some time for the noise to be analysed before pixels start to be deactivated. If there aren’t enough min samples, the noise could be analysed poorly and some pixels will be deactivated too soon. This leaves gaps in the noise pattern that the denoiser can’t deal with very well.

Noisier scenes like interiors need more time to be analysed because they have more complex and uneven noise. Some areas can be so noisy that they can be misjudged as clean because parts of the noise haven’t even appeared yet when the treshold starts disabling pixels. If you leave the min samples at 0, Cycles picks a number for you based on a fraction of the max samples. The number it picks will not necessarily be the best depending on the scene, so it’s good to pick one manually.

For my sampling settings, I like to start with:

treshold: 0.02
max samples: 1024
min samples: 32

This gives good results in most scenes. For an interior, I would switch the min samples to 128 or more if needed and maybe increase the max samples too.




There is also something else I would check. Is the scene just noisy in general? lots of interior scenes are and finding ways to generally reduce noise would help your problem too.

  • Is there light entering the room through a window? Make sure the glass material has its shadows disabled. Cycles isn’t good at passing light through glass materials.

  • What kind of light sources are you using? Light objects are generally less noisy than emissive meshes (unless maybe the light object is textured). If you have some mesh lights that can be replaced, it could help.

  • Are there light sources hidden at the bottom of holes or inside a tube of some kind? If there are, use spot or area lights with their angle limited to the size and direction of the opening. A point light would waste lots of time and samples trying to light the scene through the surface and that would cause noise.

  • If there is light coming in through a window, is it soft ambient light or a hard beam of sunlight on the floor? If it’s soft light from the sky background, you can use a light portal in the window to reduce the noise. A hard beam of sunlight on the floor is sadly a weakness of Cycles and just needs lots of samples (unless you are willing to cheat the lighting in more complicated ways).

Can you share what it looks like in material view not render view?

Those are some rather large artifacts.

It’s hard to imagine that coming from the render.

Thank you for your quick feedback and the detailed explanation - increasing the min samples was the solution!
Strange was that the wrinkles only affected the couch - a material preview looks like this:

For my interior and exterior scenes the lighting is built with an enviroment hdri or nishita sky and sometimes theree are some lamps with emissive material, spot lights or area lights. In the most cases the brightness is good enough to get clean renders without too much noise.
Already checked Light Path / Is Shadow Ray - this really helped a lot

The next Step is rendering an animation with wind blowing through the curtains. In this case I see flickering caused by the denoiser.
Do you recommend using "un"denoised renders → Davinci Resolve or is there a better way in blender?

It makes sense that it would affect the couch, because it’s a semi-glossy material. Those tend to be especially noisy.

I see there is a curtain in front of the window. Did you also use the light path trick on it? It could be beneficial. If you don’t want the light just plain going through the curtain, make the transparent shader gray instead of white in the trick so the curtain maintains a certain level of shadow. It’s just that Cycles can sample the outdoor’s light directly through a transparent shader in a way it cannot through a translucent shader or whatever you are using.

I don’t know if you have noticed the same thing as me, but Nishita sky seems quite a bit more expensive to render than an HDRI background or the other sky models. Maybe it’s worth it to you for the realism it gives, I find it often isn’t in an interior scene where you barely see the difference.

Something that really helps a render is simply to increase the resolution.

-1 Set the render resolution to 200%

-2 Decrease the samples / increase the noise treshold so the render doesn’t take any longer than before. You can get away with lower sampling quality because the extra resolution adds quality to the render by itself.

-3 If needed, decrease the resolution back to your intended values in a video editing software after rendering.

The denoising quality will be better even if you reduce the resolution after the fact. Any flickering will be finer and harder to see and texture details will be better preserved through the denoising.

A bit disagree with others, but only my inho.
If you want no flickering on animation you need to turn off Noise Threshold.
And overall noise threshold just gives a complete garbage result in blender with denoiser. (blender 4.5)
Like this is what you got with dark almost no-lighted corner with only 64 render samples without threshold.


And this you will get with 256 render samples with .05 threshold and 64 minsample for example

So my suggest is to set Noise seed any number, but not 0 (very important). Turn off Noise threshold, render 1 frame to tweak render sample to be satisfied with render time/frame and be happy with no flickering animation.
image

I think you are getting those results because you are falling into a gray area between 2 rendering methods.

Your render without treshold looks nice because you have so few samples the denoiser is able to just blur everything. This can work for an animation, at the risk of having low-frequency flickering and patchiness in the lighting and general bluriness in the textures.

Noise treshold is useful to speed up a super high quality render with thousands of samples, one that barely needs any denoising when it’s done. 256 samples isn’t enough to benefit from the treshold, you are just going to create a broken render.

So either:

Fast, “good enough” rendering for animation,
2

or

Perfect, high quality render.
1

But you can’t really do something in between. They shouldn’t really be compared in my opinion.

The settings I just posted should instead be compared with a 2048 samples render without noise treshold. Because in that case, they will look almost identical, but the one with the treshold will be faster.

Why is that important? It will move the noise pattern, but it won’t reduce the noise in any way.

To my knowledge, there are 2 things that can be done with the seed.

  • Change the seed each frame so the noise pattern looks like film grain and is less visible. Mostly useful if rendering without denoising.

  • Add more samples to an already completed render. You re-render a second time with a different seed, mix the 2 images 50/50 and it will be like you rendered with double the samples.

Yeah i understand your point, and you are right and i fully agree with you here when it goes to rendering with high amount of samples the single frame just to make picture. But i was speaking about rendering animation where you dont want to spend 10 minutes to render one single frame if you are not making some really awesome cleanest picture animation.
But when you do like fan made animation or whatever and have to render few k frames at 4k resolution even on 4090 you will drastically drop your sample rate to like 64-256 (based on scene complexity ofc) to render each frame for 10-30 sec because you dont want to wait eternity.
And on these low samples noise threshold is a huge devil because:
• pics above
• it cause flickering

It wont reduce the denoise, but exclude sampling randomness.
This is extremely important because it literally makes noise pattern the same through all the frames making denoiser have same pattern through all the frames on animation viping out any flickering. Its like the same as denoiser would read previous frame. (spoiler in most cases you can barely see the difference even between 128 and 4k sample render unless you zoom 50x)

The thing you need to turn off noise threshold (as i understand) because apart of noise seed which is have like global pattern, - noize threshold has like local algorhythm running each frame individually and on one frame it thinks that this wall is okay with 321 samples while next frame it thinks its okay for 32 samples and it completely breaking overall noise pattern.

So turning off noize threshold would drastically improve animation picture stability when using denoiser.

Just render few frames animation with 0 seed and the same with any number seed (with turned off noise threshold ofc) and all your questions would fall off

That’s not how seeds work. The number you put there has no relationship to the output, it’s a non-deterministic hash

This gives me the exact same result for both, with the pattern just shifted differently. Are you sure you weren’t using the “use animated seed” button? It’s the little clock icon next to the seed.

Which is why the min samples are important, they give a floor in the number of samples. Of course, that’s also why you won’t benefit from the treshold unless you are rendering with lots of samples.

What I really like to do in those kinds of scenes is bake the lighting to 32-bit textures on the biggest surfaces like walls / ceilings and floor if possible. It can have a drastic effect on noise and render speed and greatly improves temporal stability in an animation. Even better, it improves the render even for objects that aren’t baked, because the indirect light they receive from the baked walls becomes much cleaner and faster.

This is much more complicated than the usual advice I would give for rendering a scene and you need a good understanding of baking, lighting and materials, so it’s not for everyone.

Here is the same scene rendered with the same number of samples, except the cleaner render has the diffuse component of the floor material baked to a 32-bit texture (basically, the floor is replaced by a purely emissive shader with reflection on top). It especially helps with this kind of difficult scene (spot of sunlight on the floor of a room).

The cleaner render was about 1/3 quicker too and that’s just the floor.

And if the floor needs to receive moving shadows from a character, this trick can still be used to a lesser degree with a little variation, by using the light path node in the material to make the bake visible only in the second bounce.

Yes, i know, my english is just very London, so i explained as i could :slight_smile:

But as you can see im my previous pics the difference between just 64sample render and turned on noize threshold with 64minimum sample is drastically differs between “okay” and “wtf is this” while on both of these renders the wall had 64 samples with denoiser

Yes i know how noise threshold works, but once again, i were speaking about getting denoized animation without flickering without baking things or anything else, just scene and lighting.
I was just pointing that the turned ON noize threshold is giving flickering to denoiser by default. You can render up to 4k samples, but the flickering would not disappear on animation when you use denoiser.

Im not trying to argue or insult any1 or prove youre wrong. Im just saying that using noise threshold when rendering animation is a huge NONONO if you use denoiser and want stable picture.
The key point i wanted to bring is for rendering animation with denoiser u need to insert seed number to “stabilize” noize pattern and turn off noize threshold as it breaks noise pattern if you want your animation have 0 flickering

I’m not disagreeing either. In some situations, increasing samples can make a scene harder to denoise, especially with the noise treshold enabled but not enough min samples, so it doesn’t surprise me it reacts like this.

If you use the treshold in this kind of scene, you might need more min samples than 64 for the treshold not to wreck the noise pattern when it activates, so yes 64 pure samples will give better results.

This is a interresting discussion - it took me some time, but I tried all your suggestions.
None of them lead to flicker-free animations. The flickering got lighter but never dissapeared.

I also tried temporal de-noising according to a youtube video from “stx vfx” wit hthe title “De-noising flickering animation (temporal de-noising) and tips!”

I tried several different methods:

  • rendering with 200% resolution and scaling down afterwards
  • setting seed to 8 and disabling noise threshold
  • rendering noisy images and importing them
  • denoising them with the experimental blender animation denoise operator

image files were saved as exr multilayer before re-importing them.

I thought this will be one of these typical small problems, just a check box…

What else can I do?

Still Images look good, but animations look AI-like…

This is indeed a very difficult and infamous problem. Big studios solve it by rendering each frame for hours with a massive render farm, until denoising is barely even needed at all. That would probably be way too expensive for a single artist, so the alternative is to find ways to reduce noise and accelerate the render instead.

Before anything else, I would verify the color of your room’s walls. Make sure it isn’t excessively white, because that will cause extra noise. Blender’s colors are exponential in their brightness values, so the default of 0.8 is actually super bright white. A realistic value for a white painted wall is more around 0.7. It’s better to make the materials a bit darker and boosting the light if needed.

Apart from that, I know exactly how I would solve the problem, it’s just a bit hard to explain and a somewhat janky workaround where I will twist Cycles into doing something it’s not explicitly built to do.

If this is your first time meeting this problem, I will assume you don’t have extensive experience with Blender, so I will do my best to explain my solution step by step, making you follow along with a similar scene.

So, my thought is to cheat the lighting a little by baking it on the curtain, basically turning the curtain into an actual light source instead of relying on bounced light.

1- We start with a room with a curtain. I don’t know exactly what shader you have, my curtain for this example is a pure translucent BSDF, but the same will work no matter what you use. This is rendered with 16 samples and all the following images will be too for best noise comparison.

This is very noisy because the curtain is very bright and acts as a light source, except that this light source is located entirely in the second light bounce. This means there is no way for Cycles to know in advance the curtain is supposed to act as a light source and that it needs to be sampled like one. The only light rays that will find this light are the ones that happen to bounce that way by chance, most light rays will fail to do anything in this scene and the result of that is noise.

2- Make sure the curtain has even polygon density and a unique material that nothing else in the scene shares. If it shares a material with anything else, make it a unique copy for the curtain, because we are going to modify it later.

3- With the curtain selected, go to the object data and add a new color attribute. Keep the default settings, they are fine for what we are about to do.

3

4- Go to the main render settings, to the bake section. Keep the default bake settings, but change the target to color attribute.
4

5- Hit the bake button. Because we are baking only vertices, it should be pretty fast, so you can have a decently high number of samples in the render settings if you want. The result won’t be directly visible, so it’s fine if the quality isn’t perfect though.

6- The curtain’s lighting is now baked to vertex colors. If you go into vertex paint mode, you can see the result.

7- Now, go to the curtain’s material and add this setup at the very end of the material, right before it goes into the output.

Now, the trick is fully setup. The curtain will look the same it always did to the camera, but every solid surface in the scene will instead perceive it as an emissive mesh that looks just like the bake and will know to treat it like a lamp.

Here is the render now. try downloading the 2 images and flip between them and you will see this new one is less noisy. It does look slightly different, there is more light on the wall, but that doesn’t strike me as unrealistic.

8- If you wish to change the lighting of the scene, the bake would need to be redone for the trick to still work. Unplug the setup in the material before redoing the bake, or you will just layer the old result over the new bake.




Now, doing this with the curtain is nice and already helps, but this trick can be pushed even further if you want to try. Chances are you are getting a patch of sunlight on the floor. That patch would have the same problem as the curtain, acting as a light source that Cycles doesn’t know about.

I am going to push my example further by doing the same thing to the floor too.

I separate the floor, making it a unique mesh with a unique material shared by nothing else in the scene. I subdivide the floor so it can support a vertex color bake. No need to go very fine.

One difference I will make for the floor is to create the color attribute in “face corner” mode, so the bake can better reach in the corners near the walls.

The bake’s result:

And here is the noise level compared now with both the curtain and the floor using my bake trick.

Not only it’s getting cleaner, but doing the floor also reduced the render time (because rays that hit the floor are immediately resolved and get to finish sooner).

And just to show how crazy this trick can get, here is with everything baked. You wouldn’t bake everything in an actual scene, way too much work, but the main walls and ceilings are realistic to do.

This is still 16 samples.

This is a fantastic guide to a really clever technique, thanks for sharing!

It has saved me in multiple projects. I originally learned it from a tutorial that no longer seems to exist that was the only source I ever found for this idea. It makes a lot of sense if you understand how Cycles processes light, but most users don’t have enough understanding of it to come up with this idea.

Some renderers have the capability to do this natively without any trick. Luxcore has the feature built in with its photon cache, it preprocesses the light before render and then does exactly the same as my trick.

Were you around for the radiosity era? Pre cycles, it was the only way to get any sort of global illumination. It was pretty similar to this technique, but jankier!

I was around for the very end of it, but never got to the skill level to use it before it was removed.

I did however learn a lot about rendering using Mental Ray. That renderer worked using a final gather based GI, which is similar to this too.

If you like this technique, I actually use an even more advanced version of it for myself. It’s really janky and crazy, so I won’t fully explain the detail and I don’t expect anyone to attempt it, but it allows to bake an entire scene at once even if it has hundreds of materials and objects and the trick is entirely contained to a single object that can easily be deleted.

It needs about 10 minutes to setup if you know what you are doing and can easily halve the render time in an indoor scene. This is my single craziest and most advanced rendering method.

What I do is:

  • Make a duplicate of the full scene, but exclude light emitters or windows.

  • Remesh it into a single object (with adaptivity to save on polygon count). Inflate it a tiny bit so the duplicate is just barely hovering above the original surface, coating the entire scene.

  • Give it a refraction BSDF, set the ray visibility to camera only, then bake to vertex colors on it. The bake will see right through the material and store what it sees: the entire scene’s colors and lighting all at once on a single object.

  • Once the bake is completed, I disable the ray visibility on the coating for everything but diffuse rays (maybe I will leave glossy too if the results are good).

  • I then setup the material on the coating object so it’s visible only from its front faces and only beyond a certain distance from the surface to avoid artifacts in corners. That way a ray that has just bounced from a diffuse surface will ignore the coating on its way out, but will hit it on the other side of the room.