@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
43 lines (42 loc) • 1.3 kB
JavaScript
;
import { TypedPostNode, PostParamOptions } from "./_Base";
import { ChromaticAberrationEffect, EffectPass } from "postprocessing";
import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig";
import { Vector2 } from "three";
const v2 = new Vector2();
class ChromaticAberrationPostParamsConfig extends NodeParamsConfig {
constructor() {
super(...arguments);
/** @param effect amount */
this.amount = ParamConfig.FLOAT(5e-3, {
range: [0, 0.01],
rangeLocked: [true, false],
...PostParamOptions
});
/** @param effect dir */
this.direction = ParamConfig.VECTOR2([1, 1], {
...PostParamOptions
});
}
}
const ParamsConfig = new ChromaticAberrationPostParamsConfig();
export class ChromaticAberrationPostNode extends TypedPostNode {
constructor() {
super(...arguments);
this.paramsConfig = ParamsConfig;
}
static type() {
return "chromaticAberration";
}
createPass(context) {
const effect = new ChromaticAberrationEffect();
const pass = new EffectPass(context.camera, effect);
this.updatePass(pass);
return pass;
}
updatePass(pass) {
const effect = pass.effects[0];
v2.copy(this.pv.direction).normalize().multiplyScalar(this.pv.amount);
effect.offset.copy(v2);
}
}