Snow Surface

intermediate concepts

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

URP only - Snow Surface is exclusive to the URP version of Global Snow. It is not available in the Built-in RP package.

Adding a Snow Surface

To add a deformable snow layer to your terrain or mesh:

  1. Select the terrain or mesh object you want to cover with deformable snow.
  2. Click Add Component and search for SnowSurface.
  3. 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:

BrushAction
RaiseAdds snow, building up drifts and mounds.
LowerRemoves snow, carving hollows down to the ground.
SmoothAverages 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.

ParameterDescription
Terrain Layer MaskSelects 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 StepMaximum 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 VertexSpacing between mesh vertices in meters. Lower values create a denser mesh with more detail. Minimum 0.1, default 0.25.
Max ResolutionMaximum vertex count per axis. Range 8-1024, default 256. Caps the mesh density regardless of Meters Per Vertex.
Simplification Normal ThresholdAngle 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.

ParameterDescription
Base ThicknessMinimum snow thickness in meters across the surface. Brush strokes add or remove snow on top. Minimum 0.
Border FalloffWidth in meters of the border band where the base snow fades to zero. Default 1.
Edge NoiseOrganic variation of the border contour using world-space noise. Range 0-1, default 0.5.
Edge Noise ScaleScale of the edge noise features. Higher values produce smaller features. Default 0.5.
Border DissolveWidth 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.

ParameterDescription
Max Sink DepthMaximum depth an object can sink into the snow. Minimum 0, default 0.05 meters.
Sink SpeedHow fast the snow compresses under pressure. Minimum 0, default 0.25.
Default RadiusDefault pressure radius for objects that do not carry a GlobalSnowColliderExtraInfo. Minimum 0, default 0.25 meters.
Full Sink MassSnow hardness: the rigidbody mass that reaches the full Max Sink Depth; lighter objects sink proportionally less. 0 = no resistance. Default 20.
Snow Wall AngleMaximum 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 DragHow strongly the snow absorbs the motion of objects in contact with it. Kills bounces and slows objects down. Default 3.
Snow Recovery SpeedMeters per second of deformation recovery, as if snowfall slowly refilled holes and trails. 0 disables recovery.
Tip: Increase Max Sink Depth and lower Snow Wall Angle for deep, fluffy powder. Raise the wall angle and lower the sink depth for packed, icy snow that barely deforms and holds steep walls.

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.

ParameterDescription
Snow OverflowAmount of snow that piles up around depressions. Range 0-0.5.
Snow Overflow BorderWidth 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).

ParameterDescription
Tessellation MaxMaximum GPU subdivision applied where the snow is deformed. 1 disables tessellation. Range 1-5, default 3.
Tessellation Fade StartDistance at which the tessellation starts fading out. Default 10.
Tessellation Fade EndDistance at which the tessellation is fully faded out. Default 30.
Tessellation SmoothingHow 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.

ParameterDescription
Collider Resolution DividerReduces collider mesh density relative to the render mesh. Range 1-4, default 2. Higher values are cheaper but coarser.
Collider Tile Bake BudgetMaximum 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.

ParameterDescription
Impact FX EnabledSpawn snow debris and dust when objects impact or plow through the surface. Default enabled.
Impact FX IntensityOverall amount of impact debris and dust. Range 0-2, default 1.
Impact FX Min SpeedMinimum 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.

ParameterDescription
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:

FieldDescription
Mark SizeSnow mark radius for this collider.
Is FootprintLeaves a single stamp per step instead of a continuous line as the object moves.
Collision Distance ThresholdMinimum distance between two consecutive marks.
Step Max DistanceMaximum distance for a trail segment. 0 stamps only at collision points with no interpolation.
Rotation ThresholdRotation in degrees needed to trigger a new mark.
Override Sink Depth / Snow Surface Sink Depth MetersForce a fixed sink depth for this object instead of the surface default.
Plow ModeThe 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 ColliderThis collider leaves no marks on the snow.

Read-Only Properties

These properties are available at runtime for querying the mesh state:

PropertyDescription
GeometryResolutionXCurrent vertex count along the X axis.
GeometryResolutionZCurrent vertex count along the Z axis.
IsSimplifiedWhether 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 GlobalSnowColliderExtraInfo with 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.
Was this page helpful?