Quick answer: Realtime probes default to “On Awake” refresh mode and only capture once. Switch to “Every Frame” for constant updates or call ReflectionProbe.RenderProbe() manually. Baked probes need a re-bake after any environment change.
Here is how to fix Unity reflection probes not updating. Your day-night cycle changes the skybox, or a car drives past a storefront window, or a door opens revealing a new room — and the reflection stays frozen on whatever the probe captured at scene load. Reflection probes in Unity have a refresh mode that defaults to “once at startup.” No warning, no UI hint, just stale reflections until you opt into dynamic updates.
The Symptom
A reflective surface (chrome, glass, water, puddle) shows an environment that no longer matches the scene. The skybox in the reflection differs from the current skybox. Moving objects that should show in the reflection are absent. Dynamic lights do not illuminate the reflected view.
A variant: the reflection does update but the frame rate drops dramatically when it does. Or the probe updates every few seconds rather than every frame, producing a visible stutter.
What Causes This
Refresh mode “On Awake.” The default. Unity captures the environment once when the probe first activates, then never again. Perfect for static interior scenes; wrong for anything with changing lighting.
Baked probe on a dynamic scene. Baked probes only capture objects marked Reflection Probe Static. Dynamic characters, moving props, runtime-spawned geometry — none appear. Switching to realtime is needed for dynamic content.
Time Slicing too aggressive. Time Slicing spreads probe capture cost across multiple frames. “Individual Faces” (default for Every Frame) updates one cubemap face per frame, so a full update takes 6 frames. At 60 FPS that is 100ms — noticeable as stuttering reflections during fast camera movement.
Probe culling mask excludes layers. If the probe’s Culling Mask is set to exclude the layer of your dynamic objects, they never appear in the capture regardless of refresh mode.
Probe not in range. A reflective object outside any probe’s Box Projection bounds falls back to the default reflection (skybox or global environment). If the skybox is your only visible reflection, the probe is not affecting that surface.
The Fix
Step 1: Set refresh mode correctly. Select the Reflection Probe, find “Type” in the Inspector. Options:
- Baked — captures once offline, zero runtime cost, static geometry only
- Realtime + On Awake — captures once at scene start
- Realtime + Every Frame — updates continuously (with time slicing)
- Realtime + Via Scripting — you control when it refreshes
For day-night cycles, use Via Scripting and call RenderProbe when the sun angle changes significantly (not every frame):
using UnityEngine;
using UnityEngine.Rendering;
public class ProbeUpdater : MonoBehaviour
{
[SerializeField] private ReflectionProbe probe;
[SerializeField] private Transform sun;
private float lastSunY = -999f;
void Update()
{
if (Mathf.Abs(sun.eulerAngles.x - lastSunY) > 1f)
{
probe.RenderProbe();
lastSunY = sun.eulerAngles.x;
}
}
}
Firing RenderProbe only when the environment changed avoids the cost of continuous updates while keeping reflections fresh.
Step 2: Configure Time Slicing. On the probe, set Time Slicing to match your needs. “No Time Slicing” gives instant updates but at full cost every frame — often 4–8 ms on its own. “All Faces at Once” amortizes over 2 frames. “Individual Faces” spreads over 6 frames and is the cheapest but least responsive.
Step 3: Verify culling mask. The probe’s Culling Mask determines which layers it captures. Default is Everything. If you explicitly deselected layers (for LOD or optimization), your dynamic objects may be in an excluded layer. Reselect Everything to confirm.
Step 4: Check Box Projection bounds. With Box Projection enabled, the probe only affects surfaces inside its bounding box. Enlarge the box or add more probes to cover the scene. For reflective floors in large rooms, one centered probe with generous bounds usually suffices.
Performance Tuning
Realtime reflection probes are expensive — 6 full scene renders per capture (one per cube face). For scenes with many reflective surfaces, use one realtime probe that covers the main view area and bake smaller probes for background detail. You can mix baked and realtime probes freely — Unity blends them based on priority and bounds.
For mobile, even one realtime probe at full resolution is costly. Reduce probe Resolution from 128 to 64 or 32, use Texture Compression, and consider updating only when the camera crosses a threshold rather than every frame.
Debugging Checklist
If reflections still look wrong after these fixes:
- Select the probe and click the “Bake” or “Bake Selected” preview button to see the current capture content. If it is wrong there, the capture itself is wrong (culling, geometry static flags). If it looks correct there but wrong in scene, the issue is blending between probes or falloff.
- Temporarily enable “Show Gizmos” and inspect probe bounds. Your reflective surface must be inside at least one probe’s influence.
- Use Frame Debugger (Window > Analysis > Frame Debugger) and find the probe rendering passes. If they are skipped, the refresh mode is not firing.
“Reflection probes are not animated cameras. You either bake, render every frame, or tell them explicitly when to update. Pick one and be intentional.”
Related Issues
For baked lighting issues generally, see Unity Baked Lightmap Looks Wrong. For URP-specific rendering bugs, LineRenderer Not Visible in URP covers related material/shader issues.
Refresh mode is the switch. On Awake means once. Every Frame with time slicing is usually the sweet spot.