Quick answer: HDRP volumetric fog reprojects the previous frame to save GPU cost, which causes visible swimming during camera motion. Switch fog Control to Manual, raise Volume Slice Count, enable Denoising, and reduce reprojection weight in the Volumetric Fog volume override.
Here is how to fix Unity HDRP volumetric fog that flickers, swims, or pops every time the camera moves. The fog looks great when the camera is still, but pan slightly and the entire frustum boils with noise. The problem is HDRP’s temporal reprojection: it amortizes fog cost across frames by reusing previous results, and quick camera motion invalidates the reprojection cache faster than it can be rebuilt.
The Symptom
Volumetric fog renders cleanly in screenshots and at zero camera velocity. As soon as the camera rotates or translates, the fog develops shimmering noise, low-resolution bands, or sudden brightness pops in slices that just entered the frustum. On lower-end GPUs the effect can look like the entire scene is underwater.
What Causes This
Reprojection invalidation. HDRP renders volumetric fog at a fraction of full resolution and reuses voxels from the previous frame. When the camera moves, voxels that were valid last frame are now in different screen positions and must be re-derived from a small number of new samples.
Voxel slice count too low. The default Balance mode keeps slice count low for performance. Fewer slices means more aliasing along the view direction, which becomes visible as bands when the camera moves through them.
Denoiser disabled. The Volumetric Fog override has a Denoising option. With it off, residual noise from the limited samples per voxel becomes obvious during motion.
Aggressive anisotropy with thick fog. High anisotropy (forward scattering) plus thick fog means a few stray samples can produce wildly different brightness, amplifying flicker.
The Fix
Step 1: Switch the HDRP Asset to Manual fog control. Open Assets → HDRP Asset → Lighting → Volumetrics and set Fog Control to Manual.
Step 2: Raise voxel slice count. Under Manual, set Volume Slice Count to 96 or 128 (default is often 64). Set Screen Resolution Percentage to 25 or higher. These two values directly determine how many voxels exist; more voxels means less reprojection sensitivity.
Step 3: Enable Denoising on the Volumetric Fog override.
// Volume override values for clean motion
Fog override:
Volumetric Fog = true
Albedo = (1, 1, 1)
Anisotropy = 0.0 // 0.5+ flickers more
Mip Fog = false
VolumetricFog override:
Quality = Custom
Denoising Mode = Reprojection And Gaussian
Reprojection Blend = 0.7 // Lower = less smear, more noise
Slice Distribution = 0.7 // Bias slices toward camera
Step 4: Reduce reprojection weight. The reprojection blend slider controls how much of the previous frame is mixed in. Values of 0.85+ smooth motion but produce ghost trails; 0.6–0.7 is a good compromise.
Step 5: Apply per-camera blur if needed. Add a Custom Pass or post-processing motion blur that softens the volumetric layer specifically. This hides residual flicker behind perceived motion blur.
When Local Volumetric Fog Is The Culprit
Local Volumetric Fog volumes can also flicker if their Distance Fade Start and Distance Fade End are too close together. Increase the gap so the volume fades smoothly rather than popping. Also confirm the volume’s blend mode is Additive rather than Multiply, which is more sensitive to sample noise.
// LocalVolumetricFog component
volumetricFog.distanceFadeStart = 10f;
volumetricFog.distanceFadeEnd = 50f; // Wider gap = smoother fade
volumetricFog.blendingMode = LocalVolumetricFogBlendingMode.Additive;
“Reprojection trades cost for stability. Move the slider, raise slice count, enable denoising. Three knobs, one good outcome.”
Performance Impact
Manual mode with 128 slices and 25% resolution costs noticeably more GPU time than the default. On Xbox Series S or low-end PC, expect 1–2 ms per frame additional. If the budget does not allow this, accept some reprojection swim and reduce camera velocity in design (slower turn rate, FOV-based desensitization).
Related Issues
For other URP/HDRP rendering bugs, see URP Post Processing Not Working in Build and Shadow Flickering / Z-Fighting.
More slices, more denoising, less reprojection weight. The fog stops boiling.