UNPKG

@polygonjs/polygonjs

Version:

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

43 lines (42 loc) 1.3 kB
"use strict"; 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); } }