Hey CG folks! I have some troubles with Blender’s way of rendering Transmission shaders. They’ve always looked really dark for some reasons. Especially for eyes etc. So I ran a quick comparison between Arnold and Cycles…
The shaders are as close as it can be. Same amount of bounce etc. With the Uber shader.
Full white transmission on both.
I tried to find some clues about what’s happening but I really don’t understand what’s going on…
Am I doing something incorrectly ?
Looking close, it seems clear that the Arnold shader is not only a little less reflective, but has a light application of diffuse shading as well (which explains why it looks a little milky on top).
In addition, Cycles by default selectively terminates some samples as soon as they bounce, for glass rendering you will want to raise the min bounces parameter to at least 4 or higher. You should also make sure caustics are enabled (or otherwise you will get a lot less illumination in cases that rely on bounced specular light). Make sure the ‘filter glossy’ value is at least 0.10 if you want to see some paths that would otherwise be missed.
If that is not enough, Cycles X is slated to get an algorithm known as path guiding, this should mean much better results for images with difficult lightpaths.
It’s almost the settings I use al the time, and for me they should have been the same. But maybe the ray depth in Arnold is not equal to the max bounces in Blender. I ran an other test and I had to crank the Glossy bounces up to 119 to make the darks spots disappear. Which is insane.
You can get it with way less bounces with a simple lightpath trick: switch to a Transparent shader (or just alpha 0 as in the screenshot) after X ray bounces.
I’m not sure to understand how it works exactly. But even the reflections looks much more like Arnold. Here it’s with 10 glossy bounces. Really good trick !
Mmm interesting, maybe Arnold has this trick hardcoded for glass shaders?
It works like so:
The black spots we get with glass objects are due to paths entering the glass and bouncing inside its glossy surface, soon reaching the ray limit. Beyond that limit cycles hits solid black.
But we can cheat and tell cycles that: if the raybounces on this material are less than X the math node sends “1” into the alpha input of the principled bsdf node. When the bounces count reaches X the whole shader becomes transparent (alpha 0), and the ray can go “outside” the glass.
Don’t forget to add some green volume absorption for (most) glass.
It doesn’t have to show in transmission or shadows, but it will show along the rim due lone ray lengths while undergoing total internal reflections and anything coming though will be tinted.
Thank you very much for all these precisions !
It helps a lot
So there is is no real ground truth then.
But your solution is perfect, I’m not losing too much glossiness and the refraction is the same!
Yes I saw that on the previous messages that Isscp used an absorption shader as well!
It bring a bit of darkness tho but it’s a nice touch to add at the end
Thank you!
I have an issue with the Alpha version I’m using for an object where I need glass (curved clock lid with thickness) I’m not able to use LightPath/isShadowRay to control a Transparent shader. Even using that shader only also creates shadows from the glass - I have no idea what is going on. Shadows aren’t actually important for me on this one, so turning off Ray Visibility/Shadows did it for me.
I put the light bounces up to about 50 on things like glossy, transmission, transparency if i want to get rid of the dark in glass. Set the glass roughness to very slightly above 0. I also add a bit of metallic to it, and set the white value to full white and a value of 1.05 rather than 1.0
These are just some of the various tricks i’ve came across. maybe crank up the indirect light clamping to something very high as well…
I think as long as you are using modern GPU, adaptive sampling and AI denoising, the days of needing to limit your bounces to stop hrs of rendering time are gone… Its going to make very little difference, lets face it your render will still be done in minutes.