polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
82 lines (75 loc) • 2.37 kB
text/typescript
/**
* Adds An AdaptativeToneMapping effect
*
*
*/
import {TypedPostProcessNode, TypedPostNodeContext, PostParamOptions} from './_Base';
import {AdaptiveToneMappingPass} from '../../../modules/three/examples/jsm/postprocessing/AdaptiveToneMappingPass';
// import VERTEX_SHADER from './gl/Adaptive.vert.glsl'
// import FRAGMENT_SHADER from './gl/Adaptive.frag.glsl'
// import {NoBlending} from 'three/src/constants'
// const ADAPTIVE_LUMINANCE_MAT = new THREE.ShaderMaterial( {
// uniforms: {
// "map": { value: null }
// },
// vertexShader: VERTEX_SHADER,
// fragmentShader: FRAGMENT_SHADER,
// depthTest: false,
// // color: 0xffffff
// blending: NoBlending
// } );
// const CURRENT_LUMINANCE_MAT = new THREE.ShaderMaterial( {
// uniforms: {
// "map": { value: null }
// },
// vertexShader: VERTEX_SHADER,
// fragmentShader: FRAGMENT_SHADER,
// depthTest: false
// // color: 0xffffff
// // blending: THREE.NoBlending
// } );
import {NodeParamsConfig, ParamConfig} from '../utils/params/ParamsConfig';
class AdaptiveToneMappingPostParamsConfig extends NodeParamsConfig {
adaptive = ParamConfig.BOOLEAN(1, {
...PostParamOptions,
});
averageLuminance = ParamConfig.FLOAT(0.7, {
...PostParamOptions,
});
midGrey = ParamConfig.FLOAT(0.04, {
...PostParamOptions,
});
maxLuminance = ParamConfig.FLOAT(16, {
range: [0, 20],
...PostParamOptions,
});
adaptiveRange = ParamConfig.FLOAT(2, {
range: [0, 10],
...PostParamOptions,
});
}
const ParamsConfig = new AdaptiveToneMappingPostParamsConfig();
export class AdaptiveToneMappingPostNode extends TypedPostProcessNode<
AdaptiveToneMappingPass,
AdaptiveToneMappingPostParamsConfig
> {
params_config = ParamsConfig;
static type() {
return 'adaptiveToneMapping';
}
protected _create_pass(context: TypedPostNodeContext) {
const pass = new AdaptiveToneMappingPass(this.pv.adaptive, context.resolution.x);
this.update_pass(pass);
return pass;
}
update_pass(pass: AdaptiveToneMappingPass) {
pass.setMaxLuminance(this.pv.maxLuminance);
pass.setMiddleGrey(this.pv.midGrey);
pass.setAverageLuminance(this.pv.averageLuminance);
// if(pass.adaptive){
// pass.setAdaptionRate( this.pv.adaptiveRange );
// ADAPTIVE_LUMINANCE_MAT.uniforms[ "map" ].value = pass.luminanceRT;
// CURRENT_LUMINANCE_MAT.uniforms[ "map" ].value = pass.currentLuminanceRT;
// }
}
}