F_Schlick.js 670 B

12345678910111213141516171819
  1. import ShaderNode from '../../shadernode/ShaderNode.js';
  2. import { add, sub, mul, exp2 } from '../../shadernode/ShaderNodeElements.js';
  3. const F_Schlick = new ShaderNode( ( inputs ) => {
  4. const { f0, f90, dotVH } = inputs;
  5. // Original approximation by Christophe Schlick '94
  6. // float fresnel = pow( 1.0 - dotVH, 5.0 );
  7. // Optimized variant (presented by Epic at SIGGRAPH '13)
  8. // https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf
  9. const fresnel = exp2( mul( sub( mul( - 5.55473, dotVH ), 6.98316 ), dotVH ) );
  10. return add( mul( f0, sub( 1.0, fresnel ) ), mul( f90, fresnel ) );
  11. } ); // validated
  12. export default F_Schlick;