Skip to content

Commit ade8597

Browse files
committed
Add support for fullResolutionUpsampling
and improve resource usage
1 parent 9571d71 commit ade8597

File tree

2 files changed

+142
-85
lines changed

2 files changed

+142
-85
lines changed

src/effects/BloomEffect.ts

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Uniform } from "three";
22
import { Pass } from "../core/Pass.js";
33
import { LuminancePass } from "../passes/LuminancePass.js";
4-
import { MipmapBlurPass } from "../passes/MipmapBlurPass.js";
4+
import { MipmapBlurPass, MipmapBlurPassOptions } from "../passes/MipmapBlurPass.js";
55
import { LuminanceMaterial } from "../materials/LuminanceMaterial.js";
66
import { AddBlendFunction } from "./blending/blend-functions/AddBlendFunction.js";
77
import { Effect } from "./Effect.js";
@@ -14,7 +14,7 @@ import fragmentShader from "./shaders/bloom.frag";
1414
* @category Effects
1515
*/
1616

17-
export interface BloomEffectOptions {
17+
export interface BloomEffectOptions extends MipmapBlurPassOptions {
1818

1919
/**
2020
* The luminance threshold. Raise this value to mask out darker elements in the scene.
@@ -40,24 +40,6 @@ export interface BloomEffectOptions {
4040

4141
intensity?: number;
4242

43-
/**
44-
* The blur radius.
45-
*
46-
* @defaultValue 0.85
47-
*/
48-
49-
radius?: number;
50-
51-
/**
52-
* The amount of MIP levels.
53-
*
54-
* At 720p 8 steps are likely too much, while at 4K a they might not be enough.
55-
*
56-
* @defaultValue 8
57-
*/
58-
59-
levels?: number;
60-
6143
}
6244

6345
/**
@@ -94,7 +76,9 @@ export class BloomEffect extends Effect {
9476
luminanceSmoothing = 0.03,
9577
intensity = 1.0,
9678
radius = 0.85,
97-
levels = 8
79+
levels = 8,
80+
fullResolutionUpsampling,
81+
clampToBorder
9882
}: BloomEffectOptions = {}) {
9983

10084
super("BloomEffect");
@@ -111,14 +95,13 @@ export class BloomEffect extends Effect {
11195
luminanceMaterial.smoothing = luminanceSmoothing;
11296
luminanceMaterial.colorOutput = true;
11397

114-
const mipmapBlurPass = new MipmapBlurPass();
115-
mipmapBlurPass.radius = radius;
116-
mipmapBlurPass.levels = levels;
98+
const mipmapBlurPass = new MipmapBlurPass({ levels, radius, fullResolutionUpsampling, clampToBorder });
11799
this.mipmapBlurPass = mipmapBlurPass;
118100

119101
const uniforms = this.input.uniforms;
120-
uniforms.set("map", new Uniform(this.mipmapBlurPass.texture));
121102
uniforms.set("intensity", new Uniform(intensity));
103+
uniforms.set("map", new Uniform(null));
104+
mipmapBlurPass.texture.bindUniform(uniforms.get("map")!);
122105

123106
this.subpasses = [luminancePass, mipmapBlurPass];
124107

@@ -162,12 +145,12 @@ export class BloomEffect extends Effect {
162145

163146
if(this.luminancePass.enabled) {
164147

165-
this.luminancePass.input.defaultBuffer = this.input.defaultBuffer?.value ?? null;
148+
this.luminancePass.input.defaultBuffer = this.input.defaultBuffer;
166149
this.mipmapBlurPass.input.defaultBuffer = this.luminancePass.texture;
167150

168151
} else {
169152

170-
this.mipmapBlurPass.input.defaultBuffer = this.input.defaultBuffer?.value ?? null;
153+
this.mipmapBlurPass.input.defaultBuffer = this.input.defaultBuffer;
171154

172155
}
173156

0 commit comments

Comments
 (0)