- 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>
62 lines
3 KiB
Text
62 lines
3 KiB
Text
# variants.list - every program render3d builds: vertex|fragment|defines (one line; newlines
|
|
# in the defines are written as ";"). A backend that cannot compile shaders at run time
|
|
# (Vulkan: SPIR-V is built ahead) must cover all of them. Regenerate by running the game and
|
|
# its self-tests with R3D_PROGRAMS_LOG=<file> and sorting the result.
|
|
fullscreen.vert|adapt.frag|
|
|
fullscreen.vert|bloom_down.frag|
|
|
fullscreen.vert|bloom_up.frag|
|
|
fullscreen.vert|dof.frag|
|
|
fullscreen.vert|heightgen.frag|#define DEM;
|
|
fullscreen.vert|ibl_brdf.frag|
|
|
fullscreen.vert|ibl_irradiance.frag|
|
|
fullscreen.vert|ibl_prefilter.frag|
|
|
fullscreen.vert|sharpen.frag|
|
|
fullscreen.vert|sky.frag|
|
|
fullscreen.vert|ssao_blur.frag|
|
|
fullscreen.vert|ssgi.frag|
|
|
fullscreen.vert|ternormal.frag|
|
|
fullscreen.vert|tershadow.frag|#define NOISE_ONLY;
|
|
fullscreen.vert|tonemap.frag|
|
|
fullscreen.vert|tonemap.frag|#define HDR10;
|
|
fullscreen.vert|volumetric.frag|
|
|
grass.mesh|model.frag|#define FOLIAGE;#define BLADE;#define MESH;
|
|
grass.vert|model.frag|#define FOLIAGE;#define BLADE;#define GBLADE;
|
|
grass.vert|model.frag|#define FOLIAGE;#define BLADE;#define GBLADE;#define TILES;
|
|
impostor.vert|impostor.frag|
|
|
impostor.vert|impostor.frag|#define SHADOW_PASS;
|
|
model.vert|bake.frag|
|
|
model.vert|bake.frag|#define CARD;
|
|
model.vert|bake.frag|#define FLOWER;
|
|
model.vert|depth.frag|#define FOLIAGE;#define WIND;#define ALPHA_TEST;
|
|
model.vert|depth.frag|#define FOLIAGE;#define WIND;#define ALPHA_TEST;#define NEAR_FADE;
|
|
model.vert|model.frag|
|
|
model.vert|model.frag|#define CARD;#define CHEAP;
|
|
model.vert|model.frag|#define FOLIAGE;#define WIND;#define ALPHA_TEST;
|
|
model.vert|model.frag|#define FOLIAGE;#define WIND;#define ALPHA_TEST;#define NEAR_FADE;
|
|
model.vert|model.frag|#define FOLIAGE;#define WIND;#define BLADE;
|
|
model.vert|model.frag|#define FOLIAGE;#define WIND;#define CARD;
|
|
model.vert|model.frag|#define FOLIAGE;#define WIND;#define EQ_PASS;
|
|
model.vert|model.frag|#define FOLIAGE;#define WIND;#define EQ_PASS;#define NEAR_FADE;
|
|
model.vert|model.frag|#define FOLIAGE;#define WIND;#define FLOWER;
|
|
model.vert|model.frag|#define SHADOW_PASS;#define WIND;#define CARD;
|
|
model.vert|model.frag|#define WIND;
|
|
model.vert|shadow.frag|#define SHADOW_PASS;
|
|
model.vert|shadow.frag|#define SHADOW_PASS;#define WIND;
|
|
model.vert|shadow.frag|#define SHADOW_PASS;#define WIND;#define ALPHA_TEST;
|
|
overlay.vert|overlay.frag|
|
|
overlay.vert|overlay.frag|#define HDR10;
|
|
skin.vert|model.frag|
|
|
skin.vert|model.frag|#define ALPHA_TEST;
|
|
skin.vert|outline.frag|#define OUTLINE;
|
|
skin.vert|outline.frag|#define OUTLINE;#define ALPHA_TEST;
|
|
skin.vert|shadow.frag|#define SHADOW_PASS;
|
|
skin.vert|shadow.frag|#define SHADOW_PASS;#define ALPHA_TEST;
|
|
terrain.vert|terrain.frag|
|
|
terrain.vert|terrain.frag|#define FAR_ONLY;
|
|
terrain.vert|terrain.frag|#define NEAR_ONLY;
|
|
terrain.vert|terrain.frag|#define SUN_INLINE;
|
|
terrain.vert|terrain.frag|#define SUN_INLINE;#define FAR_ONLY;
|
|
terrain.vert|terrain.frag|#define SUN_INLINE;#define NEAR_ONLY;
|
|
terrain.vert|tersun.frag|
|
|
water.vert|water.frag|
|
|
grass_inst.vert|model.frag|#define FOLIAGE;#define BLADE;#define GBLADE;#define GINST;
|