Blenders Shaders Improvement Suggestions

About the -

–Principled BSDF:

So I’ve used the Principled BSDF shader to make a wet puddle using the clearcoat option. I’d like to know if the clearcoat rendering algorithm is energy conserving ( the clearcoat layer would reflect some light, so the layer underneath would receive less, should be most apparent for the diffuse), because it seems to me like it doesnt respect energy conservation. Also the clearcoat should have its seperate IOR setting because water is 1.33 not 1.45 or higher, so it makes a difference at the end of the day, possibly making the water layer look less like transparent plastic.

–Subsurface Scattering in Principled BSDF:

I’d like to see an option for a rendering method for subsurface scattering that considers geometry inside of a mesh to block light, at the moment neither Christensen-Burley nor Random Walk do this and once an object enters inside, it seems to disapear as it no longer creates a shadow. A more advanced SSS method could be used for rendering things like bones, organs and other stuff that block internal light scattering.

-Iridescence in Principled BSDF:

It would be good if theres was an iridescence rendering option added for more rendering posibilities. Also specular tinting should be expanded so that you could add a tint texture with different colors. This would be useful for something like oil because oil has varying reflection colors based on position.

I named this topic like this for the possibility of adding more suggestions in the future for shading.

There was a thread on the clearcoat behavior recently, and the conclusion is that it’s not energy conserving because it’s applied by way of simple addition.

For a properly conserving shader with a clearcoat, you will need to construct your own using the individual component nodes or find a user-made group node.

As for SSS, this has always been a limitation of surface-based SSS shading. You will want to make use of the volume nodes with a transparent or translucent surface (but at the cost of not being able to drive things like density with a 2D texture).

2 Likes

Principled BSDF: Topcoat roughness issue should be fixed.

Principled BSDF: Is sheen handled correctly?

Principled BSDF: Topcoat is simply added, same as the reference. Unless engines does it otherwise or reference method has been updated, this should stay the same. The idea is to have similar outputs to common target engines. No need for IOR, the amount slider does the same thing as specular amount - just increase it from 0.5 if you want more. Reason I don’t think it matters much to have this one energy conserving, is that the diffuse albedo is usually low enough that this doesn’t matter, and that most people don’t reduce the specular when using topcoat in the first place as we’re supposed to - meaning that specular below topcoat is reduced to near zero (not for metals because metal IOR is so high). Tint sliders should be left untouched. If anything done to the Principled BSDF, it should maybe be to be able to select metalness and specular workflow, where specular workflow would allow you to set specular color. The tint sliders aren’t meant for this. Note that DisneyDiffuse is also not energy conserving, whereas Lambertian Diffuse is. This I think has a far greater damage potential than specular which mostly affects the rendered pixel and not so much energy transport through bounces.

Velvet BSDF: Should be possible to set directional and rotation values. Currently we can only make materials with a straight cone/nub. Many fabrics are impossible to create. Either that or a new dedicated anisotropic velvet shader with a 0-180 degree min/max compared to anisotropic glossy shader which has 0-90 degree min/max.

Fresnel node: Roughness input and a switch to toggle thin/double-sided.

Layer weight/Fresnel: The value slider should have the same range response as that in the Principled BSDF. Although I rarely use this convenience gadget, it would make sense for consistencies sake.

Refraction node: Switch to make shadows transparency shader based.

Iridescence shader: New shader to handle this phenomenon. The purpose of Principled again is to produce comparable results to game engines, not a grand solution to absolutely everything we can think of.

Metal shader: New shader to handle metallic aniso/glossy, based on dropdown to select single color, face/edge color, or complex fresnel n/k values.

Glossy/aniso shaders: I would also like GTR distribution with custom tail. As well as to implement newer research to support phenomena as hazy gloss in a single shader call, specular microgeometry with wave optics and so on.

Nested shader: New shader to handle nested dielectrics interfaces (i.e. air-glass-liquid).

Texture: Warp and weft generator.

Texture: Gabor noise generator.

New Material: Dropdown that enables you to create a variety of common and complex shader setups, done the correct way. Like principled empty, rough fresnel manual, complex absorption (diffuse, velvet, sss, translucency, refraction, transparency) with fresnel interface, hair, volume, various utility shading tricks and so on.

Most of this would require some heavy discussion.

I made a comparison for a more realistic top layer response. This only showcases the diffuse difference, not the reflections (which would also decrease, exponentially). Without energy conservation, the material reflection is two times as bright than it would be if it was energy conserving, which is a HUGE difference. Also if the “clearcoat” value acts as a multiplier for the intensity of it, its physically incorrect, because it would also decrease the intensity at grazing angles, which is not what would happen. A seperate IOR value would be needed to keep the results accurate.

“Principled BSDF: Topcoat roughness issue should be fixed.”

Whats wrong with it?

I thought this particular clear coat behavior was a specific decision by Disney in the construction of their principaled shader, and everyone else follows along for consistency. From one of their papers:

“ For our clearcoat layer, we use a fixed ior of 1.5, representative of polyurethane, and instead allow artists to scale the overall strength of the layer using the clearcoat parameter. The normalized parameter range corresponds to an overall scale of [0,0.25]. This layer, even though it has a large visual impact, represents a relatively small amount of energy so we don’t subtract any energy from the base layer. When set to zero, the clearcoat layer is effectively disabled and incurs no cost.”

3 Likes

The implemented GTR distribution (page 15) is problematic for Blender. You can’t map i.e. scratches to the topcoat with a higher roughness and have a smooth transition. Try assigning value to topcoat roughness 0.017, then change to 0.018, and there is a massive change. Still, the topcoat implementation is quite limited so I practically never use it, but use my own node group.

Why would they use GTR anyway if theres no way to change the value of its components. Kinda defeats the purpose I think. And yeah, I only now just found out about this problem. Seems to be present for the main surface when adjusting the roughness value aswell.

They use γ=2 (makes GTR same as GGX) for main first lobe and γ=1 for second topcoat lobe, producing a wider tail. What happens in main specular is barely visible and I really don’t care. But the second lobe due to its wider tail (?, not sure) the effect is extremely visible. But still, without thickness and angle darkening it’s not that great for me so I rarely use it.