Unfortunately, the iridescence model is not made to be applied to a diffuse term. Pascal and I made it for microfacet models only (that is the specular term). One way to understand how to include it to a game engine might be to look at Unity's HDRP implementation. In the Lit.hlsl to see how to incorporate the iridescence Fresnel into a specular + diffuse ...


It turns out that the ring was happening from a negative divided by a negative, so adding nom = max(nom, 0.0); fixed the problem. The new highlight, amplified:


We have $t_{12} = t_{21}$, by the law of reciprocity. Also, $$r_{12} + t_{12} = 1\\r_{21} + t_{21} = 1$$ It follows that $r_{12} = r_{21}$ as well.

Only top voted, non community-wiki answers of a minimum length are eligible