ludic/changes/render3d-grass-kind.md
Orkuncakilkaya e908672034 render3d: a grass kind - the GPU blades' per-kind numbers are a GrassKind record the game hands over (grass_kind_set), not constants
GrassKind (grass_kind.ludic) carries what grass.ludic, grass_gpu.ludic, grass.vert, grass_cull.comp and
model.frag's BLADE path held as constants: the cell, s0 / d0 / radius, the row bands and rows, the blade
profile (neck, root, swell, tip, bend), the heights, clumps, widths and arch, where it grows (slope, snow,
the photograph's test), the root / tip / gone-to-seed colours, the far tufts, the root occlusion, the
roughness, the sheen and the wind. Its defaults are those constants exactly, so a game that sets nothing
draws as before. The shaders read them as u_gk_* (the cull as five more Params vec4s, 288 bytes);
grass_reset.comp writes each band's index count so a kind of other rows reaches the draw in order.
grass_quality holds the kind to a settings tier (never denser, never farther); R3D_GRASS_* still win.
grass_profile_w / _bend are the one profile, for the meshes and a game's preview. grass.mesh takes only
the cell: the rest of it is an older copy that already differs from grass.vert, left as it draws.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 19:15:39 +03:00

10 lines
788 B
Markdown

bump: minor
type: feature
**`ludic.render3d`: a grass kind.** The GPU blades' per-kind numbers - the cell, the spacing and its
doubling distance, the reach, the row bands and rows, the blade's profile, heights, tussocks, width and
arch, where it grows (slope, snow line, the photograph's green), its root, tip and gone-to-seed colours,
the far tufts, the root's occlusion, roughness, sheen and wind - are a `GrassKind` record a game hands
over with `grass_kind_set`, not constants in `grass.ludic` and the blade shaders. The defaults are the
old constants, so a game that sets nothing draws what it drew. `grass_quality(s0_min, r_max)` holds a
kind to a settings tier; `grass_profile_w` / `grass_profile_bend` are the one blade profile, for the
meshes and a game's own preview of a kind.