@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
117 lines (116 loc) • 3.73 kB
JavaScript
"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);
}
}