PhongLightingModel.js 1.0 KB

1234567891011121314151617181920212223242526272829
  1. import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
  2. import BRDF_BlinnPhong from './BSDF/BRDF_BlinnPhong.js';
  3. import {
  4. ShaderNode,
  5. mul, clamp, dot, transformedNormalView,
  6. diffuseColor, materialReflectivity, lightingModel
  7. } from '../shadernode/ShaderNodeElements.js';
  8. const RE_Direct_BlinnPhong = new ShaderNode( ( { lightDirection, lightColor, reflectedLight } ) => {
  9. const dotNL = clamp( dot( transformedNormalView, lightDirection ) );
  10. const irradiance = mul( dotNL, lightColor );
  11. reflectedLight.directDiffuse.add( mul( irradiance, BRDF_Lambert.call( { diffuseColor: diffuseColor.rgb } ) ) );
  12. reflectedLight.directSpecular.add( irradiance.mul( BRDF_BlinnPhong.call( { lightDirection } ) ).mul( materialReflectivity ) );
  13. } );
  14. const RE_IndirectDiffuse_BlinnPhong = new ShaderNode( ( { irradiance, reflectedLight } ) => {
  15. reflectedLight.indirectDiffuse.add( irradiance.mul( BRDF_Lambert.call( { diffuseColor } ) ) );
  16. } );
  17. const phongLightingModel = lightingModel( RE_Direct_BlinnPhong, RE_IndirectDiffuse_BlinnPhong );
  18. export default phongLightingModel;