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>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-29 19:03:33 +03:00
parent d9a73d63bd
commit e908672034
25 changed files with 335 additions and 75 deletions

View file

@ -926,7 +926,7 @@ T 74258189 u_tershadow 7
T 74258189 u_tershadow_aux 8
T 74258189 u_ts_height 9
P d48d6a48 grass.mesh model.frag #define FOLIAGE;#define BLADE;#define MESH;
B d48d6a48 vert 0 4420
B d48d6a48 vert 0 4448
U d48d6a48 vert u_view 0 mat4 1 0
U d48d6a48 vert u_proj 64 mat4 1 0
U d48d6a48 vert u_vp 128 mat4 1 0
@ -949,7 +949,8 @@ U d48d6a48 vert u_d0 4404 float 1 0
U d48d6a48 vert u_radius 4408 float 1 0
U d48d6a48 vert u_px 4412 float 1 0
U d48d6a48 vert u_dbg 4416 int 1 0
B d48d6a48 frag 1 1028
U d48d6a48 vert u_gk_ortho 4432 vec4 1 0
B d48d6a48 frag 1 1088
U d48d6a48 frag u_cascade_vp 0 mat4 5 64
U d48d6a48 frag u_cascade_split 320 float 5 16
U d48d6a48 frag u_cascade_range 400 float 5 16
@ -998,6 +999,9 @@ U d48d6a48 frag u_blade_base 992 vec3 1 0
U d48d6a48 frag u_blade_tip 1008 vec3 1 0
U d48d6a48 frag u_blade_cols 1020 float 1 0
U d48d6a48 frag u_blade_tex_on 1024 float 1 0
U d48d6a48 frag u_gk_seed 1040 vec4 1 0
U d48d6a48 frag u_gk_look 1056 vec4 1 0
U d48d6a48 frag u_gk_mat 1072 vec4 1 0
T d48d6a48 u_arm 2
T d48d6a48 u_blade_tex 3
T d48d6a48 u_brdf 4
@ -1015,7 +1019,7 @@ T d48d6a48 u_tp_nrm 15
T d48d6a48 u_tp_page 16
T d48d6a48 u_ts_height 17
P cb13f3c6 grass.vert model.frag #define FOLIAGE;#define BLADE;#define GBLADE;
B cb13f3c6 vert 0 356
B cb13f3c6 vert 0 448
U cb13f3c6 vert u_view 0 mat4 1 0
U cb13f3c6 vert u_proj 64 mat4 1 0
U cb13f3c6 vert u_vp 128 mat4 1 0
@ -1040,9 +1044,14 @@ U cb13f3c6 vert u_d0 340 float 1 0
U cb13f3c6 vert u_radius 344 float 1 0
U cb13f3c6 vert u_px 348 float 1 0
U cb13f3c6 vert u_dbg 352 int 1 0
U cb13f3c6 vert u_gk_tall 368 vec4 1 0
U cb13f3c6 vert u_gk_grow 384 vec4 1 0
U cb13f3c6 vert u_gk_clump 400 vec4 1 0
U cb13f3c6 vert u_gk_ground 416 vec4 1 0
U cb13f3c6 vert u_gk_ortho 432 vec4 1 0
I cb13f3c6 a_pos 0 vec3
I cb13f3c6 a_uv 2 vec2
B cb13f3c6 frag 1 1028
B cb13f3c6 frag 1 1088
U cb13f3c6 frag u_cascade_vp 0 mat4 5 64
U cb13f3c6 frag u_cascade_split 320 float 5 16
U cb13f3c6 frag u_cascade_range 400 float 5 16
@ -1091,6 +1100,9 @@ U cb13f3c6 frag u_blade_base 992 vec3 1 0
U cb13f3c6 frag u_blade_tip 1008 vec3 1 0
U cb13f3c6 frag u_blade_cols 1020 float 1 0
U cb13f3c6 frag u_blade_tex_on 1024 float 1 0
U cb13f3c6 frag u_gk_seed 1040 vec4 1 0
U cb13f3c6 frag u_gk_look 1056 vec4 1 0
U cb13f3c6 frag u_gk_mat 1072 vec4 1 0
T cb13f3c6 u_arm 2
T cb13f3c6 u_blade_tex 3
T cb13f3c6 u_brdf 4
@ -1108,7 +1120,7 @@ T cb13f3c6 u_tp_nrm 15
T cb13f3c6 u_tp_page 16
T cb13f3c6 u_ts_height 17
P b8cff226 grass.vert model.frag #define FOLIAGE;#define BLADE;#define GBLADE;#define TILES;
B b8cff226 vert 0 4452
B b8cff226 vert 0 4544
U b8cff226 vert u_view 0 mat4 1 0
U b8cff226 vert u_proj 64 mat4 1 0
U b8cff226 vert u_vp 128 mat4 1 0
@ -1134,9 +1146,14 @@ U b8cff226 vert u_d0 4436 float 1 0
U b8cff226 vert u_radius 4440 float 1 0
U b8cff226 vert u_px 4444 float 1 0
U b8cff226 vert u_dbg 4448 int 1 0
U b8cff226 vert u_gk_tall 4464 vec4 1 0
U b8cff226 vert u_gk_grow 4480 vec4 1 0
U b8cff226 vert u_gk_clump 4496 vec4 1 0
U b8cff226 vert u_gk_ground 4512 vec4 1 0
U b8cff226 vert u_gk_ortho 4528 vec4 1 0
I b8cff226 a_pos 0 vec3
I b8cff226 a_uv 2 vec2
B b8cff226 frag 1 1028
B b8cff226 frag 1 1088
U b8cff226 frag u_cascade_vp 0 mat4 5 64
U b8cff226 frag u_cascade_split 320 float 5 16
U b8cff226 frag u_cascade_range 400 float 5 16
@ -1185,6 +1202,9 @@ U b8cff226 frag u_blade_base 992 vec3 1 0
U b8cff226 frag u_blade_tip 1008 vec3 1 0
U b8cff226 frag u_blade_cols 1020 float 1 0
U b8cff226 frag u_blade_tex_on 1024 float 1 0
U b8cff226 frag u_gk_seed 1040 vec4 1 0
U b8cff226 frag u_gk_look 1056 vec4 1 0
U b8cff226 frag u_gk_mat 1072 vec4 1 0
T b8cff226 u_arm 2
T b8cff226 u_blade_tex 3
T b8cff226 u_brdf 4
@ -2015,7 +2035,7 @@ I f4a2b586 a_pos 0 vec3
I f4a2b586 i_pos 3 vec4
I f4a2b586 a_nrm 1 vec3
I f4a2b586 a_uv 2 vec2
B f4a2b586 frag 1 1028
B f4a2b586 frag 1 1088
U f4a2b586 frag u_cascade_vp 0 mat4 5 64
U f4a2b586 frag u_cascade_split 320 float 5 16
U f4a2b586 frag u_cascade_range 400 float 5 16
@ -2064,6 +2084,9 @@ U f4a2b586 frag u_blade_base 992 vec3 1 0
U f4a2b586 frag u_blade_tip 1008 vec3 1 0
U f4a2b586 frag u_blade_cols 1020 float 1 0
U f4a2b586 frag u_blade_tex_on 1024 float 1 0
U f4a2b586 frag u_gk_seed 1040 vec4 1 0
U f4a2b586 frag u_gk_look 1056 vec4 1 0
U f4a2b586 frag u_gk_mat 1072 vec4 1 0
T f4a2b586 u_arm 2
T f4a2b586 u_blade_tex 3
T f4a2b586 u_brdf 4
@ -3909,7 +3932,7 @@ I b20fdcb5 i_ground 6 vec4
I b20fdcb5 a_pos 0 vec3
I b20fdcb5 i_tint 5 vec4
I b20fdcb5 a_uv 2 vec2
B b20fdcb5 frag 1 1028
B b20fdcb5 frag 1 1088
U b20fdcb5 frag u_cascade_vp 0 mat4 5 64
U b20fdcb5 frag u_cascade_split 320 float 5 16
U b20fdcb5 frag u_cascade_range 400 float 5 16
@ -3958,6 +3981,9 @@ U b20fdcb5 frag u_blade_base 992 vec3 1 0
U b20fdcb5 frag u_blade_tip 1008 vec3 1 0
U b20fdcb5 frag u_blade_cols 1020 float 1 0
U b20fdcb5 frag u_blade_tex_on 1024 float 1 0
U b20fdcb5 frag u_gk_seed 1040 vec4 1 0
U b20fdcb5 frag u_gk_look 1056 vec4 1 0
U b20fdcb5 frag u_gk_mat 1072 vec4 1 0
T b20fdcb5 u_arm 2
T b20fdcb5 u_blade_tex 3
T b20fdcb5 u_brdf 4