Comments (2)
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
(wherespecular_color
is replaced withspecular_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:
- decouples the metallic edge tint from the dielectric Fresnel, with a parameter specifically to control only that metal-specific physical effect.
- provides more artistic control over the Fresnel factor of both metals and dielectrics, via two colors explicitly named "tints" indicating they are non-physical/advanced/atypical.
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).
from openpbr.
Probably not doing this, suggest to close.
from openpbr.
Related Issues (20)
- Merge specular_weight and specular_ior_level HOT 1
- Anisotropic roughness in MaterialX implemetation differs from the specification HOT 1
- Parameters related to volume shading have not been used in MaterialX implementation HOT 1
- Anisotropy direction parametrization HOT 26
- Update transmission in default example material
- Oren-Nayar roughness parametrization is not sufficiently clear HOT 5
- Proposal: Fuzz/sheen can darken as well as lighten HOT 3
- Visual discontinuity at `transmission_depth` of zero HOT 8
- Minor errors in Glossy-Diffuse section
- subsurface weight has incorrect uifolder HOT 1
- Add formula for the average albedo of the F82-tint model HOT 2
- Proposal/Request: Decouple coat roughness from transmission/refraction HOT 4
- Default value of transmission_dispersion_abbe_number is not between uisoftmin and uisoftmax HOT 2
- Layer inconsistencies between the whitepaper and the reference implementation HOT 3
- Proposal: dual specular roughness sliders with mix HOT 2
- Proposal: Remove uifolder prefix from uiname strings HOT 2
- Coat and Fuzz parameter order inconsistent between specification and reference implementation HOT 2
- Specular weight > 1 can cause energy gain in metals, and NaNs in dielectrics HOT 3
- Suggest Hoffman approximations for Fresnel factor of metal under coat/film
- Give an explicit suggested formula for fuzz base-roughening
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from openpbr.