UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

75 lines (74 loc) 2.71 kB
"use strict"; 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]]; } }