You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.3 KiB
61 lines
1.3 KiB
2 years ago
|
import ContextNode from '../core/ContextNode.js';
|
||
|
import { RE_Direct_BlinnPhong, RE_IndirectDiffuse_BlinnPhong } from '../functions/BSDFs.js';
|
||
|
|
||
|
class LightContextNode extends ContextNode {
|
||
|
|
||
|
constructor( node ) {
|
||
|
|
||
|
super( node );
|
||
|
|
||
|
}
|
||
|
|
||
|
getType( /*builder*/ ) {
|
||
|
|
||
|
return 'vec3';
|
||
|
|
||
|
}
|
||
|
|
||
|
generate( builder, output ) {
|
||
|
|
||
|
const type = this.getType( builder );
|
||
|
|
||
|
const material = builder.material;
|
||
|
|
||
|
let RE_Direct = null;
|
||
|
let RE_IndirectDiffuse = null;
|
||
|
|
||
|
if ( material.isMeshPhongMaterial === true ) {
|
||
|
|
||
|
RE_Direct = RE_Direct_BlinnPhong;
|
||
|
RE_IndirectDiffuse = RE_IndirectDiffuse_BlinnPhong;
|
||
|
|
||
|
}
|
||
|
|
||
|
if ( RE_Direct !== null ) {
|
||
|
|
||
|
this.setParameter( 'RE_Direct', RE_Direct );
|
||
|
this.setParameter( 'RE_IndirectDiffuse', RE_IndirectDiffuse );
|
||
|
|
||
|
}
|
||
|
|
||
|
const resetTotalLight = 'Irradiance = vec3( 0.0 ); ReflectedLightDirectDiffuse = vec3( 0.0 ); ReflectedLightDirectSpecular = vec3( 0.0 );';
|
||
|
const resultTotalLight = 'ReflectedLightDirectDiffuse + ReflectedLightDirectSpecular';
|
||
|
|
||
|
// include keywords
|
||
|
|
||
|
builder.getContextParameter( 'keywords' ).include( builder, resetTotalLight );
|
||
|
|
||
|
// add code
|
||
|
|
||
|
builder.addFlowCode( resetTotalLight );
|
||
|
|
||
|
super.generate( builder, output );
|
||
|
|
||
|
return builder.format( resultTotalLight, type, output );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export default LightContextNode;
|