Home Reference Source

src/effects/BokehEffect.js

import { Uniform } from "three";
import { EffectAttribute } from "../enums/EffectAttribute.js";
import { Effect } from "./Effect.js";

import fragmentShader from "./glsl/bokeh.frag";

/**
 * A depth of field (bokeh) effect.
 *
 * Original shader code by Martins Upitis:
 * http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html
 *
 * @deprecated Use DepthOfFieldEffect instead.
 */

export class BokehEffect extends Effect {

	/**
	 * Constructs a new bokeh effect.
	 *
	 * @param {Object} [options] - The options.
	 * @param {BlendFunction} [options.blendFunction] - The blend function of this effect.
	 * @param {Number} [options.focus=0.5] - The focus distance ratio, ranging from 0.0 to 1.0.
	 * @param {Number} [options.dof=0.02] - Depth of field. An area in front of and behind the focal point that still appears sharp.
	 * @param {Number} [options.aperture=0.015] - Camera aperture scale. Bigger values for stronger blur and shallower depth of field.
	 * @param {Number} [options.maxBlur=1.0] - The maximum blur strength.
	 */

	constructor({
		blendFunction,
		focus = 0.5,
		dof = 0.02,
		aperture = 0.015,
		maxBlur = 1.0
	} = {}) {

		super("BokehEffect", fragmentShader, {
			blendFunction,
			attributes: EffectAttribute.CONVOLUTION | EffectAttribute.DEPTH,
			uniforms: new Map([
				["focus", new Uniform(focus)],
				["dof", new Uniform(dof)],
				["aperture", new Uniform(aperture)],
				["maxBlur", new Uniform(maxBlur)]
			])
		});

	}

}