-
Notifications
You must be signed in to change notification settings - Fork 22
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
Suggest separate parameters for diffuse and metal colours instead of "base_color" #140
Comments
It must be true that the existing approach with a single So in principle I'm in favor of changing this. Just I wish we had thought about this earlier as it's quite late to make such a change. I'm wondering what the minimal change we can make to the parameter set is to achieve it. Possibly keeping It seems not ideal to force users to dial in two colors if they want to work with an intermediate metalness. So another suggestion is to have This would be a bit of a special case in OpenPBR though, since we don't currently have the notion of custom behavior depending on whether or not a parameter is textured. (Also possibly confusing when |
I was aware of this limitation of the metal-roughness parametrisation, but I thought this was a generally accepted caveat. I agree with your observations, and a strictly override type of control could be a solution indeed. That being said, it's not obvious how to define such a solution. In comparison, the F-82 tint model for example has the benefit of behaving like a Schlick model with a default value that makes sense with regard to that behaviour. |
For an extension to OpenPBR to allow for the use cases you describe, a minimal suggestion is to add parameters:
Where Would that be sufficient for the model to be usable in your studio, in your view? It could be argued that if we do that, we might as well add these as well, so the metal roughness/NDF is independent from dielectric also:
So basically completely decouple the metal properties from the dielectric base (only if opted-in). This would be strictly additive to the current model, i.e. it behaves exactly the same as now unless It's more parameters though, and not the default, so that adds some mental friction (so e.g. the What it does is pretty trivial to implement, though it does add parameters and checks which has some perf/memory cost (perhaps fairly negligible if opted-out though?). Or is there some other scheme you can think of that would achieve what you need? |
Same experiment with a metalness map that has a more gradual transition. In this case, the result with separate metal and base looks like the rust "thinning" in the transition region (i.e. partial coverage of the rust), while the blend alters the brightness in the transition which looks considerably less realistic (as a rusty metal).
|
By the way, I think |
@portsmouth All of your reasoning makes sense. Thanks for thinking about this in depth. I have a few questions about the details of your proposals.
Is there evidence that this would also be useful to eliminate artifacts? If not, it would be nice to avoid adding these parameters because they complicate the implementation. Specifically, when all specular lobes share an NDF, they can be implemented as a single microfacet surface with a reflection/transmission coefficient that takes both the dielectric and metal properties into account (which is done in the current Adobe implementation for example).
What would be the purpose of adding a Considering all of this, my tentative modified proposal would be this:
|
+1 to keeping a single NDF for now I like the |
For example, the case of rust on shiny metal, where the rust is represented as a "glossy-diffuse" dielectric with a rough spec. In the transition region between the metal and rust, the roughness has to ramp from some low value to high value. So in the middle of the transition band, with a single NDF we get a 50-50 blend of medium roughness metal and dielectric (i.e. the metal and dielectric are constrained to have the same roughness). That will look different to the result of a more general 50-50 blend of the separate BRDFs of the totally smooth metal and the rough dielectric, e.g. there will be no sharp highlight with the tied roughness. (Also, this blended roughness has to be manually authored in image editor or shader graph, rather than just authoring the low roughness metal and high roughness rust, and using the metalness map to implement the blend for you). I don't have a render (we should do some), but I expect it looks similar to the halo artifact due to tying the base colors, though possibly a bit more subtle since it will only affect the spec. If it's subtle enough, we might consider it reasonable to avoid the extra parameters. My thought was just that if we're decoupling the metal, we might as well decouple all its properties to fully avoid these artifacts. If you're implementing the base as a single microfacet model sharing an NDF, I think it would be valid as an approximation to just blend the metal and dielectric roughnesses internally (if |
Technically the Also I think it's clearer to retain the top-level "base" section, which is the default convenient way to control the high-level blend of metal and dielectric in one place, i.e.:
I would not really want to mess with that basic, well-known parametrization. (Though admittedly, I do find it confusing that I prefer to reserve the Then the change is strictly additive to the current model, and could reasonably be hidden away in an "advanced" rollout or tab. It could also reasonably just be a no-op or omitted in an implementation, which will fall back to the current behaviour (i.e.
Logically, the structure is that "base" is a blend of metal and dielectric, where the blend weight is |
Makes sense. However it seems like For now, should we at least consider renaming That would leave the door open for adding more |
WIth the proposed override parametrization, you need both the metal mix weight (called So I don't see how we could rename I see the point on the naming convention, but it does roughly follow the idea of the material structure (as in the diagram above) composed of:
I think in that picture, |
Apologies again for taking so long to get this published. Production pressures aren't giving me much time to spend on this: Overview The suggestion we have isn't very different from @portsmouth's suggestion above in regard to decoupling. Where ours differs, is that instead of having a Details Currently Referring to the MaterialX underpinnings we have (roughly):
We would like to propose the following changes: Renamed parameters:
New parameters:
With the following parameters driving the lobes, (*) denotes the changes:
Justification Our thinking is that this new interface will make more sense from the point of view of surface definition since the parameters will now map to the underlying lobe topology more directly, which should hopefully lead to less confusion and more artistic control. Putting the existing This does feel like more of an OpenPBR 2.0 level change, and we can certainly understand that there will likely be resistance to making modifications this fundamental, but it is our belief that this will result in a more capable and stronger standard. |
Some observations about this proposed new parametrization:
|
If assets are shared there would also need to be some conventions, e.g. is the network provided with the material, or perhaps the network is implied if the underlying parameters can be represented by the network (of the above form). |
I think it would also be clearer to rename the "weights" which are simply reflectivity modulations, explicitly to "reflectivities". Then the simplified parameters remain "lobe-centric" (i.e. control base/spec lobes), while the underlying parameters are closer to the material structure. That then frees up |
@portsmouth, I really like your idea about renaming specular to dielectric. I'll definitely include that in the PR. |
In the OpenPBR specification, the diffuse albedo and the metallic F0 both share the
base_color
parameter, withbase_metalness
providing the control to mix between the dielectric-base and metal substrates.We have found it to be useful to have these parameters specified independently as we typically paint these maps separately. Having them shared would make it difficult for us to use OpenPBR.
When Brent Burley chose this parameterisation, his aims were to make a simpler interface for BSDFs, primarily targeted at feature animation pipelines. We have found that for photo-realistic look development, having control of the diffuse separately from the metallic specular gives more artistic control.
Having these colours linked was one of the main barriers that prevented us from adopting Autodesk Standard Surface internally, as well.
Would it be possible to break
base_color
intometal_color
anddiffuse_color
?The text was updated successfully, but these errors were encountered: