Additional Topics
intermediate conceptsGlobal Snow (URP) · Core Concepts
Moving Objects (Characters, Vehicles)
Global Snow paints snow per pixel in the deferred pass. For every surface it looks at the world-space normal (only faces pointing up get snow) and at the zenithal coverage captured at that spot (nothing under a roof gets snow). It does not know whether an object is static or moving, which has three consequences for characters and vehicles:
- When the object tilts or animates, the snow re-settles on whatever faces up at that moment, so it slides across the mesh.
- The snow depends on where the object is now: driving under a bridge or into a garage removes it, and the zenithal capture is refreshed at intervals, so a fast vehicle can carry stale coverage for a moment.
- The snow textures are projected in world space, so the pattern drifts over a moving surface.
For slow props in open areas this is often acceptable and needs no setup. For vehicles and characters, use the steps below: exclude the object from the global effect, then give it its own snow material.
Step 1 - Exclude the Moving Object
Remove the global snow from the object so the scene-wide effect no longer paints it. Choose one of these two methods:
A) Layer Mask. Put the object on its own layer and remove that layer from Coverage > Layer Mask in the Global Snow inspector. Objects on the Default layer (layer 0) are never excluded by the mask, so the object must have a dedicated layer for this method to work.
B) GlobalSnowIgnoreCoverage component. Add it to the root of the vehicle or character. It applies to every renderer in its children and works on any layer.
| Parameter | Description |
|---|---|
| Receive Snow | Off (default) excludes the object from the global snow. On forces snow on it even when its layer is excluded by the Layer Mask. |
| Block Snow | Off (default) removes the object from the zenithal coverage capture, so the ground below it keeps its snow. This is what you want for anything that moves: a parked car should not leave a snow-free rectangle behind when it drives away. On makes the object cast a coverage shadow like a roof. |
| Use Fast Mask Shader | On (default) draws the exclusion mask with a fast replacement shader. Turn it off for materials with vertex displacement or vertex animation (skinned characters are fine either way) so the mask follows the deformed mesh; this uses the object's own material and is a bit slower. |
| Exclusion Cut Off | Alpha cut-off used when the fast mask shader excludes materials with alpha clipping (foliage, fences). 0 disables the test. |
The related settings live in Coverage > Exclusion of the Global Snow inspector: Default Exclusion Layer (an unused layer Global Snow borrows during the exclusion pass, default 27), Exclusion Depth Bias, Exclusion Double Sided and Default Cut Off.
Step 2 - Apply the Moving Object Snow Shader
Global Snow includes a material shader that renders the snow inside the object's own material, so the snow stays on the object wherever it goes: GlobalSnow/Moving Object Snow/Opaque (folder GlobalSnow/Runtime/Resources/GlobalSnow/MovingObjects/SimpleLitSnow). It is based on the URP Simple Lit shader and keeps its inputs: Base Map, Base Color, Smoothness and Specular, Normal Map, Emission, alpha clipping and shadow reception. The snow uses the textures, relief, glitter and brightness of the Global Snow component in the scene, so it matches the look of the terrain snow.
- Complete Step 1 first. If the object is not excluded, the deferred pass paints a second layer of snow over the material.
- Duplicate the object's material and switch its shader to
GlobalSnow/Moving Object Snow/Opaque. Reassign the Base Map and Normal Map if they were not carried over. - Adjust the snow parameters of the material.
| Parameter | Description |
|---|---|
| Snow Tint Color | Multiplies the snow color of this material. |
| Coverage | Amount of snow. 0 = no snow, 1 = default, up to 10. Animate it from script (material.SetFloat("_SnowCoverage", value)) to melt the snow when the vehicle enters a garage or to build it up during a storm. |
| Snow Scale | Tiling of the snow textures on this object. Increase it on small objects so the pattern stays visible. |
| Scatter | Breaks the coverage into patches with noise. 0 = uniform, 10 = very patchy. |
| Slope Threshold | Minimum upward facing (world normal) for a surface to hold snow. Default 0.7 covers roofs, hoods and shoulders; lower values push snow onto steeper faces. |
| Slope Noise | Randomizes the slope threshold across the surface so the snow edge is irregular. |
| Slope Sharpness | Softness of the snow edge along the slope. Higher values give a crisper boundary. |
What this shader gives you and what it does not:
- The snow amount no longer depends on the zenithal coverage or on the object's position: the vehicle keeps its snow under bridges, inside buildings and while the coverage map is refreshing.
- The slope test still uses the world normal, so snow sits on the top surfaces of the object and moves with it when it tilts, as real snow would.
- Only an opaque variant is provided. Transparent parts (glass) keep their own material.
- Each material has its own Coverage, so a convoy can mix clean and snowed vehicles.
Step 3 - Vehicle Wheel Tracks (Optional)
Terrain marks are collision driven. Enable Features > Terrain Marks in the Global Snow inspector (see Terrain Marks parameters) and make sure the physics contact exists: the vehicle needs colliders and a Rigidbody, and the ground needs a collider. Global Snow adds its collision listener to every Unity Terrain automatically; for ground made of meshes, add the GlobalSnowCollisionDetector component to the ground object.
Add GlobalSnowColliderExtraInfo to the vehicle root (or to each wheel) to control the marks it leaves:
| Parameter | Description |
|---|---|
| Mark Size | Size of the stamp left by this collider. Default 0.25. Without the component, Global Snow uses the Default Size of the Terrain Marks section. |
| Collision Distance Threshold | Minimum distance travelled between two marks. Default 0.1. |
| Is Footprint | Leaves a single stamp per contact instead of a continuous trail. Keep it off for wheels. |
| Step Max Distance | Maximum length of one trail segment between the previous and the current contact. 0 stamps only the contact points without interpolation. Default 20. |
| Rotation Threshold | Rotation in degrees that triggers a new mark while the object turns in place. Default 3. |
| Ignore This Collider | Skips marks for this collider. Use it on the body of the vehicle so only the wheels leave tracks. |
Character Footprints
The GlobalSnowFootsteps component makes a character leave a footprint under each foot, exactly where it lands, with independent left and right prints. In the Third Person footprint mode, Global Snow adds this component automatically to the assigned Character Root; you can also add it manually to any character or NPC.
Feet are auto-detected on humanoid rigs from the Animator. For other rigs (animals, robots), assign the feet transforms manually: even entries are left feet, odd entries are right feet.
| Parameter | Description |
|---|---|
| Feet | Feet transforms. Leave empty to auto-detect humanoid feet. |
| Toe Offset | Shifts the print from the ankle bone toward the toes so it matches the actual contact area. |
| Advanced: Plant Height / Max Plant Speed | A foot counts as planted when it is low and nearly still, so the print lands where the foot rests. The speed limit scales automatically with the character speed. The defaults work for standard humanoid rigs. |
| Advanced: Replant Distance | A resting foot that slides this far without lifting (small shuffling steps) leaves a new print. |
| Advanced: Debug Log | Logs plant events and per-foot height and speed to the console. |
Coverage Mask Editor
The Coverage Mask allows you to paint snow on or off using a texture. The alpha channel controls opacity: 1 = full snow, 0 = no snow.
Inspector Setup
| Parameter | Description |
|---|---|
| Coverage Mask | Enable the mask system and assign an alpha texture. |
| World Center | Center position of the mask in world coordinates. |
| World Size | Size in meters. Controls the area the mask covers. |
| Fill Outside | When enabled, areas outside the mask bounds receive full snow. |
Scene View Mask Editor
Enable the Mask Editor section in the inspector to paint directly in the Scene View:
- Resolution - 1024 for coarse, 2048-8192 for fine detail.
- Brush Mode - add or remove snow.
- Width / Fuzziness / Opacity - brush settings.
- Fill Mask - reset to fully snowed.
- Clear Mask - remove all snow from the covered area.
Per-Object Exclusion (GlobalSnowIgnoreCoverage)
Attach this script to any GameObject for fine-grained control over snow coverage. It affects the object and all its children.
| Option | Description |
|---|---|
| Receive Snow | When enabled, forces the object to receive snow even if its layer is excluded from the Layer Mask (acts as an override). When disabled (default), the object is rendered into the exclusion buffer and will not show snow. |
| Block Snow | When enabled, the object blocks snow on surfaces beneath it during the zenithal pass (use for shelters, roofs, bridges). When disabled (default), the object is temporarily moved to the exclusion layer during the zenithal capture, so it does not cast coverage shadows downward. |
| Use Fast Mask Shader | Uses an optimized depth-only shader for exclusion rendering. Disable for objects with vertex animation in custom shaders, so the exclusion mask matches the deformed mesh. Default enabled. |
| Exclusion Cut Off | Alpha threshold for semi-transparent objects. Pixels with alpha below this value are not excluded. Range 0-1. |
GlobalSnowIgnoreCoverage with Receive Snow disabled. The Layer Mask cannot exclude objects on Layer 0.
Per-Collider Settings (GlobalSnowColliderExtraInfo)
Attach this script to any GameObject with a collider to customize how it interacts with terrain marks. Also supports WheelCollider automatically - wheel-ground contact points are reported for terrain marks each frame.
| Option | Description |
|---|---|
| Mark Size | Snow mark radius for this specific collider. Default 0.25. |
| Is Footprint | Stamps a single footprint instead of a continuous trail. Enable for foot colliders on humanoid characters. |
| Collision Distance Threshold | Minimum distance between consecutive marks. Prevents overlapping stamps. Default 0.1. |
| Step Max Distance | Maximum distance for trail interpolation between frames. Prevents gaps when moving fast. Default 20. Set to 0 to disable interpolation. |
| Rotation Threshold | Minimum rotation (in degrees) to trigger a new mark. Default 3. |
| Ignore This Collider | Completely ignore this collider for snow marks. |
Transition / Lerping Between Profiles
All Global Snow properties are animatable. For quick transitions between two snow configurations, use the GlobalSnowLerp script:
- Add the Global Snow Lerp component to any GameObject.
- Configure Profile 1 and Profile 2 with different snow settings.
- Adjust the Transition slider (0 = Profile 1, 1 = Profile 2) to blend between them.
| Parameter | Description |
|---|---|
| Target Global Snow | Auto-detected at Start. Assign manually if you instantiate late. |
| Transition | Blend factor: 0 = Profile 1, 1 = Profile 2. |
| Left / Right Key | Keyboard shortcuts to decrease/increase the transition at runtime. |
| Profile 1 / Profile 2 | Complete snow configuration presets to lerp between. |
Coverage Update Methods
The zenithal depth pass can be updated in several modes:
| Method | When to Use |
|---|---|
| Every Frame | Scenes with frequently moving dynamic objects over snow areas. |
| Discrete | Most scenes. Recalculates when the camera moves a threshold distance. |
| Manual | Fully static scenes. Call UpdateSnowCoverage() from script when needed. |
| Disabled | No coverage updates. Snow placement is fixed. |
Next Steps
- Scripting Support (C#) - runtime API for mask painting, footprints, and snow queries.
- Troubleshooting - solutions to common issues.
Suggest an improvement
Help us improve this documentation page.