ludic/packages/ludic.render3d/shaders
Orkuncakilkaya b12228c662 feat(render3d): light you can see - sun shafts and valley mist
Everything before this made the air a COLOUR APPLIED TO A SURFACE. Nothing put light
in the space between surfaces, so the basin had no shafts, no pooled mist and no rays
off a ridge at any hour, whatever was done to the fog.

A half-resolution march from the camera to the depth buffer, asking the same shadow
the rest of the frame asks - the cascades, the baked height-field shadow and the cloud
mask - so a shaft is cast by the actual trees and the actual ridge and a passing cloud
dims its own rays. Henyey-Greenstein scattering, because real air throws light forward.
Density and a separate ground-hugging mist layer ride the sun's elevation, so mist
forms in the cold at either end of the day and burns off by mid-morning.

Composited with the bloom pyramid's own tent upsample under ONE/ONE - what was wanted
and already there - and before bloom, so a shaft blooms. Into post_hdr, not post_scene:
post_scene is what the water refracts and shafts added there would sit under the lake.

The tuning that mattered was the sky term, which is added at every step: at 0.06 it
accumulated into a flat grey wash lifting lit and shadowed air equally, which is the
contrast a shaft is made of, and the valley came out one pale sheet. At 0.012 the sun
dominates and there is light rather than fog. I cut the density and mist three times
before the frame looked like air instead of paint.

R3D_NOVOL=1 for an A/B; Off in Settings skips the pass whole.

400 frames at 07:00: GL 7.1 -> 7.3 s, VK 7.2 -> 7.4 s. Backends agree to 0.08/255.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 16:06:16 +03:00
..
spv feat(render3d): light you can see - sun shafts and valley mist 2026-09-19 16:06:16 +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): compute and indirect draws on Vulkan, and tree layers culled on the GPU (opt-in) 2026-09-15 14:19:43 +03:00
depth.frag perf(render3d): a depth prepass for the near tree foliage 2026-09-13 04:18:38 +03:00
fullscreen.vert feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
grass.mesh feat(render3d): mesh-shader grass 2026-09-15 20:20:42 +03:00
grass.vert render3d: grass in chunks of 256 tiles a draw, flower casters only into the cascades they reach 2026-09-15 16:58:53 +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 feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +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): the air and the light are the hour's, not one constant apiece 2026-09-19 14:42:30 +03:00
model.frag perf(render3d): a depth prepass for the near tree foliage 2026-09-13 04:18:38 +03:00
model.vert perf(render3d): a depth prepass for the near tree foliage 2026-09-13 04:18:38 +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(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
skin.vert feat(render3d): a rim outline around a highlighted actor 2026-09-10 16:15:12 +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(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
ternormal.frag feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
terrain.frag fix(render3d): a lake can be the mirrored water, with its own wet shore 2026-09-16 15:15:28 +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 feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +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): light you can see - sun shafts and valley mist 2026-09-19 16:06:16 +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 fix(render3d): lakes clipped to their ellipse; r3d_fog_base 2026-09-13 00:29:37 +03:00
water.vert feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00