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.

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

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.