Snow Surface
intermediate conceptsGlobal Snow (URP) · Core Concepts
Overview
The Snow Surface component is a URP-exclusive feature that generates a deformable snow mesh on top of terrain or custom geometry. Unlike the screen-space snow coverage, Snow Surface creates actual 3D geometry that objects can sink into, carve and plow through, producing real tracks, trails with raised berms, and snow spray. It has real colliders, GPU tessellation for rounded carved borders, and can reveal a dirt ground under deep deformations.
Adding a Snow Surface
To add a deformable snow layer to your terrain or mesh:
- Select the terrain or mesh object you want to cover with deformable snow.
- Click Add Component and search for
SnowSurface. - The component generates a snow mesh that conforms to the surface below it. Set Base Thickness to lay down an even snow layer, or leave it at 0 and let objects and snowfall accumulate the snow.
You can also register and unregister Snow Surfaces at runtime via the static API:
GlobalSnow.RegisterSnowSurface(snowSurfaceComponent);
GlobalSnow.UnregisterSnowSurface(snowSurfaceComponent);
// Get all active snow surfaces
IReadOnlyList<SnowSurface> surfaces = GlobalSnow.GetSnowSurfaces();
Snow Painter
Open the painter from Window > Kronnect > Global Snow > Snow Surface Painter, or use the Paint tab on the SnowSurface inspector. Paint directly in the Scene View to sculpt the snow before play:
| Brush | Action |
|---|---|
| Raise | Adds snow, building up drifts and mounds. |
| Lower | Removes snow, carving hollows down to the ground. |
| Smooth | Averages neighbouring heights to soften the surface. |
While painting: [ and ] change the brush radius, Shift+Scroll changes the strength. The Max Terrain Step guard stops brush strokes and surface expansion from spilling over roof edges and cliffs.
Geometry Settings
These parameters control the resolution and extent of the generated snow mesh.
| Parameter | Description |
|---|---|
| Terrain Layer Mask | Selects which terrain layers the snow surface conforms to. Use this to limit snow to specific terrain textures (e.g., only grass and rock, not sand). |
| Max Terrain Step | Maximum height step in meters the surface follows when it expands or is painted across discontinuities like roof edges or cliffs. Stops the surface from spilling over. 0 disables the check. |
| Meters Per Vertex | Spacing between mesh vertices in meters. Lower values create a denser mesh with more detail. Minimum 0.1, default 0.25. |
| Max Resolution | Maximum vertex count per axis. Range 8-1024, default 256. Caps the mesh density regardless of Meters Per Vertex. |
| Simplification Normal Threshold | Angle threshold for mesh simplification. Vertices on flat areas are merged if the normal difference is below this value. Range 0-90 degrees, default 15. |
Base Snow and Borders
Control the resting snow layer and how the surface blends into the surrounding terrain.
| Parameter | Description |
|---|---|
| Base Thickness | Minimum snow thickness in meters across the surface. Brush strokes add or remove snow on top. Minimum 0. |
| Border Falloff | Width in meters of the border band where the base snow fades to zero. Default 1. |
| Edge Noise | Organic variation of the border contour using world-space noise. Range 0-1, default 0.5. |
| Edge Noise Scale | Scale of the edge noise features. Higher values produce smaller features. Default 0.5. |
| Border Dissolve | Width in meters of a stochastic dissolve at the borders: the snow blends pixel-wise into the surrounding terrain, hiding the seam. Range 0-2, default 0.3. |
Pressure and Deformation
These parameters control how the snow mesh reacts to objects pressing into it.
| Parameter | Description |
|---|---|
| Max Sink Depth | Maximum depth an object can sink into the snow. Minimum 0, default 0.05 meters. |
| Sink Speed | How fast the snow compresses under pressure. Minimum 0, default 0.25. |
| Default Radius | Default pressure radius for objects that do not carry a GlobalSnowColliderExtraInfo. Minimum 0, default 0.25 meters. |
| Full Sink Mass | Snow hardness: the rigidbody mass that reaches the full Max Sink Depth; lighter objects sink proportionally less. 0 = no resistance. Default 20. |
| Snow Wall Angle | Maximum slope the snow walls can hold around deformations (repose angle). Powder collapses at low angles, compact snow holds near-vertical walls. Range 15-89 degrees, default 75. |
| Snow Drag | How strongly the snow absorbs the motion of objects in contact with it. Kills bounces and slows objects down. Default 3. |
| Snow Recovery Speed | Meters per second of deformation recovery, as if snowfall slowly refilled holes and trails. 0 disables recovery. |
Snow Overflow
When an object presses into the snow, displaced snow can pile up around the edges of the depression, creating a realistic overflow effect.
| Parameter | Description |
|---|---|
| Snow Overflow | Amount of snow that piles up around depressions. Range 0-0.5. |
| Snow Overflow Border | Width of the overflow rim around depressions. Range 0.01-0.25, default 0.05. |
Tessellation
GPU tessellation subdivides the mesh where the snow is deformed and follows a smooth thickness field, rounding carved borders and walls. It fades out with camera distance and falls back to the plain mesh on platforms without tessellation support (VR is supported in single pass instanced).
| Parameter | Description |
|---|---|
| Tessellation Max | Maximum GPU subdivision applied where the snow is deformed. 1 disables tessellation. Range 1-5, default 3. |
| Tessellation Fade Start | Distance at which the tessellation starts fading out. Default 10. |
| Tessellation Fade End | Distance at which the tessellation is fully faded out. Default 30. |
| Tessellation Smoothing | How much the tessellated geometry follows the smooth thickness field. Rounds carved borders and walls. Range 0-1, default 1. |
Colliders
The snow surface bakes real colliders in tiles so characters and rigidbodies stand and collide on top of the snow.
| Parameter | Description |
|---|---|
| Collider Resolution Divider | Reduces collider mesh density relative to the render mesh. Range 1-4, default 2. Higher values are cheaper but coarser. |
| Collider Tile Bake Budget | Maximum collider tiles rebaked per frame after a deformation, spreading the cost. Minimum 1, default 4. |
Impact FX
Snow spray with powder and flying chunks when objects hit or plow through the snow.
| Parameter | Description |
|---|---|
| Impact FX Enabled | Spawn snow debris and dust when objects impact or plow through the surface. Default enabled. |
| Impact FX Intensity | Overall amount of impact debris and dust. Range 0-2, default 1. |
| Impact FX Min Speed | Minimum impact speed (m/s) below which no debris is spawned. Default 1.5. |
Dirt and Exposed Ground
Trails and deep depressions can reveal a configurable dirt ground: a PBR set with albedo, normal and height maps and world-space tiling (a gravel set is included). The dirt set is configured on the Global Snow component (Snow Surface section) and is shared by every surface. The screen-space terrain marks blend to the same dirt set, so surface trails and global snow marks connect seamlessly.
| Parameter | Description |
|---|---|
| Reveal Real Surface (per surface) | When enabled, excavated areas clip to the real scene geometry underneath instead of filling with the dirt texture set defined in Global Snow. |
Making Objects Deform the Snow
Any rigidbody that touches the surface deforms it. To fine-tune how a specific object marks the snow, add a GlobalSnowColliderExtraInfo component to it:
| Field | Description |
|---|---|
| Mark Size | Snow mark radius for this collider. |
| Is Footprint | Leaves a single stamp per step instead of a continuous line as the object moves. |
| Collision Distance Threshold | Minimum distance between two consecutive marks. |
| Step Max Distance | Maximum distance for a trail segment. 0 stamps only at collision points with no interpolation. |
| Rotation Threshold | Rotation in degrees needed to trigger a new mark. |
| Override Sink Depth / Snow Surface Sink Depth Meters | Force a fixed sink depth for this object instead of the surface default. |
| Plow Mode | The object receives no physical resistance and carves the surface continuously by position, pushing snow aside into trails with irregular edges and raised berms. Ideal for vehicles and projectiles. |
| Ignore This Collider | This collider leaves no marks on the snow. |
Read-Only Properties
These properties are available at runtime for querying the mesh state:
| Property | Description |
|---|---|
| GeometryResolutionX | Current vertex count along the X axis. |
| GeometryResolutionZ | Current vertex count along the Z axis. |
| IsSimplified | Whether the mesh has been simplified based on the normal threshold. |
Scripting API
The GlobalSnow static class exposes a simple world-space API to add, remove and measure snow from any script, without referencing a specific SnowSurface. It reuses, expands, creates and merges the underlying surfaces automatically. Lower-level per-surface deformation methods are listed below it:
static SnowSurface GlobalSnow.AddSnow(Vector3 worldPosition, float radiusMeters, float amountMeters, float flatBorderMeters = 0.75f, bool mergeOverlapping = true)
Adds a radial blob of snow (thickness in meters) at a world position and returns the surface that received it. Finds the surface under the point, expands it when the brush reaches a border, creates a new one when none is in range, and merges overlapping surfaces into a single patch. Pass a negative amount to remove snow instead. An overload takes a NativeArray<float> height mask (red channel) to shape organic, non-circular deposits.
// drop 20 cm of snow in a 1 m radius wherever the player looks
GlobalSnow.AddSnow(hit.point, 1f, 0.2f);
static void GlobalSnow.RemoveSnow(Vector3 worldPosition, float radiusMeters, float amountMeters)
Removes snow around a world position from any surface in range. Never creates or expands surfaces (melting, shovelling, clearing a path).
static float GlobalSnow.GetSnowThickness(Vector3 worldPosition)
Returns the snow thickness in meters at a world position across every surface, or 0 when none covers it.
static void GlobalSnow.AddSnowDeformation(Vector3 worldPosition, float radiusMeters, float sinkDepthMeters)
Deforms every registered snow surface at a world position. The simplest way to punch a dent from a script (explosions, footsteps, custom effects).
GlobalSnow.AddSnowDeformation(hit.point, 0.5f, 0.1f);
void AddPressureStamp(Vector3 worldPoint, float radiusMeters, float sinkDepthMeters)
Presses the snow down at a point on this surface, respecting the wall angle and overflow. Used for footprints and object contacts.
void AddCarveStamp(Vector3 worldPoint, float radiusMeters, float carveFloorWorldY, float maxDepthMeters = 1000f)
Plows snow down to a floor height, carving a channel with berms. This is the path used by Plow Mode.
bool TryGetSnowWorldHeight(Vector3 worldPosition, out float worldHeightY)
Returns the current snow top height at a world position. Useful to place objects on the deformed surface.
float GetSnowThickness(Vector3 worldPosition)
Returns the current snow thickness (meters) at a world position.
void ClearDeformation()
Resets all deformation, restoring the surface to its base thickness and painted state.
void GetTriangleCounts(out int original, out int current)
Returns the original triangle count and the current (simplified) triangle count of the snow mesh.
snowSurface.GetTriangleCounts(out int orig, out int current);
Debug.Log($"Triangles: {current}/{orig}");
void RefreshShaderData()
Re-uploads the surface parameters to the shader after changing fields from script.
void CaptureBrushStartState() / ReleaseBrushStartState()
Captures and releases the mesh state used as the starting point for a brush/sculpting session.
Usage Tips
- Performance - Snow Surface generates real geometry and colliders. Keep the mesh resolution appropriate for your target platform and use the Max Resolution cap. Tessellation only kicks in near the camera on deformed areas.
- Terrain layers - Use the Terrain Layer Mask to keep snow off surfaces that should not have it (water, roads with specific terrain textures).
- Vehicles - Add
GlobalSnowColliderExtraInfowith Plow Mode enabled for cars, tanks and projectiles to carve trails with berms instead of just sinking. - Multiple surfaces - You can add several SnowSurface components across the scene. Use
GlobalSnow.GetSnowSurfaces()to iterate over all active surfaces.
Next Steps
- Parameters - full Global Snow inspector reference, including the shared dirt set and snowfall.
- Scripting Support (C#) - complete runtime API including SnowSurface methods.
- Performance Tips - optimize Snow Surface mesh resolution and colliders.
Suggest an improvement
Help us improve this documentation page.