Table of Contents

Performance & Quality

What Puddlecraft costs, how to make it cheaper, and what each quality tier gives up to get there.

Quality tiers

Set Quality on the Puddlecraft renderer feature (PuddlecraftQuality). It's per renderer, so one project can use High on PC and Low on a mobile renderer.

Tier What it gives up
High Nothing: every setting as you chose it.
Medium The ripple simulation, wetness map and raindrop ring map are capped at 512 texels a side; up to 5 of the 8 layers of rain rings in the water; 60% of the mist.
Low As Medium, plus no ripples from footsteps, drips and spouts; up to 4 layers of rain rings; 40% of the mist.

Measured in the demo scene in a downpour, at eye level in the street, Deferred, 1920×1080 on an RTX 3070 Laptop:

Tier Wet materials Simulation and map passes, at 60 fps Video memory
High 0.35 ms 0.31 ms 38 MB
Medium 0.30 ms 0.09 ms 19 MB
Low 0.29 ms 0.08 ms 16 MB

Everything Puddlecraft draws in that view comes to about 0.35 ms at High. The rendering path matters as much as the tier, though; see Forward, Forward+ and Deferred. Dry weather costs nothing measurable.

Where the time goes

On the GPU, in a downpour:

  • Wet materials: the wet shading on the ground, and the biggest share. It scales with how much of the screen is wet ground, not with how many objects there are.
  • Rain, splashes, mist and rings: the rain is drawn by the GPU in one call (about 95,000 drops in a downpour), and the splashes and mist are particles.
  • Simulations and maps: ripples, the raindrop ring map, the wetness map and the rain cover. These run every frame around each camera, which is why their size settings matter.
  • Wet tracks (Wet Tracks): only while some are drying. With Materials shading, every track is drawn into a 24 m map around each camera in one call (1536 texels a side on High, 9 MB; 512 on Medium and Low). Decals, for Overlay shading and tracks on a second level, are one more call.

On the CPU, Puddlecraft's main-thread work comes to about 0.9 ms a frame at 60 fps in a downpour, measured in the editor. A built player runs the same code faster. It makes no garbage per frame. The scene is searched for renderers every two seconds, spread over frames at half a millisecond each, so big levels don't hitch.

Settings that cost the most

If you need to win back some time, start here:

Setting Where Cheaper when
Quality Renderer feature Medium or Low (see above).
Wet Normals Renderer feature Off, unless a screen-space reflection effect should see the puddles in Forward or Forward+.
Wetness Map Area, Wetness Map Resolution Renderer feature Smaller (Materials mode only).
Detail Area (m), Detail Resolution, Coverage (m) Controller, Setup tab, Ripples Smaller; Coverage (m) 0 turns the wide ripple area off.
Raindrop Rings (m) Controller, Setup tab Smaller.
Simulate Within (m) Controller, Setup tab Set it in big levels: in Play mode, drip edges and spouts farther from the camera stop firing splashes, ripples and drip sounds. 0 simulates them everywhere.
Mode, Near and Far distance and resolution, Moving Objects Controller, Baking tab, Rain Cover Baked cover costs nothing at runtime; in Realtime, smaller maps and Moving Objects off.
Drops per m² per s, Radius (m) Rain preset, Rainfall tab Fewer drops and a smaller radius; splashes and mist have their own radius.
Max Particles of the rain prefab's drop system Rain prefab Caps how many drops are drawn.
Max Drips Per Second Puddlecraft Audio Fewer drip sounds.

Measuring it yourself

Open the Profiler. Puddlecraft's GPU passes are named Puddlecraft … in the GPU module, and its wet shading shows up inside URP's own Draw GBuffer (Deferred) or DrawOpaqueObjects (Forward, Forward+) pass. To see its total cost in your scene, compare a frame with the Puddlecraft renderer feature turned off.