BRDF_BlinnPhong.js 917 B

123456789101112131415161718192021222324252627
  1. import F_Schlick from './F_Schlick.js';
  2. import { ShaderNode, shininess, specularColor, float, add, clamp, dot, mul, normalize, positionViewDirection, transformedNormalView } from '../../shadernode/ShaderNodeBaseElements.js';
  3. const G_BlinnPhong_Implicit = () => float( 0.25 );
  4. const D_BlinnPhong = new ShaderNode( ( { dotNH } ) => {
  5. return shininess.mul( 1 / Math.PI ).mul( 0.5 ).add( 1.0 ).mul( dotNH.pow( shininess ) );
  6. } );
  7. const BRDF_BlinnPhong = new ShaderNode( ( { lightDirection } ) => {
  8. const halfDir = normalize( add( lightDirection, positionViewDirection ) );
  9. const dotNH = clamp( dot( transformedNormalView, halfDir ) );
  10. const dotVH = clamp( dot( positionViewDirection, halfDir ) );
  11. const F = F_Schlick.call( { f0: specularColor, f90: 1.0, dotVH } );
  12. const G = G_BlinnPhong_Implicit();
  13. const D = D_BlinnPhong.call( { dotNH } );
  14. return mul( F, G, D );
  15. } );
  16. export default BRDF_BlinnPhong;