ludic/packages/ludic.render3d/shaders
Orkuncakilkaya 6a82b4928b render3d/foliage: a small plant is occluded by the sward it stands in, so it no longer glows at night
The user saw kit grass, ferns and flowers lit up at night. Nothing was
emissive and every layer draw binds the scene's lighting; what differed was
occlusion. At night the sky's light is nearly all the light, and it is
scaled by ambient occlusion: the meadow's blades are heavily occluded near
the ground, while a kit plant's own AO map knows nothing of the grass around
it, so it took the full sky. By day the sun hides the difference.

model.vert hands on each vertex's height above the model's base (v_lh), and
a non-blade FOLIAGE plant under 2 m scales its AO from 0.35 at the ground to
1 at 0.9 m. Crowns and the blades are untouched.

Measured in the lab (R3D_AT=tree, same binary, old and new SPIR-V): the fern
against the meadow beside it was 2.05x at 23:00 and 1.66x at 13:00; now 1.58x
and 1.60x - the same relation by night as by day. The flowers' brightest
tenth at night 78 -> 52. The noon frame moves 8.4% of pixels past 8 (the fern
and flower bases a little darker; run-to-run noise is part of that).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 12:19:10 +03:00
..
spv render3d/foliage: a small plant is occluded by the sward it stands in, so it no longer glows at night 2026-09-29 12:19:10 +03:00
adapt.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
bake.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
bloom_down.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
bloom_up.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
compute.list feat(render3d): the meadow's blades are culled on the GPU - under 1.5 ms of a MoltenVK frame for all the grass 2026-09-27 15:47:36 +03:00
depth.frag feat(render3d): a bole that does not quake, leaves out of the lens, a light with a reach 2026-09-20 00:06:50 +03:00
dof.frag feat(render3d): anti-aliasing that exists, and a lens for the viewfinder 2026-09-19 17:38:25 +03:00
fullscreen.vert feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
grass.mesh perf(render3d): the terrain's height and normal in R32F + RG16F, 128 MB where one RGBA32F was 256 2026-09-28 02:31:18 +03:00
grass.vert perf(render3d): the terrain's height and normal in R32F + RG16F, 128 MB where one RGBA32F was 256 2026-09-28 02:31:18 +03:00
grass_cull.comp perf(render3d): the terrain's height and normal in R32F + RG16F, 128 MB where one RGBA32F was 256 2026-09-28 02:31:18 +03:00
grass_inst.vert feat(render3d): the meadow's blades are culled on the GPU - under 1.5 ms of a MoltenVK frame for all the grass 2026-09-27 15:47:36 +03:00
grass_reset.comp feat(render3d): the meadow's blades are culled on the GPU - under 1.5 ms of a MoltenVK frame for all the grass 2026-09-27 15:47:36 +03:00
heightgen.frag feat(render3d): terrain_lake_carve - a height map may carry its own lake bed 2026-09-16 15:27:21 +03:00
ibl_brdf.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
ibl_irradiance.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
ibl_prefilter.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
impostor.frag carry: the runtime and render3d work Maroon Lake builds against 2026-09-23 15:55:02 +03:00
impostor.vert feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
lighting.glsl feat(render3d): a bole that does not quake, leaves out of the lens, a light with a reach 2026-09-20 00:06:50 +03:00
model.frag render3d/foliage: a small plant is occluded by the sward it stands in, so it no longer glows at night 2026-09-29 12:19:10 +03:00
model.vert render3d/foliage: a small plant is occluded by the sward it stands in, so it no longer glows at night 2026-09-29 12:19:10 +03:00
noise.glsl feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
outline.frag feat(render3d): a rim outline around a highlighted actor 2026-09-10 16:15:12 +03:00
overlay.frag feat(render3d): HDR calibration; fix the HDR toggle crash and yellow reading as red 2026-09-15 22:57:18 +03:00
overlay.vert feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
probe.comp feat(render3d): compute and indirect draws on Vulkan, and tree layers culled on the GPU (opt-in) 2026-09-15 14:19:43 +03:00
scatter_cull.comp render3d(vulkan): GPU-driven trees - one merged mesh per material, one draw per material; on by default 2026-09-15 16:44:00 +03:00
shadow.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
sharpen.frag feat(render3d): anti-aliasing that exists, and a lens for the viewfinder 2026-09-19 17:38:25 +03:00
skin.vert feat(render3d): an aspen quakes, and a tree is no longer bent like a bow 2026-09-19 21:13:42 +03:00
sky.frag feat(render3d): the air and the light are the hour's, not one constant apiece 2026-09-19 14:42:30 +03:00
ssao.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
ssao_blur.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
ssgi.frag feat(render3d): contact darkening, so things sit ON the ground 2026-09-19 19:49:05 +03:00
ternormal.frag perf(render3d): the terrain's height and normal in R32F + RG16F, 128 MB where one RGBA32F was 256 2026-09-28 02:31:18 +03:00
terrain.frag perf(render3d): the terrain's height and normal in R32F + RG16F, 128 MB where one RGBA32F was 256 2026-09-28 02:31:18 +03:00
terrain.vert feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
tershadow.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
tersun.frag perf(render3d): the terrain's height and normal in R32F + RG16F, 128 MB where one RGBA32F was 256 2026-09-28 02:31:18 +03:00
tonemap.frag feat(render3d): HDR calibration; fix the HDR toggle crash and yellow reading as red 2026-09-15 22:57:18 +03:00
variants.list feat(render3d): the meadow's blades are culled on the GPU - under 1.5 ms of a MoltenVK frame for all the grass 2026-09-27 15:47:36 +03:00
volumetric.frag feat(render3d): light you can see - sun shafts and valley mist 2026-09-19 16:06:16 +03:00
water.frag feat(render3d): the lake answers to a body standing in it 2026-09-19 20:23:27 +03:00
water.vert feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
wind.glsl feat(render3d): one wind, and everything in the valley is moved by it 2026-09-19 18:24:43 +03:00