Problem with the Accurate Fresnel nodes from CynicatPRo

So It starts with normal Fresnel but makes it so that the effect is toned down with roughness to be more realistic.
HOWEVER. This is only the edge value. The rest of the surface remains at about 4% reflective regardless of roughness which does not sound right. Nor does this look correct from my testing. What seems to work alright is adjusting it so that the rest of the surface Fresnel is also toned down. But is this right? Do you concur. I know that the normal tweak from CyicatPro does not look right due to the unchanged rest of the Fresnel effect.

I don’t know what “Accurate Fresnel” means, do you have a snapshot? I setup my own version, probably based on his, a while back. And the behavior is [4x%, 100%] which is then reduced to [4x%, 4*x%] as roughness increases but in a non linear fashion (root of 5 I think). x > 1 allows some artistic control over F-0, but usually never below 4%. Below 4% I wouldn’t even use a PBR material but rather glass or some custom glass variant.

Anyhow, I would wait and compare results of normal^5 reduction with the upcoming fixed fresnel implementation. I’m guessing that one has been done right this time around. I’m not an expert on how this is “supposed” to work, I just took his word for it, supported by some papers I read back then. But the default fresnel looked horrible causing glowing edges effect. I haven’t tried the updated one yet.

What is this new fixed Fresnel? Links?

On phone right now so difficult. I believe handlede by upcoming multiscatter and metallic shaders. But havent tried them out myself yet.

That’s a separate thing from fresnel, it fixes the darkening at high roughness values. It’s especially noticeable with frosted glass materials.

f0 = 0.04 corresponds to an IOR of 1.5 or so and is indeed correct. (wet materials will have a value closer to 0.02 if I remember correctly). What makes you think it is not right? Are you sure your roughness value isn’t just too low?

Btw, if you need to convert between f0 and IOR, here’s the formula formatted for wolfram alpha:


n = (sqrt R + 1)/(1-sqrt R) where n=1.5
n = (sqrt R + 1)/(1-sqrt R) where R=0.04

(using R instead of “f0” for simplicity here, but they’re the same thing)

Also, if you want more info on what exactly f0 is: http://www.filmicworlds.com/2014/03/17/fresnel-f0-is-not-direct-reflectance/

Yeah, I’ve tried it out now. The new stuff only deals with darkening as mentioned, so custom fresnel is still required.
Nice formula that I wasn’t aware of, does indeed seem to give correct and anticipated results. Sorry to have caused confusion :slight_smile:

Next to that, it also handles Fresnel at multiple angles (due to roughness), linking the two.

Before, a single Fresnel value was used for a certain angle of incidence, regardless the distribution of angles that are caused by the roughness. With the new materials, a Fresnel value is calculated for every ray that is shot from the distribution of angles, and the results are summed. So, you get a weighted average of the Fresnel effect. As the distribution gets wider with increasing roughness, the averaged value for the Fresnel effect will change more and more from the specular value (no distribution of angles)

Back on track though, to the fresnel effect mentioned in OP. I haven’t seen a snapshot yet, so I don’t know which version you are referring to. But intuitively, it doesn’t sound wrong to me; at 0 roughness you get full fresnel at all angles (from f-0 to one), at 1 roughness you get no fresnel at all (from f-0 to f-0). What “rest of the fresnel” do you mean? If f-0 was also meant to be lowered, then diffuse would have to increase to maintain energy conservation, which seems like needless additional computations since roughness 1 is just about never used and max roughness isn’t that far from diffuse. Do you have any math from other implementations for comparison?

The problem and question in short, is that should not the roughness effect the whole of the Fresnel and not just those grazing angle values? The face of the surface is around 4% reflective regardless of the roughness value at the same time the roughness reduces the Fresnel on the grazing angles. Should not the rest of it be reduced as well? It doesn’t look right otherwise. Forgive me, math is not my strong suit.

I’ve been thinking about this, and my best explanation is that if reducing specular to zero (no matter how rough) you end up with only diffuse contribution. Such matte surfaces doesn’t exist in real life other than expensive lab use stuff (completely ignoring other hybrids). I tend to disregard the gloss completely if surface is uniformly rough enough (diminishes realism, but much better render speeds) and the scene lighting allows it.

I believe you shouldn’t overthink it. Light behaves incredibly complex, which cannot be captured fully by a 3D renderer. For example, a transparent material, when it becomes very very rough, the light scatters many times inside the material before it exits, and it turns white (snow is an example). This behaviour isn’t captured by the microfacet models, but since you know what it is supposed to look like, you choose the models that represent that look the best.