Realistic Waterfall URP documentation

Download PDFComing soon to the Asset Store

Tartine Studio · Version 1.0.0 · Unity 2022.3 LTS and newer · Universal Render Pipeline 14 and newer

Realistic Waterfall URP is a waterfall effect built for standalone VR and mobile: a falling-water column with an irregular, animated outline, fake self-shadowing, mist, spray, drips and a transparent river. It needs no depth texture and no opaque texture, and it uses no real-time lighting. It was built for and tuned on Meta Quest 3 (Android, Vulkan).

The effect is authored with one component, Realistic Waterfall. The editor bakes that component into ordinary Unity objects: a few static meshes, Shuriken particle systems and one small data texture. Nothing runs in script at runtime.


1. Key features

  • Falling-water column. Ribbons follow the real ballistic path of the water. Streak textures are sampled at each water parcel's "birth time", so the streaks accelerate and stretch with gravity without any simulation.
  • Irregular, living outline. Bulges, necks and a sideways wobble travel down with the water. They are animated in the vertex shader.
  • Fake self-shadowing. Thick masses of water block the sky and show as darker grey patches and surges that travel down the column.
  • Volume from particles. Water clumps, column spray, column mist, a mist blast along the pool, slowly rising mist and impact spray.
  • Mist tubes. Animated mist wrapped around the foot of the waterfall. The walls fade where they are seen edge-on, so the mist reads as a soft volume from every side.
  • Works from any viewpoint. Nothing is oriented towards a camera or a viewer position: walk or fly all around the waterfall.
  • Drips. Drip sources along the rock, each with fine, streaked drops and an optional GPU-only rain-curtain ribbon.
  • River and plunge pool. Transparency, depth colour, flow-mapped ripples and foam come from a one-time top-down bake, so there is no depth texture at runtime. Three bake modes cover a flat pool, any ground mesh or terrain, and a vertex-coloured photogrammetry scan.
  • Artist-friendly Inspector.
    • One section per element, each with an instant ON/OFF toggle.
    • Materials are edited inline.
    • Sliders and min/max sliders, with tooltips on every field.
    • Live rebuild while you edit.
    • Live, slow-motion preview in the Scene view.
  • Scene view handles for the lip, exit velocity, widths, drip sources, pool, river region and mist tubes.
  • Create menu with ready-made layouts (6 m, 15 m and 35 m drops) and a ready-to-use prefab.
  • XR ready.
    • Single-pass instanced and multiview.
    • Premultiplied alpha.
    • Fixed render queues, so there is no sorting flicker.
    • Soft fades above the water surface and near the camera instead of soft particles.

2. Requirements and compatibility

Unity 2022.3 LTS or newer. Tested with 2022.3.62f3 and 6000.6.0f1.
Render pipeline Universal Render Pipeline 14 (Unity 2022.3) or newer, tested with URP 14.0.12 and 17.6. Built-in RP and HDRP are not supported.
Platforms Android / Meta Quest (Vulkan, OpenGL ES 3), Windows / macOS / Linux desktop and PC VR. Every shader is unlit and uses only 1 to 5 texture fetches.
URP settings Nothing special: the depth texture and opaque texture can stay off.
Dependencies None besides URP.
Enter Play Mode Options Supported, including with Domain Reload and Scene Reload disabled.

3. Package contents

TartineStudio/RealisticWaterfall/
  Runtime/        RealisticWaterfall.cs (the component, data only), inspector attributes
  Editor/         builder (meshes, particles, river bake), Inspector, Scene handles, menus, preview
  Shaders/        Column, Mist, Particle, River, Environment (Vertex Colour, River Bed), RWCommon.hlsl
  Materials/      default materials (also used by the demo)
  Textures/       streaks, particle atlas, droplet, mist noise, foam, ripple normal
  Prefabs/        RW_Waterfall_Medium (a 15 m waterfall ready to drop in a scene)
  Demo/           demo scene, textured photogrammetry of the Kvernufoss waterfall (Iceland), generated FX data
  Documentation/  this document

4. Quick start

Open the demo

  1. Open Demo/Scenes/RealisticWaterfall_Demo.unity.
  2. Select FX_Waterfall. The Inspector shows every part of the effect.
  3. Press Play, or tick Live preview in the Inspector to animate the effect in the Scene view.

The XR origin of the demo stands under the cave, where the reference footage was shot, but the effect can be seen from any side.

Create your own waterfall

  1. Move the Scene view so its pivot is where the plunge pool should be.
  2. Choose Tools > Realistic Waterfall > Create Waterfall > Small / Medium / Tall.
  3. A complete waterfall is created, and its materials are copied into its own folder.
  4. Use the Scene handles (Inspector toolbar: Column, Drips, Pool, Mist) to fit it to your cliff.
  5. Press Bake river once the pool and river are in place.

