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 can be deformed by pressure (characters walking, objects falling), producing realistic sink tracks and snow displacement.
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 will generate a snow mesh that conforms to the surface below it.
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
List<SnowSurface> surfaces = GlobalSnow.GetSnowSurfaces();
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). |
| Meters Per Vertex | Spacing between mesh vertices in meters. Lower values create a denser mesh with more detail. Minimum 0.1, default 0.25. |
| Geometry Size | Size of the snow surface area in meters (X, Z). Default 2x2 meters. Increase for larger coverage areas. |
| 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. |
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 interacting with the surface. Minimum 0, default 0.25 meters. |
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. |
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 SnowSurface component exposes methods for runtime mesh queries and brush state management:
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 CaptureBrushStartState()
Captures the current mesh state as the starting point for a brush operation. Call before beginning a sculpting session.
void ReleaseBrushStartState()
Releases the captured brush start state and frees memory. Call when the sculpting session ends.
Usage Tips
- Performance - Snow Surface generates real geometry. Keep the mesh resolution appropriate for your target platform. Use the Max Resolution cap to prevent excessive vertex counts.
- Terrain layers - Use the Terrain Layer Mask to prevent snow from appearing on surfaces that should not have it (water, roads with specific terrain textures).
- Multiple surfaces - You can add multiple SnowSurface components to different areas of your scene. Use
GlobalSnow.GetSnowSurfaces()to iterate over all active surfaces. - Simplification - Increase the Normal Threshold to aggressively simplify flat areas and reduce triangle count. Check
IsSimplifiedat runtime to verify.
Next Steps
- Parameters - full Global Snow inspector reference.
- Scripting Support (C#) - complete runtime API including SnowSurface methods.
- Performance Tips - optimize Snow Surface mesh resolution.
Suggest an improvement
Help us improve this documentation page.