Additional Topics

intermediate concepts

Global 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.

ParameterDescription
Receive SnowOff (default) excludes the object from the global snow. On forces snow on it even when its layer is excluded by the Layer Mask.
Block SnowOff (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 ShaderOn (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 OffAlpha 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.

Scene View vs. Game View: Exclusion results may appear incorrect in the Scene View. Always verify in the Game View.

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.

  1. Complete Step 1 first. If the object is not excluded, the deferred pass paints a second layer of snow over the material.
  2. 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.
  3. Adjust the snow parameters of the material.
ParameterDescription
Snow Tint ColorMultiplies the snow color of this material.
CoverageAmount 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 ScaleTiling of the snow textures on this object. Increase it on small objects so the pattern stays visible.
ScatterBreaks the coverage into patches with noise. 0 = uniform, 10 = very patchy.
Slope ThresholdMinimum 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 NoiseRandomizes the slope threshold across the surface so the snow edge is irregular.
Slope SharpnessSoftness 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:

ParameterDescription
Mark SizeSize 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 ThresholdMinimum distance travelled between two marks. Default 0.1.
Is FootprintLeaves a single stamp per contact instead of a continuous trail. Keep it off for wheels.
Step Max DistanceMaximum length of one trail segment between the previous and the current contact. 0 stamps only the contact points without interpolation. Default 20.
Rotation ThresholdRotation in degrees that triggers a new mark while the object turns in place. Default 3.
Ignore This ColliderSkips 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.

ParameterDescription
FeetFeet transforms. Leave empty to auto-detect humanoid feet.
Toe OffsetShifts the print from the ankle bone toward the toes so it matches the actual contact area.
Advanced: Plant Height / Max Plant SpeedA 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 DistanceA resting foot that slides this far without lifting (small shuffling steps) leaves a new print.
Advanced: Debug LogLogs 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

ParameterDescription
Coverage MaskEnable the mask system and assign an alpha texture.
World CenterCenter position of the mask in world coordinates.
World SizeSize in meters. Controls the area the mask covers.
Fill OutsideWhen 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.

OptionDescription
Receive SnowWhen 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 SnowWhen 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 ShaderUses 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 OffAlpha threshold for semi-transparent objects. Pixels with alpha below this value are not excluded. Range 0-1.
Tip: To exclude an object on Layer 0 (Default) from snow, add 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.

OptionDescription
Mark SizeSnow mark radius for this specific collider. Default 0.25.
Is FootprintStamps a single footprint instead of a continuous trail. Enable for foot colliders on humanoid characters.
Collision Distance ThresholdMinimum distance between consecutive marks. Prevents overlapping stamps. Default 0.1.
Step Max DistanceMaximum distance for trail interpolation between frames. Prevents gaps when moving fast. Default 20. Set to 0 to disable interpolation.
Rotation ThresholdMinimum rotation (in degrees) to trigger a new mark. Default 3.
Ignore This ColliderCompletely 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:

  1. Add the Global Snow Lerp component to any GameObject.
  2. Configure Profile 1 and Profile 2 with different snow settings.
  3. Adjust the Transition slider (0 = Profile 1, 1 = Profile 2) to blend between them.
ParameterDescription
Target Global SnowAuto-detected at Start. Assign manually if you instantiate late.
TransitionBlend factor: 0 = Profile 1, 1 = Profile 2.
Left / Right KeyKeyboard shortcuts to decrease/increase the transition at runtime.
Profile 1 / Profile 2Complete snow configuration presets to lerp between.

Coverage Update Methods

The zenithal depth pass can be updated in several modes:

MethodWhen to Use
Every FrameScenes with frequently moving dynamic objects over snow areas.
DiscreteMost scenes. Recalculates when the camera moves a threshold distance.
ManualFully static scenes. Call UpdateSnowCoverage() from script when needed.
DisabledNo coverage updates. Snow placement is fixed.
Tip: Use Discrete for the best balance of quality and performance. Switch to Every Frame only if you have large moving objects that must cast snow occlusion in real time.

Next Steps

Was this page helpful?