Or drop the prefab

Drag Prefabs/RW_Waterfall_Medium.prefab into your scene. Select it and press Rebuild all if you change anything. Several instances share the prefab's materials: use General > Make materials unique to tune one of them on its own.

5. How it works

Part What is built Cost
Column, sheath, drip curtains One merged mesh per material. Parabolic ribbons whose cross-section is an arc bulging out along the exit direction, which gives real depth (and stereo depth in VR) from every side. About 800 tris per ribbon, 1 draw call per material
Mist tubes Open, flared tubes around the foot of the fall, merged in one mesh, with animated noise 256 tris per tube, 1 draw call
River A smooth surface mesh at water level plus T_RiverData (depth, foam, flow) from the top-down bake 1 draw call, 5 texture fetches
Particles Up to 10 Shuriken systems CPU: particle count. GPU: overdraw
  • Coordinates. Every position in the component is in the local space of the waterfall GameObject: move the GameObject to move the whole waterfall. Rotate it around Y only and keep a scale of 1, because gravity is always world-down. Rebuild after rotating.
  • Orientation. Everything is oriented from the main column's exit direction (out from the cliff), never towards a camera. The ribbons bulge out along it; the lip, the drip edges and the emitters run across it. The waterfall therefore looks right from any viewpoint.
  • Height fades instead of soft particles. The particle and mist shaders fade out above the water surface, so they never cut hard into the pool. The builder sends the water height to the materials automatically, and again whenever the waterfall is moved.

6. Inspector reference

The header toolbar contains:

  • Live rebuild. Value changes rebuild the effect automatically. The river bake is excluded because it takes a few seconds.
  • Live preview. Animates the particles and shaders in the Scene view without entering Play mode.
  • Rebuild / Rebuild all. Rebuild all also re-bakes the river.
  • Scene handles. Choose which group of handles is shown in the Scene view.
  • All ON / All OFF and Expand all / Collapse all.

Every section has an ON/OFF toggle. Toggling hides or shows the generated objects instantly, with no rebuild. Material blocks inside the sections edit the material asset directly: the change is instant and is shared by every object using that material. Hover any field for a tooltip.

Section Controls
General Preview speed (editor slow motion), output folder, Make materials unique, Save as prefab
Waterfall column Lip, exit direction and speed, bottom height, widths, offsets, arc, resolution, opacity, fade-in, seed, and the column material (colours, body, streak motion, irregular shape, self-shadowing)
Column sheath The other ribbons (a soft halo around the column) and their material
Column clumps Rate, shadow tint (random darker clumps) and the clump material
Column spray Rate, droplet size, streak length and the spray material (shared with Impact spray)
Column mist / Impact mist blast / Impact rising mist Rate, size, growth, life time, speed, area, spread, drag, lift, opacity, spin, max particles, and the mist material (shared by the three)
Impact spray Rate, size, growth, streak length, life time, speed, area, cone angle, gravity, opacity, max particles
Mist tubes The tube list (centre, bottom and top radius, height, tint, seed, speed) and the mist material (billow size, rise and swirl speed, shape, edge-on fade, fades)
Drips The drip sources (position, width, bottom, rate, curtain opacity), the drop settings shared by all sources (rate multiplier, size, stretch, life time, speed, spread, gravity, opacity, cap), the drop material, and the curtains (show / hide, curtain material)
River Bake mode and settings, plunge pool, flow, the river material, the optional river-bed clamp
Advanced The raw ribbon list (add or remove ribbons), the main column index, the Build particles option

7. Scene handles

Group Handles
Column Lip (moves every ribbon), exit velocity (a sphere 1 s ahead of the lip: direction and speed), top and bottom width, bottom height. The trajectories of every ribbon are drawn.
Drips Position, width and bottom of each drip source
Pool Plunge pool centre and radius, river bake region (box), water level. Press Bake river afterwards.
Mist Centre, bottom radius, top radius and height of each mist tube

While you drag a handle, only the ribbons are rebuilt, so dragging stays fast. The full rebuild runs when you release the mouse. Every handle edit can be undone.

8. River bake

The river is baked once, from above, over the River region box. X runs downstream.

Mode Use it for
Flat Rectangle No ground needed. A rounded pool with an irregular shoreline fills the region at Water level. It is the default for new waterfalls.
Below Water Level Any ground mesh (MeshFilter) and/or Terrain. The water is wherever the ground is below Water level and connected to the pool, and the real depth is measured.
Scan Colour Vertex-coloured photogrammetry. Water is found from the scan colour (blue-grey or white) and its height, and the water level is measured along the river, never rising downstream.

