It seems to me that Blender just doesn’t really handle Fresnel/IOR very intelligently in general, but maybe I don’t understand how it’s supposed to be done, and maybe you (@CarlG) can shed some light?
Like, consider the case of a glass of water. In reality, you’ll get specular off every transition between surfaces, but that specular will be different at the water/glass transition than at the glass/air transition and different again at the water/air transition.
If you make separate, manifold meshes for the water and the glass, you’ll either get rendering bugs if the faces are co-planar, or you’ll get doubled specular, as if there was a thin layer of air between the glass and the water if they’re not co-planar. (Making them not-quite-coplanar is fine for the refraction, any refraction error disappears as the gap gets smaller, but the specular error is always there as long as there’s any gap at all.)
It seems like the only way to do this right in Blender is to have the glass interior cut at the level of the water, with a different material for the water-glass transition from the water-air transition, and a non-manifold water mesh that just represents the surface, so that you can use different Fresnel for each.
But that’s a ridiculously difficult way to set things up, particularly when you start dealing with transiitions that aren’t flat, or that are animated (like if you put a stick into the glass and swirl up the water.) You can’t cut your glass mesh up for every frame, in high detail, to make a separate material. It’s not practical.
Is there some better way that should be handled?