Open lukasstockner opened 1 year ago
The Fresnel multiplier affects all angles, while the metallic parameter only affects near-grazing angles
Sharing the parameter makes it impossible to create a half-metallic material which matches a real metal, but doesn't tint the dielectric reflection (of course, this sort of half-metallic half-dielectric material is not really physical, but users will do it anyways)
That sharing is a legacy of Standard Surface. I guess the idea was that the base substrate is a mixture of metal and dielectric, both of which produce a specular lobe (due to the metallic or dielectric Fresnel, respectively).
I do agree that it's potentially confusing that specular_color
specifies the F82 grazing edge tint of the metallic lobe (with F0 specified by base_color
), while specular_color
specifies the tint of the dielectric lobe applied at all angles.
Arguably this overloading of meaning is reasonable to sacrifice some precision/expressivity for simplification of the parameter set. We also do this overloading for base_color
, which controls the diffuse lobe albedo and the metal F0.
Your example of a mix of metal and dielectric would come up practically in cases where one is blending from a metallic region to a dielectric region, e.g. modelling flaky metallic paint on shiny plastic. Then if the plastic has the default white specular_color
but the metal doesn't, currently artists would need to manually blend the specular_color
using the metalness
weight otherwise the plastic areas would look wrong with non-white highlights.
The Fresnel multiplier is a non-physical tweak, while the metallic parameter models a physical effect
In #66, Brecht notes that these more non-physical / artist-driven effects are referred to as "tints" in Blender, to distinguish from physical parameters.
So a tentative proposal is to have:
metallic_edge_tint
(or some other appropriate name) specifically for metals, controlling the F82-tint model
specular_tint
/specular_edge_tint
(where specular_color
is replaced with specular_tint
) remapping the resulting Fresnel curve (for both the metallic and dielectric Fresnel) non-physically, to interpolate between the specified F0/F90 colors (as per your suggestion in #77). We would need to decide on the specific remapping math though.
This then:
but at the expense of adding two new parameters.
Though note the F0 of metals will depend on both base_color
and specular_tint
(probably just the product of the two, depending on how this is implemented).
Probably not doing this, suggest to close.
Currently, the
specular_color
parameter serves two purposes: It acts as a multiplier on top of the Fresnel term for the dielectric reflection, and it acts as the F82 parameter for the metallic component.I'm not sure if this is a good idea, since these two purposes seem quite different to me: