Performance Tips

intermediate performance

Global Snow · Troubleshooting & FAQ

Overview

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

Choose the Right Rendering Path

ScenarioRecommended PathReason
Desktop / ConsolesDeferredBest performance — no extra full-screen blit. GBuffer modification is very efficient.
Mobile (mid-range)Forward + Distance OptimizationForward path with aggressive distance cutoff keeps fill rate in check.
Mobile (low-end)Decal variantNo full-screen blit at all. Download from the support forum.

Optimization Checklist

OptimizationImpactDetails
Use Fastest quality presetHighFlat shading, smaller coverage texture, 100 m distance optimization. Still looks good for many art styles.
Enable Distance OptimizationHighUses a simpler algorithm beyond a set distance. The Medium preset enables this at 500 m by default.
Reduce Coverage ExtensionMediumA value of 1 (256x256 m) instead of 2 (512x512 m) halves the coverage area computation.
Lower Coverage QualityMediumQuality 1 (512x512 texture) instead of 3 (2048x2048) saves significant GPU bandwidth.
Set zenithal update to DiscreteMediumAvoids recalculating coverage every frame. Only updates every ~50 m of camera movement.
Disable unused featuresMediumTurn off Footprints, Terrain Marks, Camera Frost, Snowfall, and Snow Dust if not needed.
Exclude particle systems from Zenithal MaskLowPrevents particles from triggering unnecessary coverage recalculations.
Delete unused workflow folderBuild sizeIf using deferred only, delete Resources/Workflow_Forward (and vice versa) to reduce shader compile time.

Reducing Shader Variants (Forward Path)

The forward rendering path compiles multiple shader variants via multi_compile directives. If you know which features you will always use, you can convert them to hard-coded defines to reduce compile time and variant count:

// In GlobalSnow.shader, replace:
#pragma multi_compile __ GLOBALSNOW_TERRAINMARKS

// With (if you always want terrain marks):
#define GLOBALSNOW_TERRAINMARKS 1

Repeat for any feature keywords you want to lock in:

  • GLOBALSNOW_FLAT_SHADING / GLOBALSNOW_RELIEF / GLOBALSNOW_OCCLUSION
  • GLOBALSNOW_OPAQUE_CUTOUT
  • GLOBALSNOW_FOOTPRINTS
  • GLOBALSNOW_TERRAINMARKS
Deferred users: If you only use deferred, rename GlobalSnow.shader in Resources/Workflow_Forward/Shaders to GlobalSnow.shader.bak to skip compilation of the complex forward snow shader entirely.

Profiling

Use Unity's Frame Debugger (Window > Analysis > Frame Debugger) to measure the cost of Global Snow passes. In deferred mode, look for the GBuffer modification commands. In forward mode, look for the OnRenderImage pass.

Rule of thumb: On mid-range GPUs, the deferred path typically costs less than 0.5 ms. The forward path costs 1–3 ms depending on quality settings and resolution.

Next Steps

Was this page helpful?