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.
67 lines
1.6 KiB
67 lines
1.6 KiB
6 months ago
|
import ContextNode from '../core/ContextNode.js';
|
||
|
import { addNodeClass } from '../core/Node.js';
|
||
|
import { addNodeElement, nodeProxy, float, vec3 } from '../shadernode/ShaderNode.js';
|
||
|
|
||
|
class LightingContextNode extends ContextNode {
|
||
|
|
||
|
constructor( node, lightingModel = null, backdropNode = null, backdropAlphaNode = null ) {
|
||
|
|
||
|
super( node );
|
||
|
|
||
|
this.lightingModel = lightingModel;
|
||
|
this.backdropNode = backdropNode;
|
||
|
this.backdropAlphaNode = backdropAlphaNode;
|
||
|
|
||
|
this._context = null;
|
||
|
|
||
|
}
|
||
|
|
||
|
getContext() {
|
||
|
|
||
|
const { backdropNode, backdropAlphaNode } = this;
|
||
|
|
||
|
const directDiffuse = vec3().temp( 'directDiffuse' ),
|
||
|
directSpecular = vec3().temp( 'directSpecular' ),
|
||
|
indirectDiffuse = vec3().temp( 'indirectDiffuse' ),
|
||
|
indirectSpecular = vec3().temp( 'indirectSpecular' );
|
||
|
|
||
|
const reflectedLight = {
|
||
|
directDiffuse,
|
||
|
directSpecular,
|
||
|
indirectDiffuse,
|
||
|
indirectSpecular
|
||
|
};
|
||
|
|
||
|
const context = {
|
||
|
radiance: vec3().temp( 'radiance' ),
|
||
|
irradiance: vec3().temp( 'irradiance' ),
|
||
|
iblIrradiance: vec3().temp( 'iblIrradiance' ),
|
||
|
ambientOcclusion: float( 1 ).temp( 'ambientOcclusion' ),
|
||
|
reflectedLight,
|
||
|
backdrop: backdropNode,
|
||
|
backdropAlpha: backdropAlphaNode
|
||
|
};
|
||
|
|
||
|
return context;
|
||
|
|
||
|
}
|
||
|
|
||
|
setup( builder ) {
|
||
|
|
||
|
this.context = this._context || ( this._context = this.getContext() );
|
||
|
this.context.lightingModel = this.lightingModel || builder.context.lightingModel;
|
||
|
|
||
|
return super.setup( builder );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export default LightingContextNode;
|
||
|
|
||
|
export const lightingContext = nodeProxy( LightingContextNode );
|
||
|
|
||
|
addNodeElement( 'lightingContext', lightingContext );
|
||
|
|
||
|
addNodeClass( 'LightingContextNode', LightingContextNode );
|