feat(render3d): the meadow's blades are culled on the GPU - under 1.5 ms of a MoltenVK frame for all the grass

- grass_cull.comp decides each candidate blade once a frame (place, ground, density, water,
  slope, frustum, colour field) and writes survivors into three bands by distance, one indirect
  draw each; grass_inst.vert only bends and places the vertices. OpenGL keeps grass.vert's
  per-vertex path; R3D_GRASS_GPU=0 compares
- compute programs take sampled textures after their buffers (gpu_compute_tex / gpu_dispatch_tex),
  and every dispatch now records a compute-to-draw memory barrier
- the blades as a sward: 4 m cells, bands with five, three and one-quad blades, spacing doubling
  every 18 m to 70 m, never narrower than a pixel; lit facing the sun and leaning to the sky,
  shadow looked up above the ground (it read the terrain as its caster), a colour ramp that
  leaves only the sheath dark, clumps, dry patches and a tussock shade worked out per blade
- scatter layers flagged grass are skipped while the blades draw (and under R3D_NOGRASS);
  R3D_BLADES, R3D_NOBLADES win over the game's setting; R3D_GRASS_S0/D0 for measuring

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-27 15:38:43 +03:00
parent f815f3e3cf
commit cc384efee0
34 changed files with 798 additions and 212 deletions

View file

