-
Notifications
You must be signed in to change notification settings - Fork 25
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
Fresnel model #12
Comments
Many thanks for starting the discussion Niklas! There are many questions that needs answers from the community to be able to nail the specifications of a good 'standard' Fresnel model. Here are a couple of points I found interesting:
|
For grazing angle control, from our side I would say yes absolutely. When it comes to Standard Surface we have had the edge tint control for a while now and I think artist will expect this to remain controllable in some form. But since we use Gulbrandsen now, it is not really artist friendly, for the reasons Naty points out. And in addition with the reparameterization into the full physical equations we end up using that in our non-spectral/RGB renderers, so it's a problem with accuracy as well (as pointed out by Naty). I think ideally, on our side, we would like to keep the F0/F90 parameterization (with F90 I here mean "some" type of gracing control). But having F90 more intuitive and linear, and solve the inaccuracy caused by using single eta/kappa values in an RGB renderer. Naty's conclusion was that going back to Schlick is the best choice in most cases. Just using generalized Schlick (F0/F90) would then be the simplest choice. But it gives the artist more freedom (maybe to much?) to produce non-physical results? For full control we would also need to expose the additional 'exponent' parameter. What are peoples experience with generalized Schlick? I know it's used in several other shading models, commercial and in-house. |
+1 to needing the grazing angle control. I would even argue that having a third parameter to control the transition between the two colors is also important in many cases. For a bit of context from the Imageworks side, we started with the Gulbrandsen parameterization because we happened to be revamping our bsdf model around the same time the paper came out. After the model was pushed into production, one of our more vocal artists lobbied strongly for us adding a "generalized Schlick" artistic mode: I've asked to see if we can crawl our in house material libraries to see how often the artists deviate from defaults (this is a bit involved to do well given the flexible nature of material inheritance and overrides, etc ...). I'll try to report back if we can come up with anything quantitative. Just to summarize the models under consideration for the thread:
Any others we should be thinking about? Many years ago, the Maxwell renderer added a specific control to their bsdf model for very similar reasons [1]. From my recollection of lurking on their forums in those days, I believe this was also an artist driven request that came from a desire to match painted props. [1] https://nextlimitsupport.atlassian.net/wiki/spaces/maxwell/pages/22684122/Custom+Fresnel+curve+-+r2 |
I wanted to start by flagged that I haven't had the chance to dig deep into Laurent Belcour proposal but from what I've seen of the slides, it looks very interesting and it could present a great solution for the various opinions, including mine that i've posted underneath. To me the fundamental question is what are we trying to achieve artistically. In VFX, we're trying to get as close as possible to the real world but with enough flexibility to create the impossible. For that reason, I would expect any reference shader (and therefore its fresnel parametrization) to use a method that guarantee the plausibility of the material over its absolute realism.
For those reasons, I would defend the Guldbrandsen parametrization (or any improvement over it, if it exists) because
Ultimately I think we're discussing a non issue. Regardless of the method used, I've never had a problem with Fresnel as an artist over the last 15 years in VFX. I've used Schlick, Generalized Schlick and Guldbrandsen for years and in the hands of a good artist the difference is negligible but in the hands of an uninformed artist, I've always encounter better, more realistic results from the "constraint" that Guldbrandsen pushes on people. |
I think it is great that Naty started the conversation, but I don't buy his conclusions. I find @belcour is going in a more interesting direction, especially with the Gulbrandsen re-parameterization. |
Does anybody see how to use any of Schlick's, Gulbrandsen's, Hoffman's, or @belcour's model for a material inside some dielectric medium? I understand that it could be solved by additional artistic control, but there are models (especially, @belcour's thin film that is also used in Standard Surface) that need access to underlying real/complex IORs. |
Maybe I should exclude Gulbrandsen's model from my question, because his article contains transformations from (R0, g) to (n, k), so we can use these IORs (they will be "averaged IORs" in some color space). |
Thanks for the excellent feedback so far! @fpsunflower some quantitative results of what your artists prefer using would be very interesting. @noj86 @pleprince, I fully agree we need constraints to stay physically plausible, and I think everyone agree we should not move away from this. Parameters added for artistic control should have good defaults and preferably be protected by chains and locks in the UI. I think the unification of a Fresnel parameterization for real-time vs offline is the most interesting problem to solve. As long as the parameterization is the same everyone can choose what to do internally. With Gulbrandsen we can transform back and forth to physical IORs. @nickkuk made a good point that we still need this in the case of thin-film interference. @belcour how does this hold up with the Gulbrandsen re-parameterization proposed in your work? Admittedly I have not had a chance to deep dive into it yet either. |
@nickkuk You should be careful when using Gulbransen's parametrization when your ambient medium does not have an IOR of 1, since this is a basic assumption made in Gulbransen's paper. If for instance you assume that your metallic material is coated with a dielectric layer (to make things simpler, let's assume it's not a thin film), then not only will the reflectivity r should differ due to Fresnel transmittances when going from air to the coating medium; but the effect of the edge tint will also be reduced for two reasons. First, at grazing angles, most of the radiance will be reflected by the first interface, hence reducing the usefulness of the edge tint parameter. Second, Snell's law of refraction will make incoming directions less grazing, so that rays will be less likely to reach grazing angles on the second interface... As far as I know, there has not been much work done on that specific question (I mean in academic research), even though coated metallic materials seem to be useful to model. |
@pbarla, thanks! I see the complexity of the problem. What can you say about "larger medium", e.g., metallic material under water? On a such scale we haven't any light transfer problems in a path tracer - only local Fresnel reflections are in question. |
@nickkuk In a larger medium such as water, there is still another issue I forgot to mention: Gulbransen's approach relies on a formulation of Fresnel equations that is exact only for an ambient medium with an IOR of 1. Hence even if you re-derive the approach for a different ambient medium, you will not get a physically exact solution... |
I specifically talk about adapting Schlick for external media in my SIGGRAPH 2020 talk. It is possible with a very simple adjustment which gives good accuracy for water and is less accurate for higher-IOR external media (e.g. diamond). I also present an alternative which is more accurate for high-IOR external media but has some other drawbacks. See slides 106-122 here: https://blog.selfshadow.com/publications/s2020-shading-course/hoffman/s2020_pbs_hoffman_slides.pdf |
Also regarding having constraints to stay physically plausible, yes, that's the whole point of going with physically motivated models to begin with! This is something I've been advocating since 2004. But in my opinion Gulbrandsen is actually much worse for this than plain Schlick. With Schlick you can set F0 to whatever you like and you will always get a plausible material. Even values between 0.2-0.4 correspond to semiconductors. But with Gulbrandsen it is difficult to set edgeTint so that the result is plausible. Setting edgeTint [0,0,0] will not result in "a fallback to a colored dielectric fresnel reflection", it will (as I clearly show in slides 137-142) result in a bizarre darkening and color-shift at the edge. I suspect that the reason that people say Gulbrandsen is fine is that a lot of these edge effects are barely noticeable due to foreshortening, but if you don't care about edge behavior, why not just stay with Schlick? |
And regarding the benefits of Schlick Fresnel for dielectrics, the big benefit here is being able to handle the entire continuum of materials from dielectrics to semiconductors to conductors within a single specular node. |
I just noticed that the slide PDF link I attached earlier redirects to the course page, so it's probably best to go to the course page (https://blog.selfshadow.com/publications/s2020-shading-course) and click on the "slides" link under "Some Thoughts on the Fresnel Term". The presentation video will also be available on that site in the near future, for anyone without a SIGGRAPH registration. |
And it's important to note that there are non-Fresnel surfaces (e.g. fine loose dust) for which F90 enables a more physically accurate rendition than the Fresnel equations (e.g. Gulbrandsen). |
The one big advantage F90 has over other edge-tint controls like Gulbrandsen "g" or my F82 is that it is trivially "opt out". Leave it at [1,1,1] and forget about it. Maybe bury that texture channel option in an "Advanced" tab or something so less experienced artists are less likely to use it. |
@niklasharrysson regarding the re-parametrization: we still maintain the conversion to (eta, kappa) using the reparametrized Gulbrandsen. Each configuration (r,beta) maps to a valid (r,g). Hence we can get back the (eta, kappa). It only requires to stores this mapping. We had no need for it in our demo, so we didn't include it. But it is possible. Any reparametrization of Gulbrandsen will allow to get back to an (eta,kappa) pair, as long as it is contrained to (r,g) in [0,1]^2. |
A small note regarding the analysis presented so far. Since we only consider the case of "natural" (unpolarized) light, Fresnel reflectance is computed as the average of the parallel and perpendicular polarization components. The resulting formula is rather complex. Formulas for a particular polarization are comparatively simple. Additionally, the behavior of the two components is rather different as they approach the grazing angle. Specifically, at Brewster's angle, the parallel (reflection) component reaches its minimum value (which is 0 for dielectrics) while the perpendicular component does not. So it may be worthwhile to analyze both components separately (which does not necessarily mean that we need individual parameters for each). |
Another point made earlier that I wanted to address: "An approximation will always be an approximation. We have the full equations, I would vouch for more research on how to improve its artistic parametrization instead of reverting to an approximation.". This is also addressed in my SIGGRAPH talk. I showed quite clearly (in slides 35-48) that the Gulbrandsen model is as much an approximation as Schlick is, since Gulbrandsen is based on evaluating the Fresnel equations on RGB data which is incorrect. In fact, Gulbrandsen is a less well-founded approximation than Schlick. Schlick is based on the formulation that was recommended in the Cook-Torrance paper for applying Fresnel in RGB renderers (as I show in slides 28-36 and 50-51). |
Generalized Schlick was (still is?) what has been in use at ILM, for as long as I can remember (1993 to 2010). Obviously, by default, the edge (F90) color was set to white and the exponent to 5. |
@natyh I believe that the full conductor fresnel equation with a colored eta (which can be converted from the colored R0 in the Guldbrandsen parametrization) and a kappa value of [0,0,0] (which is what a Gulbrandsen's edgeTint at [0,0,0] would produce) does match the reflection of a full dielectric fresnel with the same colored eta. For me, the comparisons in your slides are slightly misleading because you're comparing a badly parametrized conductor to the conductor ground truth but not to the equivalent cg material which uses a colored dielectric full fresnel. (which is what I stated would match in my previous post) The full conductor fresnel equation expects a kappa value to produce a "valid" metal surface so it's logical that without this value it won't behave properly. I acknowledge that if we're using only R0 in a Schlick fresnel the results will be closer to the ground truth for most pure metal surface but once again we're overlooking the loss of accuracy for all the non-metallic material. For me there is two questions, the one of the model at the core and the one of the parametrization. Here is a quick summary of how I perceive the various cases : Schlick
Full Fresnel Dielectric
Full Fresnel Conductor
Overall, to me, on the question of the core model, it seems more valuable to have an accurate dielectric model and an accurate conductor model even if some improvements on the artistic parameterization are still required, compared to a model that will stay an approximation (even if it's a very good one) forever. As I stated earlier, if you have the "correct" base math, you systematically produce a plausible material even if it isn't one that perfectly matches a real scan. On the question of the parameterization, there is no doubt that physical and artistic parameterization will continue to co-exist. I think R0 is a great artistic solution and doesn't need to be changed. That being said on a personal level, for dielectric surface, I think of material in terms of Index of Refraction first. When it comes to the preference between a physical or an artistic approach it really depends on your background. I'm not a rendering engineer so I hope that I'm not missing some obvious points in all your posts but ultimately I think that the difference between the various options are very small once in the hands of good artists. |
The course presentation videos are now up: https://blog.selfshadow.com/publications/s2020-shading-course/ |
@noj86 - it's true that from a mathematical perspective using Gulbrandsen with edgeTint = [0,0,0] produces the same result as using the dielectric equations with the same reflectance value. But that's not very relevant for the question of how artist-friendly edgeTint is and how useful edgeTint = [0,0,0] is as a default value. From a look dev perspective, a metal with edgeTint = [0,0,0] doesn't look anything like a bright colored dielectric, it looks in fact the opposite - like a kind of "super-metal" with a bigger dip than real metals. Regarding the "Gulbransen/accurate" vs. "Schlick /approximate" division, the point I'm trying to make is that it's a false division. Both are approximate, and in some important senses Schlick is more "correct" and in practice it leads to more accurate results (yes, it's possible to get more accurate results with Gulbrandsen if you do a numerical fitting to measured data, but in practice edgeTint will be painted "by eyeball" in which case it will usually be less accurate). I do agree with you that a good artist can produce good results with any of these models. But I think that some of these models will take more work to produce such results than others. And then there are other considerations like preserving the look under blending and color conversion operations, performance, real-time friendliness (more important than ever in the age of real-time in-camera effects using systems like ILM StageCraft), etc. |
While it doesn't tick all of the artist-friendly checkboxes, I would note that it is possible to color correct, do spectral projections, and exchange materials between different 2-parameter Fresnel models by using F0 and the spherical/bond albedo of the material as the two color parameters for the Fresnel equation. This should work better than [F0,F82] because the dip isn't always strongest at 82 degrees, and better than [F0,g] for the reasons Naty has mentioned. The spherical albedo is simply the integral of the reflectance over the hemisphere (i.e. the average pixel value of a spherical particle in a unit white IBL). |
Hi there ! @fpsunflower told me that he couldn't finish the data collection on Fresnel usage he wanted to share here (see #12 (comment)) before leaving Imageworks. Is anyone with such data at hand (or close to) would be willing to take over Christopher's idea? |
At the Physically Based Shading course at Siggraph this year Naty Hoffman presented issues with established Fresnel models. Both how it's incorrect to use the physical Fresnel equations directly in an RGB renderer, and also how Gulbrandsens method for making the parameterization artist friendly in fact fails at this on several counts.
slides
In addition Laurent Belcour presented a new Fresnel model, that is more accurate than Schlick's approximation and still works well for both offline and real-time rendering.
slides & code
Since Standard Surface is using Gulbrandsens methods, and definitely needs to be usable and accurate for non-spectral renderers, this is something we need to look into. Should we move away from Gulbrandsens method? And if so, what should we use instead?
Feedback from the rendering community is much appreciated!
The text was updated successfully, but these errors were encountered: