Bloom
A magic spell discharges and the screen briefly blooms into radiant white. A flashbang detonates and bright pixels explode outward into a wash of light. An explosion’s HDR pop bleeds into everything around it for a fraction of a second.
That’s Bloom. A post-process effect that takes the brightest pixels in your camera image and lets them bleed into their darker neighbours, producing a glow halo. Animated over time, it’s how you sell a moment of intense brightness — a flash, a discharge, a power-up.
What it transforms
Section titled “What it transforms”A Roblox BloomEffect instance, typically parented to Lighting.
Like Blur, the BloomEffect doesn’t move; it applies to the whole rendered camera image regardless of where in the scene the bright pixels are. Transform marks the BloomEffect as a Part-Icles emitter and exposes its three animated graphs.
How Bloom decides what to glow
Section titled “How Bloom decides what to glow”Bloom doesn’t make everything brighter. It only affects pixels above a brightness threshold. That’s what Threshold controls — and it’s the one knob that decides which parts of the scene contribute to the bloom. Lower the Threshold and more of the scene starts blooming (any moderately bright pixel contributes); raise it and only the brightest pixels do.
Once Bloom has decided which pixels qualify, two more knobs shape the look. Intensity controls how strongly those pixels glow; Size controls how far the glow spreads from each contributing pixel.
The three interact. A low Threshold + low Intensity + small Size produces a subtle pastel glow on much of the scene. A high Threshold + high Intensity + large Size produces dramatic localised flashes from only the brightest objects. Different combinations give you different aesthetics — soft dreamy bloom vs. punchy HDR flares.
Properties at a glance
Section titled “Properties at a glance”The full surface area, grouped by panel section.
Spawning
Section titled “Spawning”| Panel label | Data attribute | Type | Default | What it does |
|---|---|---|---|---|
| Mode | EmissionMode | enum | Emit | Emit (per-emission clones) or Animate (singleton clone, looping) |
| Loop | AnimateLoop | boolean | false | Whether Animate mode loops the cycle |
| Enabled | Enabled (attribute) | boolean | false | Master on/off |
| Rate | Rate | number | 10 | Emit rate per second (Emit mode only) |
| Lifetime | Lifetime | NumberRange | 1 | Seconds each clone lives |
Appearance
Section titled “Appearance”| Panel label | Data attribute | Type | Default | What it does |
|---|---|---|---|---|
| Intensity | BloomIntensity | NumberSequence | 0.4 | Glow strength graph |
| Size | BloomSize | NumberSequence | 24 | Glow spread radius graph, in pixels |
| Threshold | BloomThreshold | NumberSequence | 0.95 | Brightness cutoff graph — only pixels above this glow |
Advanced
Section titled “Advanced”| Panel label | Data attribute | Type | Default | What it does |
|---|---|---|---|---|
| Anim. Steps | TotalKeyFrames | number | 100 | Pre-sample resolution for the graphs |
| Linger | PartLife | number | 0 | Seconds the clone lingers after Lifetime |
| Emit Into | EmitParent | Instance | nil | Where the clone parents — overrides Lighting |
Intensity
Section titled “Intensity”A NumberSequence graph that controls how strongly bright pixels bloom. Higher values produce more visible glow.
Roblox’s BloomEffect.Intensity is unbounded — a value of 5 is a strong bloom, 10 is overpowering, 20 saturates the screen entirely. For most flash-style effects, a graph that peaks somewhere in the 2–6 range and decays back to 0–1 produces a clean radiant burst.
The data attribute is BloomIntensity to disambiguate from native Roblox BloomEffect.Intensity.
A NumberSequence graph for the bloom spread radius, in pixels. Larger values produce a wider, softer halo around bright pixels; smaller values produce tight, focused glow.
A Size = 24 (Roblox’s typical default) produces a moderate spread. A Size = 8 produces sharp localised glow. A Size = 56 produces a wide diffuse wash.
For a “tight flash” effect, a small Size combined with high Intensity produces a punchy, localised burst. For an “ethereal glow” effect, a larger Size combined with moderate Intensity produces a softer, dreamier halo. Both are useful in different contexts.
Threshold
Section titled “Threshold”A NumberSequence graph for the brightness cutoff. Pixels brighter than this value contribute to the bloom; pixels at or below it don’t.
Roblox uses a normalised brightness scale — 1.0 corresponds roughly to “fully white in standard rendering,” and values above represent HDR (high dynamic range) intensities. Neon-material parts, emissive surfaces, and sufficiently lit white surfaces routinely exceed 1.0 in Roblox’s HDR pipeline.
A Threshold = 0.5 makes most of a sunlit scene bloom (anything moderately bright qualifies). A Threshold = 0.95 (the default) makes only near-white pixels bloom — Neon parts, explosion flashes, sun glints. A Threshold = 5.0 confines the bloom to only the brightest HDR pixels in the scene.
For a “selective flash” effect, animate Threshold downward during the emission’s peak and back up at the end. The threshold drop briefly lets more pixels into the bloom, producing a momentary scene-wide glow. The threshold rise restricts the bloom back to its baseline.
The singleton-clone pattern
Section titled “The singleton-clone pattern”Bloom uses the same singleton-clone pattern as Blur — and for the same reason. Multiple BloomEffects in Lighting do compose in Roblox; their Intensity and Size values stack on top of each other into a single brighter, wider final bloom. That’s exactly the problem at high Emit-mode rates: each short-lived BloomEffect clone adds to the running total, the bloom escalates frame by frame, then drops as clones expire. The result reads as flicker or runaway. Two effects each driving their own Bloom emitter on top of one another also clobber intent.
So when EmissionMode = "Animate":
- One duplicate BloomEffect is created in
Lighting(orEmitParent). - The three graphs play over the duplicate’s
Lifetime. - With
AnimateLoop = true, the cycle restarts when it ends. - Re-emit calls while the duplicate is alive are silently dropped — a second Emit call (from the same emitter or another effect’s emit pulse on the same instance) is a no-op until the active cycle finishes.
- The duplicate is destroyed when its Lifetime ends (with
AnimateLoop = false).
This is a plugin-level protection, not a Roblox engine constraint. The only screen type Roblox itself enforces as a singleton is Atmosphere — Bloom, Blur, and ColorCorrection all support multiple instances with their values compounded.
For Emit mode, this protection isn’t active. Use Animate mode for any Bloom that should run continuously while enabled.
Emit Into
Section titled “Emit Into”Same role as on Blur. Default is Lighting; override to a custom container if you need to. For Bloom, the duplicate must be parented inside Lighting to render — overriding Emit Into away from Lighting effectively disables the effect.
Worth knowing
Section titled “Worth knowing”A few Bloom-specific quirks.
Bloom amplifies bright pixels regardless of source. If your scene already has many Neon parts, bright UI, or HDR-lit surfaces, your Bloom emitter affects all of them, not just the moment you’re trying to draw attention to. Audit your scene’s existing brightness profile before authoring a Bloom — what looks subtle in a daylight scene may be overwhelming in a dark scene.
Bloom composes with existing Lighting effects. If your Lighting already contains a BloomEffect (a permanent ambient bloom set by your game’s lighting designer), an emitted Bloom layers on top of it. The result can be unintentionally extreme. Either disable the permanent BloomEffect during the emission, or design the emitted graph with the existing baseline in mind.
For localised glows, prefer a Part-emitter approach. Bloom is a global post-process; it can’t tell “make this object glow” from “make the whole screen glow.” A Part emitter with a high Brightness graph and an emissive material, or a PointLight with strong Range, gets you a localised glow with less collateral than a Bloom emitter.
Threshold has no 0 floor. Setting Threshold to 0 does not mean “no bloom” — it means “every pixel above zero brightness blooms,” which is most of them. To turn off bloom, set Intensity to 0, not Threshold.
What’s next
Section titled “What’s next”ColorCorrection is the third post-process emitter type. Where Blur has one graph and Bloom has three, ColorCorrection has four — Brightness, Contrast, Saturation, and a ColorSequence Tint. The signed-graph behaviour (negative values are valid, unlike most plugin graphs) is worth flagging up front.