@ -843,7 +843,7 @@ T 74258189 u_shadow 6
T 74258189 u_tershadow 7
T 74258189 u_ts_height 8
P d48d6a48 grass.mesh model.frag #define FOLIAGE;#define BLADE;#define MESH;
B d48d6a48 vert 0 4384
B d48d6a48 vert 0 4388
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
@ -862,7 +862,8 @@ U d48d6a48 vert u_tiles 272 vec4 256 16
U d48d6a48 vert u_s0 4368 float 1 0
U d48d6a48 vert u_d0 4372 float 1 0
U d48d6a48 vert u_radius 4376 float 1 0
U d48d6a48 vert u_dbg 4380 int 1 0
U d48d6a48 vert u_px 4380 float 1 0
U d48d6a48 vert u_dbg 4384 int 1 0
B d48d6a48 frag 1 964
U d48d6a48 frag u_cascade_vp 0 mat4 5 64
U d48d6a48 frag u_cascade_split 320 float 5 16
@ -919,169 +920,171 @@ T d48d6a48 u_prefilter 9
T d48d6a48 u_shadow 10
T d48d6a48 u_tershadow 11
T d48d6a48 u_ts_height 12
P 7ed7de52 grass.vert model.frag #define FOLIAGE;#define BLADE;
B 7ed7de52 vert 0 320
U 7ed7de52 vert u_view 0 mat4 1 0
U 7ed7de52 vert u_proj 64 mat4 1 0
U 7ed7de52 vert u_vp 128 mat4 1 0
U 7ed7de52 vert u_cam_pos 192 vec3 1 0
U 7ed7de52 vert u_time 204 float 1 0
U 7ed7de52 vert u_ts_origin 208 vec2 1 0
U 7ed7de52 vert u_ts_half 216 float 1 0
U 7ed7de52 vert u_ortho_on 220 float 1 0
U 7ed7de52 vert u_lake_level 224 float 1 0
U 7ed7de52 vert u_sea_level 228 float 1 0
U 7ed7de52 vert u_lake 240 vec4 1 0
U 7ed7de52 vert u_snow_line 256 float 1 0
U 7ed7de52 vert u_wind 260 float 1 0
U 7ed7de52 vert u_push 272 vec3 1 0
U 7ed7de52 vert u_tile 288 vec2 1 0
U 7ed7de52 vert u_tile_cells 296 int 1 0
U 7ed7de52 vert u_per_cell 300 int 1 0
U 7ed7de52 vert u_s0 304 float 1 0
U 7ed7de52 vert u_d0 308 float 1 0
U 7ed7de52 vert u_radius 312 float 1 0
U 7ed7de52 vert u_dbg 316 int 1 0
I 7ed7de52 a_pos 0 vec3
I 7ed7de52 a_uv 2 vec2
B 7ed7de52 frag 1 964
U 7ed7de52 frag u_cascade_vp 0 mat4 5 64
U 7ed7de52 frag u_cascade_split 320 float 5 16
U 7ed7de52 frag u_cascade_range 400 float 5 16
U 7ed7de52 frag u_cascade_texel 480 float 5 16
U 7ed7de52 frag u_sun_dir 560 vec3 1 0
U 7ed7de52 frag u_sun_color 576 vec3 1 0
U 7ed7de52 frag u_cam_pos 592 vec3 1 0
U 7ed7de52 frag u_prefilter_levels 604 float 1 0
U 7ed7de52 frag u_fog_density 608 float 1 0
U 7ed7de52 frag u_fog_height_falloff 612 float 1 0
U 7ed7de52 frag u_fog_base 616 float 1 0
U 7ed7de52 frag u_clip_y 620 float 1 0
U 7ed7de52 frag u_spec_scale 624 float 1 0
U 7ed7de52 frag u_sky_rot 632 vec2 1 0
U 7ed7de52 frag u_ground_alb 640 vec3 1 0
U 7ed7de52 frag u_ground_alb_hi 656 vec3 1 0
U 7ed7de52 frag u_ground_hi_y 668 float 1 0
U 7ed7de52 frag u_ground_hi_w 672 float 1 0
U 7ed7de52 frag u_ibl_scale 688 vec3 1 0
U 7ed7de52 frag u_daylight 700 float 1 0
U 7ed7de52 frag u_fire_pos 704 vec3 1 0
U 7ed7de52 frag u_fire_color 720 vec3 1 0
U 7ed7de52 frag u_hand_pos 736 vec3 1 0
U 7ed7de52 frag u_hand_color 752 vec3 1 0
U 7ed7de52 frag u_hand_dir 768 vec3 1 0
U 7ed7de52 frag u_hand_cone 780 float 1 0
U 7ed7de52 frag u_hand_reach 784 float 1 0
U 7ed7de52 frag u_ts_origin 792 vec2 1 0
U 7ed7de52 frag u_ts_half 800 float 1 0
U 7ed7de52 frag u_ts_on 804 float 1 0
U 7ed7de52 frag u_force_cascade 808 int 1 0
U 7ed7de52 frag u_cloud_shadow 812 float 1 0
U 7ed7de52 frag u_time 816 float 1 0
U 7ed7de52 frag u_fog_inscatter 820 float 1 0
U 7ed7de52 frag u_fog_desat 824 float 1 0
U 7ed7de52 frag u_model_h 828 float 1 0
U 7ed7de52 frag u_view 832 mat4 1 0
U 7ed7de52 frag u_tint 896 vec3 1 0
U 7ed7de52 frag u_rough_scale 908 float 1 0
U 7ed7de52 frag u_emissive 912 float 1 0
U 7ed7de52 frag u_blade_base 928 vec3 1 0
U 7ed7de52 frag u_blade_tip 944 vec3 1 0
U 7ed7de52 frag u_blade_cols 956 float 1 0
U 7ed7de52 frag u_blade_tex_on 960 float 1 0
T 7ed7de52 u_arm 2
T 7ed7de52 u_blade_tex 3
T 7ed7de52 u_brdf 4
T 7ed7de52 u_diff 5
T 7ed7de52 u_irradiance 6
T 7ed7de52 u_nrm 7
T 7ed7de52 u_ortho 8
T 7ed7de52 u_prefilter 9
T 7ed7de52 u_shadow 10
T 7ed7de52 u_tershadow 11
T 7ed7de52 u_ts_height 12
P 7f096322 grass.vert model.frag #define FOLIAGE;#define BLADE;#define TILES;
B 7f096322 vert 0 4416
U 7f096322 vert u_view 0 mat4 1 0
U 7f096322 vert u_proj 64 mat4 1 0
U 7f096322 vert u_vp 128 mat4 1 0
U 7f096322 vert u_cam_pos 192 vec3 1 0
U 7f096322 vert u_time 204 float 1 0
U 7f096322 vert u_ts_origin 208 vec2 1 0
U 7f096322 vert u_ts_half 216 float 1 0
U 7f096322 vert u_ortho_on 220 float 1 0
U 7f096322 vert u_lake_level 224 float 1 0
U 7f096322 vert u_sea_level 228 float 1 0
U 7f096322 vert u_lake 240 vec4 1 0
U 7f096322 vert u_snow_line 256 float 1 0
U 7f096322 vert u_wind 260 float 1 0
U 7f096322 vert u_push 272 vec3 1 0
U 7f096322 vert u_tile 288 vec2 1 0
U 7f096322 vert u_tile_cells 296 int 1 0
U 7f096322 vert u_per_cell 300 int 1 0
U 7f096322 vert u_tiles 304 vec4 256 16
U 7f096322 vert u_s0 4400 float 1 0
U 7f096322 vert u_d0 4404 float 1 0
U 7f096322 vert u_radius 4408 float 1 0
U 7f096322 vert u_dbg 4412 int 1 0
I 7f096322 a_pos 0 vec3
I 7f096322 a_uv 2 vec2
B 7f096322 frag 1 964
U 7f096322 frag u_cascade_vp 0 mat4 5 64
U 7f096322 frag u_cascade_split 320 float 5 16
U 7f096322 frag u_cascade_range 400 float 5 16
U 7f096322 frag u_cascade_texel 480 float 5 16
U 7f096322 frag u_sun_dir 560 vec3 1 0
U 7f096322 frag u_sun_color 576 vec3 1 0
U 7f096322 frag u_cam_pos 592 vec3 1 0
U 7f096322 frag u_prefilter_levels 604 float 1 0
U 7f096322 frag u_fog_density 608 float 1 0
U 7f096322 frag u_fog_height_falloff 612 float 1 0
U 7f096322 frag u_fog_base 616 float 1 0
U 7f096322 frag u_clip_y 620 float 1 0
U 7f096322 frag u_spec_scale 624 float 1 0
U 7f096322 frag u_sky_rot 632 vec2 1 0
U 7f096322 frag u_ground_alb 640 vec3 1 0
U 7f096322 frag u_ground_alb_hi 656 vec3 1 0
U 7f096322 frag u_ground_hi_y 668 float 1 0
U 7f096322 frag u_ground_hi_w 672 float 1 0
U 7f096322 frag u_ibl_scale 688 vec3 1 0
U 7f096322 frag u_daylight 700 float 1 0
U 7f096322 frag u_fire_pos 704 vec3 1 0
U 7f096322 frag u_fire_color 720 vec3 1 0
U 7f096322 frag u_hand_pos 736 vec3 1 0
U 7f096322 frag u_hand_color 752 vec3 1 0
U 7f096322 frag u_hand_dir 768 vec3 1 0
U 7f096322 frag u_hand_cone 780 float 1 0
U 7f096322 frag u_hand_reach 784 float 1 0
U 7f096322 frag u_ts_origin 792 vec2 1 0
U 7f096322 frag u_ts_half 800 float 1 0
U 7f096322 frag u_ts_on 804 float 1 0
U 7f096322 frag u_force_cascade 808 int 1 0
U 7f096322 frag u_cloud_shadow 812 float 1 0
U 7f096322 frag u_time 816 float 1 0
U 7f096322 frag u_fog_inscatter 820 float 1 0
U 7f096322 frag u_fog_desat 824 float 1 0
U 7f096322 frag u_model_h 828 float 1 0
U 7f096322 frag u_view 832 mat4 1 0
U 7f096322 frag u_tint 896 vec3 1 0
U 7f096322 frag u_rough_scale 908 float 1 0
U 7f096322 frag u_emissive 912 float 1 0
U 7f096322 frag u_blade_base 928 vec3 1 0
U 7f096322 frag u_blade_tip 944 vec3 1 0
U 7f096322 frag u_blade_cols 956 float 1 0
U 7f096322 frag u_blade_tex_on 960 float 1 0
T 7f096322 u_arm 2
T 7f096322 u_blade_tex 3
T 7f096322 u_brdf 4
T 7f096322 u_diff 5
T 7f096322 u_irradiance 6
T 7f096322 u_nrm 7
T 7f096322 u_ortho 8
T 7f096322 u_prefilter 9
T 7f096322 u_shadow 10
T 7f096322 u_tershadow 11
T 7f096322 u_ts_height 12
P cb13f3c6 grass.vert model.frag #define FOLIAGE;#define BLADE;#define GBLADE;
B cb13f3c6 vert 0 324
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
U cb13f3c6 vert u_cam_pos 192 vec3 1 0
U cb13f3c6 vert u_time 204 float 1 0
U cb13f3c6 vert u_ts_origin 208 vec2 1 0
U cb13f3c6 vert u_ts_half 216 float 1 0
U cb13f3c6 vert u_ortho_on 220 float 1 0
U cb13f3c6 vert u_lake_level 224 float 1 0
U cb13f3c6 vert u_sea_level 228 float 1 0
U cb13f3c6 vert u_lake 240 vec4 1 0
U cb13f3c6 vert u_snow_line 256 float 1 0
U cb13f3c6 vert u_wind 260 float 1 0
U cb13f3c6 vert u_push 272 vec3 1 0
U cb13f3c6 vert u_tile 288 vec2 1 0
U cb13f3c6 vert u_tile_cells 296 int 1 0
U cb13f3c6 vert u_per_cell 300 int 1 0
U cb13f3c6 vert u_s0 304 float 1 0
U cb13f3c6 vert u_d0 308 float 1 0
U cb13f3c6 vert u_radius 312 float 1 0
U cb13f3c6 vert u_px 316 float 1 0
U cb13f3c6 vert u_dbg 320 int 1 0
I cb13f3c6 a_pos 0 vec3
I cb13f3c6 a_uv 2 vec2
B cb13f3c6 frag 1 964
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
U cb13f3c6 frag u_cascade_texel 480 float 5 16
U cb13f3c6 frag u_sun_dir 560 vec3 1 0
U cb13f3c6 frag u_sun_color 576 vec3 1 0
U cb13f3c6 frag u_cam_pos 592 vec3 1 0
U cb13f3c6 frag u_prefilter_levels 604 float 1 0
U cb13f3c6 frag u_fog_density 608 float 1 0
U cb13f3c6 frag u_fog_height_falloff 612 float 1 0
U cb13f3c6 frag u_fog_base 616 float 1 0
U cb13f3c6 frag u_clip_y 620 float 1 0
U cb13f3c6 frag u_spec_scale 624 float 1 0
U cb13f3c6 frag u_sky_rot 632 vec2 1 0
U cb13f3c6 frag u_ground_alb 640 vec3 1 0
U cb13f3c6 frag u_ground_alb_hi 656 vec3 1 0
U cb13f3c6 frag u_ground_hi_y 668 float 1 0
U cb13f3c6 frag u_ground_hi_w 672 float 1 0
U cb13f3c6 frag u_ibl_scale 688 vec3 1 0
U cb13f3c6 frag u_daylight 700 float 1 0
U cb13f3c6 frag u_fire_pos 704 vec3 1 0
U cb13f3c6 frag u_fire_color 720 vec3 1 0
U cb13f3c6 frag u_hand_pos 736 vec3 1 0
U cb13f3c6 frag u_hand_color 752 vec3 1 0
U cb13f3c6 frag u_hand_dir 768 vec3 1 0
U cb13f3c6 frag u_hand_cone 780 float 1 0
U cb13f3c6 frag u_hand_reach 784 float 1 0
U cb13f3c6 frag u_ts_origin 792 vec2 1 0
U cb13f3c6 frag u_ts_half 800 float 1 0
U cb13f3c6 frag u_ts_on 804 float 1 0
U cb13f3c6 frag u_force_cascade 808 int 1 0
U cb13f3c6 frag u_cloud_shadow 812 float 1 0
U cb13f3c6 frag u_time 816 float 1 0
U cb13f3c6 frag u_fog_inscatter 820 float 1 0
U cb13f3c6 frag u_fog_desat 824 float 1 0
U cb13f3c6 frag u_model_h 828 float 1 0
U cb13f3c6 frag u_view 832 mat4 1 0
U cb13f3c6 frag u_tint 896 vec3 1 0
U cb13f3c6 frag u_rough_scale 908 float 1 0
U cb13f3c6 frag u_emissive 912 float 1 0
U cb13f3c6 frag u_blade_base 928 vec3 1 0
U cb13f3c6 frag u_blade_tip 944 vec3 1 0
U cb13f3c6 frag u_blade_cols 956 float 1 0
U cb13f3c6 frag u_blade_tex_on 960 float 1 0
T cb13f3c6 u_arm 2
T cb13f3c6 u_blade_tex 3
T cb13f3c6 u_brdf 4
T cb13f3c6 u_diff 5
T cb13f3c6 u_irradiance 6
T cb13f3c6 u_nrm 7
T cb13f3c6 u_ortho 8
T cb13f3c6 u_prefilter 9
T cb13f3c6 u_shadow 10
T cb13f3c6 u_tershadow 11
T cb13f3c6 u_ts_height 12
P b8cff226 grass.vert model.frag #define FOLIAGE;#define BLADE;#define GBLADE;#define TILES;
B b8cff226 vert 0 4420
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
U b8cff226 vert u_cam_pos 192 vec3 1 0
U b8cff226 vert u_time 204 float 1 0
U b8cff226 vert u_ts_origin 208 vec2 1 0
U b8cff226 vert u_ts_half 216 float 1 0
U b8cff226 vert u_ortho_on 220 float 1 0
U b8cff226 vert u_lake_level 224 float 1 0
U b8cff226 vert u_sea_level 228 float 1 0
U b8cff226 vert u_lake 240 vec4 1 0
U b8cff226 vert u_snow_line 256 float 1 0
U b8cff226 vert u_wind 260 float 1 0
U b8cff226 vert u_push 272 vec3 1 0
U b8cff226 vert u_tile 288 vec2 1 0
U b8cff226 vert u_tile_cells 296 int 1 0
U b8cff226 vert u_per_cell 300 int 1 0
U b8cff226 vert u_tiles 304 vec4 256 16
U b8cff226 vert u_s0 4400 float 1 0
U b8cff226 vert u_d0 4404 float 1 0
U b8cff226 vert u_radius 4408 float 1 0
U b8cff226 vert u_px 4412 float 1 0
U b8cff226 vert u_dbg 4416 int 1 0
I b8cff226 a_pos 0 vec3
I b8cff226 a_uv 2 vec2
B b8cff226 frag 1 964
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
U b8cff226 frag u_cascade_texel 480 float 5 16
U b8cff226 frag u_sun_dir 560 vec3 1 0
U b8cff226 frag u_sun_color 576 vec3 1 0
U b8cff226 frag u_cam_pos 592 vec3 1 0
U b8cff226 frag u_prefilter_levels 604 float 1 0
U b8cff226 frag u_fog_density 608 float 1 0
U b8cff226 frag u_fog_height_falloff 612 float 1 0
U b8cff226 frag u_fog_base 616 float 1 0
U b8cff226 frag u_clip_y 620 float 1 0
U b8cff226 frag u_spec_scale 624 float 1 0
U b8cff226 frag u_sky_rot 632 vec2 1 0
U b8cff226 frag u_ground_alb 640 vec3 1 0
U b8cff226 frag u_ground_alb_hi 656 vec3 1 0
U b8cff226 frag u_ground_hi_y 668 float 1 0
U b8cff226 frag u_ground_hi_w 672 float 1 0
U b8cff226 frag u_ibl_scale 688 vec3 1 0
U b8cff226 frag u_daylight 700 float 1 0
U b8cff226 frag u_fire_pos 704 vec3 1 0
U b8cff226 frag u_fire_color 720 vec3 1 0
U b8cff226 frag u_hand_pos 736 vec3 1 0
U b8cff226 frag u_hand_color 752 vec3 1 0
U b8cff226 frag u_hand_dir 768 vec3 1 0
U b8cff226 frag u_hand_cone 780 float 1 0
U b8cff226 frag u_hand_reach 784 float 1 0
U b8cff226 frag u_ts_origin 792 vec2 1 0
U b8cff226 frag u_ts_half 800 float 1 0
U b8cff226 frag u_ts_on 804 float 1 0
U b8cff226 frag u_force_cascade 808 int 1 0
U b8cff226 frag u_cloud_shadow 812 float 1 0
U b8cff226 frag u_time 816 float 1 0
U b8cff226 frag u_fog_inscatter 820 float 1 0
U b8cff226 frag u_fog_desat 824 float 1 0
U b8cff226 frag u_model_h 828 float 1 0
U b8cff226 frag u_view 832 mat4 1 0
U b8cff226 frag u_tint 896 vec3 1 0
U b8cff226 frag u_rough_scale 908 float 1 0
U b8cff226 frag u_emissive 912 float 1 0
U b8cff226 frag u_blade_base 928 vec3 1 0
U b8cff226 frag u_blade_tip 944 vec3 1 0
U b8cff226 frag u_blade_cols 956 float 1 0
U b8cff226 frag u_blade_tex_on 960 float 1 0
T b8cff226 u_arm 2
T b8cff226 u_blade_tex 3
T b8cff226 u_brdf 4
T b8cff226 u_diff 5
T b8cff226 u_irradiance 6
T b8cff226 u_nrm 7
T b8cff226 u_ortho 8
T b8cff226 u_prefilter 9
T b8cff226 u_shadow 10
T b8cff226 u_tershadow 11
T b8cff226 u_ts_height 12
P 3733fc38 impostor.vert impostor.frag
B 3733fc38 vert 0 232
U 3733fc38 vert u_view 0 mat4 1 0
@ -3522,3 +3525,72 @@ T 46e2325c u_scene 7
T 46e2325c u_shadow 8
T 46e2325c u_tershadow 9
T 46e2325c u_ts_height 10
P b20fdcb5 grass_inst.vert model.frag #define FOLIAGE;#define BLADE;#define GBLADE;#define GINST;
B b20fdcb5 vert 0 160
U b20fdcb5 vert u_view 0 mat4 1 0
U b20fdcb5 vert u_proj 64 mat4 1 0
U b20fdcb5 vert u_time 128 float 1 0
U b20fdcb5 vert u_wind 132 float 1 0
U b20fdcb5 vert u_push 144 vec3 1 0
U b20fdcb5 vert u_dbg 156 int 1 0
I b20fdcb5 i_root 3 vec4
I b20fdcb5 i_shape 4 vec4
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 964
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
U b20fdcb5 frag u_cascade_texel 480 float 5 16
U b20fdcb5 frag u_sun_dir 560 vec3 1 0
U b20fdcb5 frag u_sun_color 576 vec3 1 0
U b20fdcb5 frag u_cam_pos 592 vec3 1 0
U b20fdcb5 frag u_prefilter_levels 604 float 1 0
U b20fdcb5 frag u_fog_density 608 float 1 0
U b20fdcb5 frag u_fog_height_falloff 612 float 1 0
U b20fdcb5 frag u_fog_base 616 float 1 0
U b20fdcb5 frag u_clip_y 620 float 1 0
U b20fdcb5 frag u_spec_scale 624 float 1 0
U b20fdcb5 frag u_sky_rot 632 vec2 1 0
U b20fdcb5 frag u_ground_alb 640 vec3 1 0
U b20fdcb5 frag u_ground_alb_hi 656 vec3 1 0
U b20fdcb5 frag u_ground_hi_y 668 float 1 0
U b20fdcb5 frag u_ground_hi_w 672 float 1 0
U b20fdcb5 frag u_ibl_scale 688 vec3 1 0
U b20fdcb5 frag u_daylight 700 float 1 0
U b20fdcb5 frag u_fire_pos 704 vec3 1 0
U b20fdcb5 frag u_fire_color 720 vec3 1 0
U b20fdcb5 frag u_hand_pos 736 vec3 1 0
U b20fdcb5 frag u_hand_color 752 vec3 1 0
U b20fdcb5 frag u_hand_dir 768 vec3 1 0
U b20fdcb5 frag u_hand_cone 780 float 1 0
U b20fdcb5 frag u_hand_reach 784 float 1 0
U b20fdcb5 frag u_ts_origin 792 vec2 1 0
U b20fdcb5 frag u_ts_half 800 float 1 0
U b20fdcb5 frag u_ts_on 804 float 1 0
U b20fdcb5 frag u_force_cascade 808 int 1 0
U b20fdcb5 frag u_cloud_shadow 812 float 1 0
U b20fdcb5 frag u_time 816 float 1 0
U b20fdcb5 frag u_fog_inscatter 820 float 1 0
U b20fdcb5 frag u_fog_desat 824 float 1 0
U b20fdcb5 frag u_model_h 828 float 1 0
U b20fdcb5 frag u_view 832 mat4 1 0
U b20fdcb5 frag u_tint 896 vec3 1 0
U b20fdcb5 frag u_rough_scale 908 float 1 0
U b20fdcb5 frag u_emissive 912 float 1 0
U b20fdcb5 frag u_blade_base 928 vec3 1 0
U b20fdcb5 frag u_blade_tip 944 vec3 1 0
U b20fdcb5 frag u_blade_cols 956 float 1 0
U b20fdcb5 frag u_blade_tex_on 960 float 1 0
T b20fdcb5 u_arm 2
T b20fdcb5 u_blade_tex 3
T b20fdcb5 u_brdf 4
T b20fdcb5 u_diff 5
T b20fdcb5 u_irradiance 6
T b20fdcb5 u_nrm 7
T b20fdcb5 u_prefilter 8
T b20fdcb5 u_shadow 9
T b20fdcb5 u_tershadow 10
T b20fdcb5 u_ts_height 11