UE5 / Recipe / Semi-Realistic Surface

Wet Surface / Rain for UE5

A wetness recipe for rainy streets, damp props, puddles, and surface darkening: roughness shift, normal breakup, puddle masks, and drip timing.

Recipe baseline

Visual slot reserved

The future image should show selective wetness: darker damp zones, glossy puddles, and subtle rain motion without turning everything into a mirror.

01

Visual Target

What we are building: a reusable wetness layer that darkens base color, lowers roughness, adds puddle masks, and lets rain motion appear only where it helps the shot.
Image placeholder: rainy wet surfaceGenerate later: wet stone floor, small puddles, reflective highlights, subtle rain streaks, semi-realistic lighting, 16:9 landscape, no text.

Wetness is not only reflection. It is darker albedo, lower roughness, stronger highlights, and local puddle shape.

02

Use Cases

EnvironmentRainy groundUse for roads, stone floors, rooftops, and alleys that need a damp read.
PropWet metal or plasticGood for objects that should react to weather without replacing the whole material.
RuntimeWeather blendDrive wetness amount from level state, rain volume, or material parameter collection.

03

Mental Model

Wetness is a material state, not just shine

A wet surface usually darkens, lowers roughness, changes normal response, and collects water in specific places. Reflection is only one part of the read.

Water collects by rule

Flat areas, cracks, dents, gutters, low points, and exposed surfaces should become wetter first. Vertical walls and sheltered zones need different behavior.

Separate damp from puddled

Damp material is darker and slightly glossier. Standing water is much smoother, may ripple, and may reflect the scene. Treat them as two masks, not one slider.

04

Graph Steps

Wet maskDarken colorRoughness shiftPuddle maskRain ripplesRuntime blend

1. Create a wetness mask with a reason

Use vertex paint, height maps, slope, cavity masks, world rain exposure, or a runtime weather value. Avoid applying wetness evenly unless the whole scene is meant to be soaked.

Beginner check: preview the mask alone. You should be able to explain why each white area is wet.

2. Darken base color without killing identity

Blend the albedo toward a darker, slightly richer version of itself. Stone, wood, metal, and painted plastic should not all respond with the same darkening amount.

3. Lower roughness in wet zones

Roughness is the main wetness lever. Damp areas get moderately smoother; puddles get much smoother. Keep the shift masked so the whole asset does not become glossy.

4. Build puddles as a second mask

Use height/cavity or painted puddle masks to define standing water. Puddles can receive stronger reflection, flatter normals, and optional ripple motion.

Senior note: puddles on vertical surfaces usually look wrong unless they are streaks or dripping trails.

5. Add rain ripples only where they belong

Use flipbook ripples, procedural circles, or subtle normal animation in puddle zones. Keep them soft unless the camera is close to the ground.

6. Drive weather from one shared path

If many materials respond to rain, use a Material Parameter Collection or consistent Dynamic Material Instance parameter names. This keeps world wetness art-directable at level scale.

05

Artist Controls

06

HLSL Sketch

float heightMask = Texture2DSample(maskTex, maskSampler, uv).r;
float wetMask = smoothstep(wetMin, wetMax, wetnessAmount - heightMask);
float puddleMask = smoothstep(puddleMin, puddleMax, wetMask);

float3 wetColor = baseColor * lerp(1.0, wetDarken, wetMask);
float roughness = lerp(baseRoughness, wetRoughness, wetMask);
roughness = lerp(roughness, puddleRoughness, puddleMask);

float ripples = Texture2DSample(rippleTex, rippleSampler, uv + time * rippleSpeed).r;
float normalBlend = puddleMask * rippleStrength * ripples;
return float4(wetColor, 1.0);

07

Senior Notes

Reflection method changes the result

Screen-space reflections, Lumen reflections, planar reflections, and reflection captures can all produce different wet reads. Approve the material in the target lighting and reflection setup.

Weather systems need consistency

If many materials share wetness, use one naming convention and one runtime parameter path. Otherwise every asset becomes a special case when rain starts or stops.

Wetness should respect material identity

Rubber, painted metal, stone, cloth, and skin do not become wet in the same way. Keep per-material response controls even if the global rain amount is shared.

08

Common Mistakes

  • Turning every wet surface into a mirror instead of separating dampness from puddles.
  • Darkening albedo so much that the original material identity disappears.
  • Putting ripple rings on vertical, dry, or sheltered areas.
  • Using one wetness response for every material type.
  • Forgetting that SSR may disappear at screen edges and make puddles pop in and out.