Cycles Mesh Emission Too Noisy For Production

Hi All,

I have been messing around with trying to emulate a light bulb in Cycles. However, after several days I am still no closer to producing a final render. All my renders are too noisy. I want the entire scene to be lit by the light bulbs only. I also have cobbled together a node tree to limit the range of the light bulbs so they have “real” fall off and produce hotspots on the floor or geometry. The emission material is applied to the bulb filament (which is fairly small). The bulb glass is a mix between glossy and diffuse controlled by a Fresnel mix factor.

I am posting the scene if any of you node gurus want to take a look or have advice?

Here is what I get after 9000 sample render.


Here is what I get after 90 sample render.


So the sample time does not seem to be the problem. I can’t just wait and it will clear up.

Can Cycles emulate a light bulb to produce a clean render or is this simple task beyond our new favorite render engine?

Attachments

27_noisy_emission_light.blend (734 KB)

It is caustics?

There are no caustics in the scene AFAIK. The materials are really basic.

Here is the node tree for the lightbulb filament.


Here is the node tree for the lightbulb glass which does not even use the Glass shader.


You have No Caustics unchecked, but I think there is a lot more wrong with this file. I’ll get back to you when I wrap my head around what you are trying to do. :slight_smile:

Hi Atom, I tried myself.

1000 samples, without clamping.

Try to compare your setup with mine.


Attachments

Lamps.blend (775 KB)

@Cherryman: Thanks for the feedback. I am looking for a bit more control over the light range, however. My project requirement is that the lamps drop off to dramatically to near black. That is why I added the Transparent shader to my Emission shader (posted above). I need a way to shorten the distance that light travels from the emission source. The Ray Length is connected to a Multiply node followed by a Color Ramp. This offers some UI control over modifying the length of the ray. This is used to mix in Transparent so as the ray reaches further into the scene it become transparent instead of emissive.

After typing the above I thought maybe the problem is in just what I described. I am using raylength to mix to a Transparency. Instead, I modified the shader so that it mixes to a 0.0 strength black color Emission shader. This does seem to cut down on some of the noise but even with clamping I get a lot of fireflies.


@ Atom.

Yes I understand your goal.
My suggestion is to take my setup, and add your light solution to it step by step, now you might be able to determin the source of the noise by eliminating.

PS. It might be cheating but you could also look into negative lighting.

Good luck.

This is a nightmare scenario for any (unoptimized) pathtracing engine…
A standard pathtracing implementation shoots out rays from the camera and lets them bounce until a light source is reached, upon which the total accumulated color is multiplied by the emittance of the light source and added to the framebuffer. You have a few very small, very bright light sources in a large room: The probability of rays hitting such a small light source is extremely small, making the convergence extremely slow. And multiple importance sample becomes useless with so many tiny light sources using it.

So, you might be right in thinking that Cycles is not the most suitable tool for that kind of scene.

So, you might be right in thinking that Cycles is not the most suitable tool for that kind of scene.

So which render engine should I use?

The probability of rays hitting such a small light source is extremely small

By making the outside of the light bulb glass the emitter, instead of the filament, the probability goes up. This makes a cleaner scene, however now I have to get rid of those white bulbs and replace them with the original bulb.


Atom,

Just some initial ideas:

Can you not use the ray visibility flags on the emitting bulb surface objects?

(Try unchecking camera, transitions and shadow for the emitters
and
Try unchecking diffuse and shadow for the bulb objects. The ones you want visible in the camera)

…or, you could try using lamp objects as well (old school).

Other than that, you could comp two renders together to swap out the bulbs.

Note: this is a case where bi-directional pathtracing would probably work better, not so sure about metropolis sampling though…

For your bulb swapping problem, this is perhaps something that you would need lightpaths for.

As in, the bulbs have a transparent or glass shader that is visible only to the camera rays and primary reflections (with much of the GI rays seeing them as solid emitters). I believe there are some lightbulb setups deep within the forum that do something like this with excellent results.

If you really need to have the filament itself emit the light, then you will need to use a render engine that has bidirectional path tracing functionality (which for FOSS options either means Luxrender or Mitsuba).

Simply put cheat a lot :slight_smile: That means make the bulbs only visible for camera, maybe render them separately so that they don’t affect the rest. The effect you’re after is simply simulated with a spotlamp. So use them as the main source of light.

See this .blend file for a basic filament-lamp setup.

The big “light emitter” mesh has all ray visibility except diffuse disabled. It will actually shine, but is invisible. The filament is the opposite, diffuse is disabled but all other visibility is enabled. So when sampling lighting, Cycles will use the big, unblocked, and easy to hit “light emitter” object. But the render, reflections, and so on will instead use the tiny filament instead, which looks a lot prettier. You can do this in the shader with the light path node as well, but it isn’t as optimized.

lamp_trickery.blend (773 KB)

Also, try branched path, it can sample all lights at once which may be helpful (or not, see how it works).

So I cloned the master scene. In this new scene I converted all the bulb mesh emit materials into glass. In the original scene I turned off the seen by camera on bulb emit. This does remove the bright white globes but still leaves their contribution in the scene. I set different object IDs for the bulb glass and bulb emit meshes.

In the compositor I mixed them all together. There are still some problems, like I can’t get the glass to render clean, other noise and long render times. Thanks for all the tips. I am going to take a look at the lamp_trickery.blend and maybe try out the spotlight as mentioned.


As others have said, this is quite literally a worst-case problem to solve with a renderer like Cycles. BiDirectional rendering will reduce your render times a bit, but this is going to be a LONG render no matter how you try to approach it.

How about this:

First of all - use Branched Path Tracing as you are dealing with many light sources.
Material setup:
Leave your filament as you had in your original setup (small emitting meshes) and play with glass material of the bulb.
Use Light Path and set all up so that the bulb is GLASS only for camera. For the rest make it pure white TRANSPARENT.

Could you try it? I’d love to see if this helps at all.

@Bartek, I’ll give a try, but my hard drive is failing (bad blocks) so I have to deal with that today.

I did try out Lux, Mitsuba and even Yafaray, yesterday. They all have exporters that fail using 2.71. The exporters seem to be behind compared to the official release. Bi-directional may be the way to go I just wonder if Lux has any GPU support. they always claimed but I could never get it to work on my hardware.

Use Light Path and set all up so that the bulb is GLASS only for camera. For the rest make it pure white TRANSPARENT.

So would this be a mix node between glass and transparent shader controlled by IsCamera ray?

Yafaray runs without issues here on 2.71 with linux Ubuntu.

lux’s exporter works fine for me in 2.7.1, you will need to use one of the recent weekly builds.

@Atom
try to change the bulb glass material to something like this:

It should solve the problem with the lighting of the scene, but still have the bulbs visible to reflections or other ray types.