LightContextNode.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import ContextNode from '../core/ContextNode.js';
  2. import { RE_Direct_BlinnPhong, RE_IndirectDiffuse_BlinnPhong } from '../functions/BSDFs.js';
  3. class LightContextNode extends ContextNode {
  4. constructor( node ) {
  5. super( node );
  6. }
  7. getType( /*builder*/ ) {
  8. return 'vec3';
  9. }
  10. generate( builder, output ) {
  11. const type = this.getType( builder );
  12. const material = builder.material;
  13. let RE_Direct = null;
  14. let RE_IndirectDiffuse = null;
  15. if ( material.isMeshPhongMaterial === true ) {
  16. RE_Direct = RE_Direct_BlinnPhong;
  17. RE_IndirectDiffuse = RE_IndirectDiffuse_BlinnPhong;
  18. }
  19. if ( RE_Direct !== null ) {
  20. this.setParameter( 'RE_Direct', RE_Direct );
  21. this.setParameter( 'RE_IndirectDiffuse', RE_IndirectDiffuse );
  22. }
  23. const resetTotalLight = 'Irradiance = vec3( 0.0 ); ReflectedLightDirectDiffuse = vec3( 0.0 ); ReflectedLightDirectSpecular = vec3( 0.0 );';
  24. const resultTotalLight = 'ReflectedLightDirectDiffuse + ReflectedLightDirectSpecular';
  25. // include keywords
  26. builder.getContextParameter( 'keywords' ).include( builder, resetTotalLight );
  27. // add code
  28. builder.addFlowCode( resetTotalLight );
  29. super.generate( builder, output );
  30. return builder.format( resultTotalLight, type, output );
  31. }
  32. }
  33. export default LightContextNode;