UNPKG

@polygonjs/polygonjs

Version:

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

117 lines (116 loc) 3.73 kB
"use strict"; import { TypedPostNode, PostParamOptions } from "./_Base"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { N8AOPostPass } from "../../../core/render/post/n8ao"; var DisplayMode = /* @__PURE__ */ ((DisplayMode2) => { DisplayMode2["COMBINED"] = "Combined"; DisplayMode2["AO"] = "AO"; DisplayMode2["NO_AO"] = "No AO"; DisplayMode2["SPLIT"] = "Split"; DisplayMode2["SPLIT_AO"] = "Split AO"; return DisplayMode2; })(DisplayMode || {}); const DISPLAY_MODES = [ "Combined" /* COMBINED */, "AO" /* AO */, "No AO" /* NO_AO */, "Split" /* SPLIT */, "Split AO" /* SPLIT_AO */ ]; class ScreenSpaceAmbientOcclusionParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); this.main = ParamConfig.FOLDER(); /** @param color */ this.color = ParamConfig.COLOR([0, 0, 0], { ...PostParamOptions }); /** @param aoSamples */ this.samples = ParamConfig.INTEGER(16, { range: [0, 32], rangeLocked: [true, false], ...PostParamOptions }); /** @param intensity */ this.intensity = ParamConfig.FLOAT(5, { range: [0, 10], rangeLocked: [true, false], ...PostParamOptions }); /** @param radius */ this.radius = ParamConfig.FLOAT(5, { range: [0, 20], rangeLocked: [true, false], ...PostParamOptions }); /** @param distanceFallOff */ this.distanceFallOff = ParamConfig.FLOAT(1, { range: [0, 1], rangeLocked: [true, false], ...PostParamOptions }); /** @param halfRes */ this.halfRes = ParamConfig.BOOLEAN(0, { ...PostParamOptions }); /** @param screenSpaceRadius */ this.screenSpaceRadius = ParamConfig.BOOLEAN(0, { ...PostParamOptions }); /** @param denoise samples */ this.denoiseSamples = ParamConfig.INTEGER(8, { range: [0, 32], rangeLocked: [true, false], ...PostParamOptions }); /** @param denoise radius */ this.denoiseRadius = ParamConfig.FLOAT(12, { range: [0, 20], rangeLocked: [true, false], ...PostParamOptions }); /** @param denoise iterations */ this.denoiseIterations = ParamConfig.INTEGER(2, { range: [0, 4], rangeLocked: [true, false], ...PostParamOptions }); this.displayMode = ParamConfig.INTEGER(DISPLAY_MODES.indexOf("Combined" /* COMBINED */), { menu: { entries: DISPLAY_MODES.map((name, value) => { return { name, value }; }) } }); } } const ParamsConfig = new ScreenSpaceAmbientOcclusionParamsConfig(); export class ScreenSpaceAmbientOcclusionPostNode extends TypedPostNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return "screenSpaceAmbientOcclusion"; } createPass(context) { const n8aoPass = new N8AOPostPass(context.scene, context.camera); this.updatePass(n8aoPass); const passes = [n8aoPass]; return passes; } updatePass(pass) { pass.configuration.aoSamples = this.pv.samples; pass.configuration.aoRadius = this.pv.radius; pass.configuration.distanceFalloff = this.pv.distanceFallOff; pass.configuration.intensity = this.pv.intensity; pass.configuration.color.copy(this.pv.color); pass.configuration.halfRes = this.pv.halfRes; pass.configuration.screenSpaceRadius = this.pv.screenSpaceRadius; pass.configuration.denoiseSamples = this.pv.denoiseSamples; pass.configuration.denoiseRadius = this.pv.denoiseRadius; pass.configuration.denoiseIterations = this.pv.denoiseIterations; const displayMode = DISPLAY_MODES[this.pv.displayMode]; pass.setDisplayMode(displayMode); } }