Performance Tips

intermediate performance

Global Snow (URP) · Troubleshooting & FAQ

Overview

Global Snow URP is already highly optimized - the deferred rendering path modifies GBuffers directly with minimal overhead. These tips help you squeeze out extra frames on lower-end hardware or large scenes.

Deferred GBuffer Approach

The URP version works exclusively with deferred rendering, which is the most efficient approach. Snow data is written directly into the GBuffers (albedo, normals, smoothness) during the deferred pass, avoiding extra full-screen blits. This means the base cost of Global Snow in URP is very low compared to forward-rendered solutions.

Rule of thumb: On mid-range GPUs, the deferred GBuffer modification typically costs less than 0.5 ms.

Optimization Checklist

OptimizationImpactDetails
Use Flat Shading qualityHighNo normal mapping or relief - the fastest quality mode. Still looks good for many art styles.
Reduce Coverage ResolutionHighCoverage Resolution 1 instead of 3 or 4 significantly reduces the zenithal depth texture cost.
Reduce Coverage ExtensionMediumExtension 1 (smallest area) instead of 4 reduces the coverage computation area.
Set coverage update to DiscreteMediumAvoids recalculating the zenithal depth every frame. Only updates when the camera moves a threshold distance.
Disable unused featuresMediumTurn off Footprints, Terrain Marks, Camera Frost, Snowfall, and Snow Dust if your scene does not need them.
Exclude particle systems from Zenithal MaskLowPrevents particles from triggering unnecessary coverage recalculations.
Optimize Snow Surface resolutionMediumIncrease Meters Per Vertex and lower Max Resolution on SnowSurface components to reduce triangle counts.
Use simplification on Snow SurfacesMediumIncrease the Simplification Normal Threshold to merge vertices on flat areas. Check IsSimplified and GetTriangleCounts() to monitor.

Exclusion Optimization

Per-object exclusion using GlobalSnowIgnoreCoverage requires rendering excluded objects into a mask buffer. To minimize cost:

  • Keep Use Fast Mask Shader enabled (default) unless the excluded object uses vertex animation.
  • Prefer layer-based exclusion over per-object exclusion when excluding many objects on the same layer.
  • Adjust Exclusion Bias to reduce artifacts rather than switching to double-sided exclusion, which is more expensive.

Snow Surface Performance

The SnowSurface component generates real geometry. To keep performance in check:

  • Set Meters Per Vertex to 0.5 or higher for large surfaces.
  • Cap Max Resolution to 128 or 64 on mobile or low-end platforms.
  • Use the Simplification Normal Threshold aggressively on flat terrain.
  • Limit the number of active SnowSurface components in a scene.

Profiling

Use Unity's Frame Debugger (Window > Analysis > Frame Debugger) to measure the cost of Global Snow passes. Look for the GBuffer modification commands and the zenithal coverage pass.

Use the Coverage Depth Debug toggle in the inspector to visualize the zenithal depth buffer and verify coverage is not being recalculated unnecessarily.

Next Steps

Was this page helpful?