โ† All examples

procedural textures

Pixel-art sand with dithered dunes and ripples

Generate a tileable pixel-art sand tile at a chosen art resolution: broad dune shading turned into stepped Bayer-dithered bands, wavy wind ripple lines with light crests and shadowed troughs, shells and pebbles, with per-pixel normal, height, roughness and occlusion maps. Use for beaches and deserts in 2D games.

Recorded render of Pixel-art sand with dithered dunes and ripples

What this component contains

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

How it works

Entry point
generate
Maps
albedo, normal, roughness, height, ao
Parameters
art_pixels, dunes, dune_shading, ripple_spacing, ripple_slant, ripples, shells, pebbles and 4 more
Presets
default, desert_dunes, white_coral, black_sand
Tileable
yes
Command line
python pixel_sand_dunes.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

Stylized pixel art with the light from the top left baked into the shading; dunes and ripples are periodic waves bent by noise, not a wind or sediment model. Ripple frequencies are whole numbers across and down the tile so the pattern repeats exactly, which limits slants to whole steps. Shells and pebbles are tiny fixed sprites. The normal map treats each art pixel as a flat facet. Output sizes that are not a whole multiple of art_pixels give art pixels of unequal widths. Occlusion is a blurred-height estimate posterized to eighths.