---
# System prepended metadata

title: Reflection Probes
tags: [Required-Components]

---

# Bundles

## `ReflectionProbeBundle`

```rust
pub struct ReflectionProbeBundle {
    /// Contains a transform that specifies the position of this reflection probe in space.
    pub spatial: SpatialBundle,
    /// Marks this environment map as a light probe.
    pub light_probe: LightProbe,
    /// The cubemaps that make up this environment map.
    pub environment_map: EnvironmentMapLight,
}
```

### Proposal 1

```rust
#[derive(Component)]
#[require(LightProbe, Transform, Visibility)]
struct EnvironmentMapLight;
```

* EnvironmentMapLight is not always a light probe (ex: when it is on a Camera) so this will not work

### Proposal 2

```rust
#[derive(Component)]
#[require(Transform, Visibility)]
struct LightProbe;
```

For now, I think we need EnvironmentMapLight to be a "standalone non-driver component". We _could_ define a new `ReflectionProbe` component that requires both LightProbe and EnvironmentMapLight, but I think we should be conservative for now and reconsider the relationships between these components later. In practice this means that you need to spawn _both_ a `LightProbe` _and_ a `EnvironmentMapLight`.