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.
60 lines
1.2 KiB
60 lines
1.2 KiB
2 years ago
|
import ContextNode from '../core/ContextNode.js';
|
||
|
import VarNode from '../core/VarNode.js';
|
||
|
import Vector3Node from '../inputs/Vector3Node.js';
|
||
|
import OperatorNode from '../math/OperatorNode.js';
|
||
|
import { PhysicalLightingModel } from '../functions/BSDFs.js';
|
||
|
|
||
|
class LightContextNode extends ContextNode {
|
||
|
|
||
|
constructor( node ) {
|
||
|
|
||
|
super( node );
|
||
|
|
||
|
}
|
||
|
|
||
|
getNodeType( /*builder*/ ) {
|
||
|
|
||
|
return 'vec3';
|
||
|
|
||
|
}
|
||
|
|
||
|
generate( builder ) {
|
||
|
|
||
|
const material = builder.material;
|
||
|
|
||
|
let lightingModel = null;
|
||
|
|
||
|
if ( material.isMeshStandardMaterial === true ) {
|
||
|
|
||
|
lightingModel = PhysicalLightingModel;
|
||
|
|
||
|
}
|
||
|
|
||
|
const directDiffuse = new VarNode( new Vector3Node(), 'DirectDiffuse', 'vec3' );
|
||
|
const directSpecular = new VarNode( new Vector3Node(), 'DirectSpecular', 'vec3' );
|
||
|
|
||
|
this.context.directDiffuse = directDiffuse;
|
||
|
this.context.directSpecular = directSpecular;
|
||
|
|
||
|
if ( lightingModel !== null ) {
|
||
|
|
||
|
this.context.lightingModel = lightingModel;
|
||
|
|
||
|
}
|
||
|
|
||
|
// add code
|
||
|
|
||
|
const type = this.getNodeType( builder );
|
||
|
|
||
|
super.generate( builder, type );
|
||
|
|
||
|
const totalLight = new OperatorNode( '+', directDiffuse, directSpecular );
|
||
|
|
||
|
return totalLight.build( builder, type );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export default LightContextNode;
|