โ† All examples

procedural textures

Water caustics traced onto a pool floor

Generate tileable maps of caustic light focused by a wavy water surface onto a floor: rays refracted through a periodic surface are splatted onto pool tiles, rippled sand, rock or a grey card, and the emissive map holds the light. Use for pools, shallow seas, aquariums and as a projected light cookie.

Recorded render of Water caustics traced onto a pool floor

What this component contains

  • ATTRIBUTION.md
  • LICENSE
  • README.md
  • blender_material.py
  • component.json
  • material.tres
  • pngio.py
  • preview.png
  • test_package.py
  • texkit.py
  • verification/native.json
  • water_caustics.py

How it works

Entry point
generate
Maps
albedo, normal, roughness, height, ao, emissive
Parameters
wave_cells, focus, ripples, light, floor, tiles_across, hue_shift, saturation and 1 more
Presets
default, sandy_shallows, deep_reef, light_cookie
Tileable
yes
Command line
python water_caustics.py --size 1024 --seed 7 --preset NAME --out DIR [--width W --height H] [--set NAME=VALUE] [--directx-normal] [--orm]
Godot material
material.tres
Blender builder
blender_material.build_material(folder)

Recorded checks

godot 4.7.2.stable.official.ed1daf0bf

  • command_line_generates_declared_maps
  • maps_decode
  • maps_have_declared_size_and_channels
  • maps_tile_without_a_seam
  • normal_vectors_unit_length_facing_out
  • maps_carry_detail
  • godot_imports_the_maps
  • godot_material_template_loads_every_map
  • godot_compatibility_render
  • capture_shows_the_textured_surface
  • blender_builds_the_material

Limits to consider

One still frame, not an animation. Refraction uses the paraxial approximation (ray offset proportional to the surface slope), light falls straight down and there is no dispersion, absorption or depth-dependent blur, so it is an approximation of real caustics rather than a light transport simulation. Brightness comes from four rays per output pixel and a light smoothing filter, so the finest lines are about a pixel wide at any size. The floor types are simple; the emissive map holds colour only, so the engine sets the emission strength.