How to make milky-glass for lights?

I am trying to make this wall light with the glass having milky like this one:

I have tried this set-up and it achieves what I want, but even at 10,000 strength, my room is not lit.

I don’t want the tube, which is emitting light, to appear.

I have no clue about why and what those nodes do, so I just played with them. How should I set up those nodes to achieve the result?


You would really want to avoid lighting a scene through a translucent material for perfomance reasons. Depending how big the lamp is in your scene I’d fake this by emitting the light directly from the glass.

Can you tell me what’s the reason? Does it slow the rendering or something else? The lamp is small, not big :slight_smile:

A basic material for that is a mix of diffuse+translucent+glossy (the exact amounts are too complicated to explain, but you can use layerweights and rgbcurves to approximate the result.

However, the main problem is that your light source becomes ‘hidden’ behind a material like that. When Cycles is sampling some point in your scene, it tries to hit your light directly from that point to check how much light it recieves. If in between it finds a material that blocks/bends the ray, the chances that the ray will hit the light source are very low.

To overcome this, and since the light is completly hidden behind the milky glass, is to ‘pass’ the light to the glass itself.
So you can add an emission shader to the previous diffuse/translucent/glossy mix, and make that object emissive.

Tracing light through translucent materials is much more to calculate then not doing it. It’s okay to do this if the lamp does not contribute much light to your scene but if you want to basically any ray sooner or later going through this you would have to bump up the ray depth to get enought light out of it.

Making it realistic and so dense that you can’t even see the shape of the bulb in it won’t make you happy unless you are taking a close up hero shot of the lamp. I’ll give you a faked example once I got time to do it :wink:

I am trying to apply the emission to the glass itself like you and other fella recommended, but then it will make the glass shine. I want to achieve a milky glass emitting light. :frowning:

So that’s a quick mockup of what I would use if the lamp is not in the focus of attention (only the emissive shader). To tweak the milky glass look you can try playing around with the gradient, color ramp and emission strength.

lamp.blend (541 KB)

Edit: When turning the lamp darker you indeed might want to mix in some diffuse und gloss. Translucency will only become noticeable if you go really low.

I did this test a while back to show the difference between scenes lit using a light behind a translucent and a straight emission.

The material in OPs reference is diffuse + glossy via fresnel, as unlit.
If you light it, simply add an emission shader to it.
Unless you for some reason need to have it extremely dim or slowly get lit, you’re better off disabling everything except the emission shader, as combining can lead to horrible fireflies that are hard to tackle.

For lamp shades etc, I’ll even create a fake “translucent shadow” (from the holder strings) on the shade itself that helps makes it look less fake, as well as using top/down gradient for the strength. It looks very much like a translucent shadow effect but it’s pure emissive.

Here is an example of mentioned lamp shade and how I just fake everything rather than try to rely on accurate physics which I simply don’t have time to render cleanly. There is no bulb or internals in this one, just the tapered cylinder and base:

Hopefully the framing and labeling of nodes help explain the thinking process about what’s going on.

Thank you for the suggestion Carl, your result looks great. I particularly like the “fake string shadow” effect you created. I’ve only been using Blender for a month or so so I’m still trying to understand how the nodes work but I’ll play around and see if I can get something similar to what you have.

Here’s where I’m at now: