โ† All examples

godot shaders

Particle water fountain with swirl and floor bounce

GPU particle process shader for a fountain: droplets leave a nozzle disc in a cone, swirl around the axis, fall under gravity, bounce once on a floor height and fade from water to spray colour.

Recorded render of Particle water fountain with swirl and floor bounce

What this component contains

  • ATTRIBUTION.md
  • LICENSE
  • README.md
  • component.json
  • demo.tscn
  • inspect_shader.py
  • material.tres
  • particles_fountain.gdshader
  • preview.png
  • test_package.py
  • verification/native.json

How it works

Shader type
particles
Parameters
launch_speed (float = 5.5), spread_degrees (float = 9), nozzle_radius (float = 0.06), swirl_speed (float = 0.8), gravity (float = 9.8), floor_height (float = 0), bounce (float = 0.3), droplet_scale (float = 1) and 2 more
Use it on
A GPUParticles3D node with a draw pass mesh (for example a small QuadMesh) whose material uses vertex colour as albedo and particle billboarding, as in `demo.tscn`.
Result
An arcing jet of droplets that rises, falls, bounces on the floor height and fades into spray.
Renderers
compatibility: compiled and rendered, forward plus: not verified, mobile: not verified
Placement
res://baltor/godot_shaders/particles_fountain/

Recorded checks

godot 4.7.2.stable.official.ed1daf0bf

  • contract_static
  • engine_run
  • engine_log_clean
  • shader_in_scene
  • capture_written
  • render_not_uniform
  • shader_changes_pixels

Limits to consider

The floor is an infinite horizontal plane; there is no collision with scene geometry (use Godot's particle collision nodes for that). Each droplet bounces with the same rule, so repeated bounces lose energy quickly. Positions are in world space (local_coords off), so moving the emitter leaves droplets behind as real water would.