@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
75 lines (74 loc) • 2.71 kB
JavaScript
;
import { Vector2 } from "three";
import { TypedPostNode, PostParamOptions } from "./_Base";
import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig";
import { ToneMappingEffect, EffectPass, ToneMappingMode } from "postprocessing";
var ToneMappingModeStr = /* @__PURE__ */ ((ToneMappingModeStr2) => {
ToneMappingModeStr2["REINHARD"] = "REINHARD";
ToneMappingModeStr2["REINHARD2"] = "REINHARD2";
ToneMappingModeStr2["REINHARD2_ADAPTIVE"] = "REINHARD2_ADAPTIVE";
ToneMappingModeStr2["OPTIMIZED_CINEON"] = "OPTIMIZED_CINEON";
ToneMappingModeStr2["ACES_FILMIC"] = "ACES_FILMIC";
ToneMappingModeStr2["UNCHARTED2"] = "UNCHARTED2";
return ToneMappingModeStr2;
})(ToneMappingModeStr || {});
const TONE_MAPPING_MODES = [
"REINHARD" /* REINHARD */,
"REINHARD2" /* REINHARD2 */,
"REINHARD2_ADAPTIVE" /* REINHARD2_ADAPTIVE */,
"OPTIMIZED_CINEON" /* OPTIMIZED_CINEON */,
"ACES_FILMIC" /* ACES_FILMIC */,
"UNCHARTED2" /* UNCHARTED2 */
];
const REMAPPED_TONE_MAPPING = {
["REINHARD" /* REINHARD */]: ToneMappingMode.REINHARD,
["REINHARD2" /* REINHARD2 */]: ToneMappingMode.REINHARD2,
["REINHARD2_ADAPTIVE" /* REINHARD2_ADAPTIVE */]: ToneMappingMode.REINHARD2_ADAPTIVE,
["OPTIMIZED_CINEON" /* OPTIMIZED_CINEON */]: ToneMappingMode.OPTIMIZED_CINEON,
["ACES_FILMIC" /* ACES_FILMIC */]: ToneMappingMode.ACES_FILMIC,
["UNCHARTED2" /* UNCHARTED2 */]: ToneMappingMode.UNCHARTED2
};
class ToneMappingPostParamsConfig extends NodeParamsConfig {
constructor() {
super(...arguments);
/** @param mode */
this.mode = ParamConfig.INTEGER(TONE_MAPPING_MODES.indexOf("ACES_FILMIC" /* ACES_FILMIC */), {
menu: {
entries: TONE_MAPPING_MODES.map((name, value) => ({ name, value }))
},
...PostParamOptions
});
/** @param adaptive */
this.adaptive = ParamConfig.BOOLEAN(0, {
...PostParamOptions
});
}
}
const ParamsConfig = new ToneMappingPostParamsConfig();
export class ToneMappingPostNode extends TypedPostNode {
constructor() {
super(...arguments);
this.paramsConfig = ParamsConfig;
this._rendererSize = new Vector2();
}
static type() {
return "toneMapping";
}
createPass(context) {
context.renderer.getSize(this._rendererSize);
const toneMappingEffectOptions = {
mode: this.toneMapping()
};
const bloomEffect = new ToneMappingEffect(toneMappingEffectOptions);
const pass = new EffectPass(context.camera, bloomEffect);
this.updatePass(pass);
return pass;
}
updatePass(pass) {
const effect = pass.effects[0];
effect.mode = this.toneMapping();
}
toneMapping() {
return REMAPPED_TONE_MAPPING[TONE_MAPPING_MODES[this.pv.mode]];
}
}