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>
10 lines
788 B
Markdown
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.
|