Good afternoon. There have been people in the community saying that cycles' fresnel and glossy BSDF's roughness(i.e the roughness does not affect the fresnel, correctly) are not physically correct. I would like someone, preferably a developer to clarify this please. Thank you.
-
$\begingroup$ See Price's new video: blenderguru.com/tutorials/pbr-shader-tutorial-pt1 $\endgroup$– Anson SavageJun 29, 2016 at 22:13
-
1$\begingroup$ I have actually watched the video but there are errors in it. It will be better if a developer would answer this. $\endgroup$– DembosJul 7, 2016 at 22:43
-
$\begingroup$ Okay. I know he rereleased the video with some of the errors fixed. $\endgroup$– Anson SavageJul 7, 2016 at 22:45
-
$\begingroup$ What about these tutorials? youtube.com/watch?v=xMpDTk3DTW8 youtube.com/watch?v=pNiVB7tRG68 youtube.com/watch?v=FeH-g9bGz_4 youtube.com/watch?v=S2VLJZ_Zaz0 youtube.com/watch?v=rImvyRepx1U $\endgroup$– Róbert László PáliJul 12, 2016 at 12:03
2 Answers
Nothing is physically correct, it's all approximations. (raytracers don't even implement the wave nature of light...). But you're correct in that Cycles' fresnel node is not as close an approximation as it should be. I'll let Lukas Stockner, one of the Cycles' devs, explain: https://blenderartists.org/forum/showthread.php?390686-Alternative-to-Cycles-for-Blender-users&p=2996756#post2996756
tl:dr: the true fresnel result for a non-smooth surface requires you to calculate it with the direction the ray reflects from the microscopic imperfections of the surface. But this direction is not yet known when the mix shader is evaluated, so Cycles is forced to calculate fresnel for a smooth surface.
There are various tricks to approximate the correct result that make things a little more accurate: https://youtu.be/pNiVB7tRG68 It's not perfect, but on average it will give the same result a correct shader will, so it usually looks fine.
The fresnel node is physically correct if you set the IOR to the correct value of the object. It is the glossy shader that is physically incorrect because blender doesn't reflect things correctly by default. So you have to manually plug a fresnel node into the factor of the glossy shader to make it phsyically correct.
Here is a link to a site that has a list of IOR values: IOR