<!--
{
  "availability" : [
    "iOS: 27.0.0 -",
    "iPadOS: 27.0.0 -",
    "macCatalyst: 27.0.0 -",
    "macOS: 27.0.0 -",
    "tvOS: 27.0.0 -",
    "visionOS: 27.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "RealityKit",
  "identifier" : "/documentation/RealityKit/BloomComponent",
  "metadataVersion" : "0.1.0",
  "role" : "Structure",
  "symbol" : {
    "kind" : "Structure",
    "modules" : [
      "RealityKit"
    ],
    "preciseIdentifier" : "s:17RealityFoundation14BloomComponentV"
  },
  "title" : "BloomComponent"
}
-->

# BloomComponent

The `BloomComponent` adds a luminous glow effect around bright objects in the scene
by extracting and blurring the brightest parts of the image, then combining them
back with the original rendering. If scope is set to `unbounded` Bloom will be computed
on the entire screen. If scope is set to `hierarchical` multiple Bloom Components can be
used to opt in only the regions around certain objects for blooming.

```
struct BloomComponent
```

## Overview

Bloom is available on devices with Apple7 GPU family feature support.
Note: On visionOS, Bloom only works in an immersive space and will have no effect in a shared space.

To adjust the appearance of the bloom effect, you also need a `BloomOptionsComponent`

Example Code:

```swift
// Add the bloom component to the root and set it to unbounded.
// This enables bloom in the scene with default parameters
var bloomComponent = BloomComponent()
bloomComponent.scope = .unbounded
self.root.components.set(bloomComponent)

// Add the bloom options component to the root.
// Set strength 1 for a bright effect and threshold 0 so that
// everything blooms no matter how dim.
var bloomOptionsComponent = BloomOptionsComponent()
bloomOptionsComponent.strength = 1
bloomOptionsComponent.threshold = 0
self.root.components.set(bloomOptionsComponent)
```

## Performance and thermal state

Bloom is a screen-space effect, so its cost scales with how much of the screen it touches.
There are two distinct contributions to keep in mind:

- **Applying the bloom** is proportional to the on-screen size of the bloomers — the bright
  regions that exceed the [`threshold`](/documentation/RealityKit/BloomOptionsComponent/threshold). Larger and brighter bloomers
  and a larger [`blurRadius`](/documentation/RealityKit/BloomOptionsComponent/blurRadius) increase this cost.
- **Searching for bloom** is a separate step with a large cost that is proportional to the
  portion of the screen scanned for bright pixels. With [`unbounded`](/documentation/RealityKit/BloomComponent/BloomScope/unbounded) this scans the
  entire screen regardless of how much of the scene actually blooms.

You can shrink the searched region — and therefore this large cost — by using
[`hierarchical`](/documentation/RealityKit/BloomComponent/BloomScope/hierarchical) and attaching a `BloomComponent` to the entities that should bloom.
Bloom is then only searched for and applied within the screen-space bounds of those entity
hierarchies. Prefer [`hierarchical`](/documentation/RealityKit/BloomComponent/BloomScope/hierarchical) whenever you know which objects bloom; reserve
[`unbounded`](/documentation/RealityKit/BloomComponent/BloomScope/unbounded) for cases where bright pixels can appear anywhere on screen.

Excessive bloom may contribute to user-noticeable frame drops and can cause the device to heat
up in graphically demanding scenes. Monitor the thermal state and shrink the bloom region
(prefer [`hierarchical`](/documentation/RealityKit/BloomComponent/BloomScope/hierarchical) over [`unbounded`](/documentation/RealityKit/BloomComponent/BloomScope/unbounded)), lower the
[`blurRadius`](/documentation/RealityKit/BloomOptionsComponent/blurRadius), raise the [`threshold`](/documentation/RealityKit/BloomOptionsComponent/threshold), or disable
bloom entirely if necessary.

To stay responsive to the device’s available thermal headroom, read
`ProcessInfo.processInfo.thermalState` and observe
[`ProcessInfo.thermalStateDidChangeNotification`](https://developer.apple.com/documentation/foundation/processinfo/thermalstatedidchangenotification)
to react when it changes. As the reported state moves from `.fair` toward `.serious` and
`.critical`, reduce bloom’s footprint.

## Topics

### Creating a bloom component

[`init(scope:)`](/documentation/RealityKit/BloomComponent/init(scope:))

Creates a BloomComponent with the specified scope.

### Configuring the bloom scope

[`scope`](/documentation/RealityKit/BloomComponent/scope)

The scope of where bloom will be computed

[`BloomScope`](/documentation/RealityKit/BloomComponent/BloomScope)

## Relationships

### Conforms To

[`Component`](/documentation/RealityKit/Component)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)