The bake writes T_RiverData.png (R depth, G foam, BA flow) and T_RiverHeight into the output folder, and builds the FX_River surface mesh. The flow follows the geodesic distance from the pool through the water, so it turns with river bends and spreads radially in the pool. Foam comes from the impact, the rapids (fast and shallow water) and, in Scan Colour mode, bright white water in the scan.

Optional river-bed clamp. Assign the Environment (Vertex Colour, River Bed) shader to your ground and put that material in the River section. With Bed Clamp on, ground vertices inside the river are pushed just below the water surface. This hides scan spikes that poke through the water. It is a helper for vertex-coloured scans; with your own ground shader, simply keep the bed below the water.

9. Shaders

All shaders are unlit, transparent, premultiplied-alpha and multiview-safe, with fixed queues:

  • River: Transparent-50
  • Mist: Transparent-10
  • Column and particles: Transparent
Shader Notes
Column 4 fetches of one RGBA streak texture, plus 1 for self-shadowing. Vertex-animated outline.
Mist 3 fetches of one RGBA noise texture, seamless around the tubes. Edge-on, height and near-camera fades.
Particle 1 fetch (R alpha, G self-shading). Height and near-camera fades, adjustable additive amount.
River 5 fetches: data, 2 ripple normals and 2 foam samples (two-phase flow map). Fresnel sky reflection, depth absorption, shore fade.
Environment (Vertex Colour, River Bed) Optional ground helper: unlit vertex colour, optional river-bed clamp.

The editor preview can slow the effect down with a global clock (_RWTime / _RWTimeMode). In builds the shaders always use _Time.

10. Performance

These are the numbers for the effect in the demo scene, as shipped (some parts are turned off there). Budget on device with your own scene and settings.

Demo (as shipped) Every part ON
Draw calls (FX) 3 meshes + 8 particle systems 5 meshes + 10 particle systems
Triangles (FX meshes) about 1,600 about 3,800
Particles alive about 2,000 about 4,100, mostly the fine drips
Textures 6 small textures (64² to 1024×512, ASTC on Android) + 1 baked river data texture (300×224)

The demo environment itself (textured photogrammetry, about 336,000 triangles and one 8192² texture) is there to show the effect in context. It is not part of the effect's budget.

To save CPU or GPU on standalone VR:

  • Drips are the main CPU cost. Lower Drip sources – particles > Rate Multiplier, or the per-source rate.
  • Overdraw is the main GPU cost. Use fewer, smaller or shorter mist tubes and fewer mist particles, and lower the Max particles caps.
  • Turn off the parts that are hidden in your view.
  • The demo was tuned for Quest 3. Profile on device with OVR Metrics or RenderDoc.

11. Multiple waterfalls, moving and prefabs

  • Each waterfall saves its generated assets in its output folder. The default is <Scene folder>/<Scene>_Waterfall/<GameObject name>.
  • Use Make materials unique when a scene has several waterfalls: the river data texture and the water height are stored in the materials.
  • Moving a waterfall is safe: the water height of its materials follows. After a rotation, press Rebuild so the particle velocities follow.
  • Save as prefab stores a copy of the built waterfall in its output folder.

12. Limitations

  • The falling water is a set of curved ribbons, not a volume. Seen exactly along the lip, the column looks thinner, as a real waterfall does.
  • There is no lighting: colours are tuned by hand to your scene's light. There is no interaction or collision with the water.
  • The river is a static bake: its shape, depth and flow do not change at runtime.
  • The waterfall object must be rotated around Y only and keep a scale of 1.
  • URP only.

13. Troubleshooting

  • I change a value and nothing happens. Check that Live rebuild is ticked and that the section is ON. River settings need Bake river.
  • The particles are frozen in the Scene view. Tick Live preview. Unity only simulates particles in edit mode while they are selected; the preview drives them for you.
  • Mist or particles are cut, or invisible near the water. Rebuild or re-bake the river so the water height reaches the materials. Also check the Fade above water value of the material.
  • The river covers the banks. Lower Water tolerance, raise the ground, or shrink the River region and bake again.
  • Materials are pink. URP is not the active render pipeline.
  • Another waterfall changed too. They share materials: use Make materials unique.

14. Support

Tartine Studio: [SUPPORT EMAIL] · [WEBSITE]

Please include your Unity and URP versions, the target platform and a screenshot of the Inspector.

15. Version history

  • 1.0.0: first release.