11import { Uniform } from "three" ;
22import { Pass } from "../core/Pass.js" ;
33import { LuminancePass } from "../passes/LuminancePass.js" ;
4- import { MipmapBlurPass } from "../passes/MipmapBlurPass.js" ;
4+ import { MipmapBlurPass , MipmapBlurPassOptions } from "../passes/MipmapBlurPass.js" ;
55import { LuminanceMaterial } from "../materials/LuminanceMaterial.js" ;
66import { AddBlendFunction } from "./blending/blend-functions/AddBlendFunction.js" ;
77import { 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