PhysicalLightingModel.js 943 B

12345678910111213141516171819202122232425262728
  1. import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
  2. import BRDF_GGX from './BSDF/BRDF_GGX.js';
  3. import ShaderNode from '../shadernode/ShaderNode.js';
  4. import {
  5. mul, saturate, dot, transformedNormalView,
  6. diffuseColor, specularColor, roughness
  7. } from '../shadernode/ShaderNodeElements.js';
  8. const RE_Direct_Physical = new ShaderNode( ( inputs ) => {
  9. const { lightDirection, lightColor, reflectedLight } = inputs;
  10. const dotNL = saturate( dot( transformedNormalView, lightDirection ) );
  11. const irradiance = mul( dotNL, lightColor );
  12. reflectedLight.directSpecular.add( mul( irradiance, BRDF_GGX.call( { lightDirection, f0: specularColor, f90: 1, roughness } ) ) );
  13. reflectedLight.directDiffuse.add( mul( irradiance, BRDF_Lambert.call( { diffuseColor: diffuseColor.rgb } ) ) );
  14. } );
  15. const PhysicalLightingModel = new ShaderNode( ( inputs/*, builder*/ ) => {
  16. RE_Direct_Physical.call( inputs );
  17. } );
  18. export default PhysicalLightingModel;