-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ability to tint specular highlights without affecting grazing angles #77
Comments
I'm not sure about adding even more ways to specify a non-physical Fresnel factor. If we add these F0, F90 colors for the dielectric Fresnel, I would worry that we're failing to "ensure that the users work within the bounds of what is physically plausible as much as possible", instead we would be allowing/encouraging them to easily step outside those bounds. (It's been suggested that There is a genuine physical mechanism for producing a colored dielectric Fresnel factor, i.e. dispersion (wavelength-dependent IOR). Though I think renderers typically only account for the effect of this on the refracted lobe (producing color fringing in glass etc.), technically it should also alter the Fresnel factor of the reflection differently in each channel producing colors in the reflection lobe. If we introduce this ad-hoc parametrization interpolating between two arbitrary colors, it's then unclear how this should interplay with the dispersion effect (maybe multiply the two Fresnel factors?). I wonder what are the real uses cases for this tinting. In the spec we say "this can be useful in practice for example, to simulate green or purple anti-reflective coatings on lenses". Presumably those coatings are actually colored due to absorption (and do produce a white highlight as well, just suppressed due to the index matching). So we are effectively faking the presence of a thin absorbing layer, and a similar effect could be achieved with the coat layer itself. |
On reflection... actually I'm not too bothered about violating the fact that the dielectric Fresnel factor is supposed to 100% reflecting at grazing angles (i.e. The origin of that is at a lower level than relevant to computer graphics, i.e. Maxwell's equations, but I don't think anything important breaks at the level of CG if we relax that requirement, and probably it can be a useful (albeit unrealistic) extra degree of freedom for artistic purposes. We could add separate tints for the dielectric Fresnel factor at normal and grazing incidence (called say Though I worry that this could be quite confusing for artists, and we should at least try to make it clear that setting the (There is the separate question of how the energy balance should work in the case of non-white |
Actually, not really.. If we just remap the Fresnel factor of our dielectric/conductor BSDF arbitrarily, some things become physically ill-defined since the Fresnel factor is no longer consistent with the IOR. So e.g.:
|
Inclined to close this, as changing the Fresnel behaviour is not happening in the near term. |
Currently, the only way to affect the color of the dielectric reflection lobe is
specular_color
, which affects all angles equally.However, for compatibility with other material models (e.g. the classic Disney BSDF, or glTF's KHR_materials_specular), it would be useful to have a parameter for only affecting normal-incidence angles while leaving the grazing angles as they are.
More specifically, in a Schlick-style Fresnel term, this parameter would only affect F0, not F90. This can be implemented in combination with the proper dielectric Fresnel term by computing
real_F0
from the IOR, then computing the Fresnel value using the dielectric term, and then remapping from thereal_F0 .. 1.0
range toF0 .. F90
.The text was updated successfully, but these errors were encountered: