Realistic Shader (BSL-inspired) — for OptiFine
================================================

INSTALL
1. Open Minecraft with OptiFine installed (works on nearly any OptiFine
   version — this pack uses GLSL 1.20-level shader code, the same base
   API OptiFine has supported since the shader system launched, so it
   should load on old and new builds alike).
2. In-game: Options > Video Settings > Shaders > Shader Folder.
3. Drop RealisticShader.zip into the shaderpacks folder that opens
   (do not unzip it — OptiFine reads zips directly).
4. Select "RealisticShader" from the list and hit Done.
5. Open Shader Options in-game to pick a profile (Low/Medium/High/Ultra)
   or toggle individual features and sliders.

FEATURES
- Dynamic directional sun shadows with optional soft (PCF) filtering and
  normal-offset bias
- Wind-waving grass, leaves, crops, and vines, driven by a traveling gust
  wave that sweeps across the whole world (not just independent per-plant
  idling), plus a fast individual flutter layered on leaves
- Multi-directional rolling water waves (several sine waves at different
  angles/speeds summed together) with slope-derived normals, fresnel
  reflections, a specular sun glint, and foam on steep wave crests
- Bloom / light bleed around bright areas and the sun
- Optional volumetric god rays that track the sun's actual screen position
- Ambient occlusion approximation in corners
- Filmic tonemapping with warm-direct / cool-ambient lighting contrast
- Dynamic sky gradient: vivid blue by day, warm band near the horizon at
  dusk/dawn, dark blue at night — plus a proper emissive sun/moon disc
- Realistic clouds: shaded as a lit 3D volume (top catches direct sun,
  underside sits in shadow, sides get raking light) with the same
  day/dusk/night tint as the sky, wispy soft edges based on density, and a
  gentle per-puff bob. There was no dedicated cloud program before, so they
  were silently falling back to a generic lit-block shader — same class of
  bug as the earlier missing sun/moon disc.
- Properly separated warm torchlight / cool skylight: torches, lava, and
  other block light now read warm orange and sky ambient reads cool blue
  as two genuinely separate contributions, instead of one combined
  lightmap value that got uniformly tinted (which was wrongly cooling
  torchlit rooms toward blue before).
- Underwater effect: blue-green tint, darkening, and a slow light shimmer
  while your head is underwater.
- Rain wetness: exposed outdoor surfaces (that actually see open sky —
  covered areas stay dry) darken slightly and pick up a sun-facing sheen
  while it's raining, like a thin puddle film.
- Auto-exposure: overall brightness smoothly adapts to the scene (like an
  eye/camera adjusting) instead of a fixed exposure value — walking from a
  bright field into a dark cave now fades in gradually rather than snapping.
- Colored/translucent shadows: sunlight passing through stained glass now
  tints and dims rather than being either fully blocked or ignored.
- Volumetric fog: real depth-based distance fog using the actual 3D
  distance to each pixel and blending into vanilla's own fog color (which
  already accounts for time of day, biome, rain, and water/lava), instead
  of a flat screen-space darkening.
- Nether/End atmosphere: each dimension now gets its own fog behavior and
  color grade instead of reusing the overworld's. Nether: dense warm
  reddish-orange fog, a slow heat-shimmer distortion (like air over lava),
  and an oppressive warm/red-tinted grade. End: thin pale fog with a subtle
  purple shift, and a desaturated, cool, isolated-feeling grade. These live
  in shaders/world-1/ (Nether) and shaders/world1/ (End) — OptiFine's own
  convention for per-dimension overrides — so the overworld files are
  untouched.

NOT INCLUDED: sound
A shaderpack is pure GLSL — it has no access to the game's audio engine,
so there's no way to add a "wind sound" (or any sound) through this project.
That would need a resource pack that replaces Minecraft's ambient/weather
sound files instead. Happy to build that separately if you want it.


COMPATIBILITY NOTES
- Written against the classic gbuffers_*/composite/final pipeline
  (no custom shadowcomp / DH-specific buffers), which is the part of
  the OptiFine shader spec that has stayed stable the longest — this
  is what gives it its wide version range.
- If a specific OptiFine build errors on load, it's almost always due
  to that build expecting a slightly different uniform set. Check the
  OptiFine log (F3 or the shader debug screen) for the exact uniform
  name it flags, since that's the fastest way to patch it for your
  version.
- Performance scales with shadow resolution and whether God Rays /
  Soft Shadows are enabled — drop to the "Low" profile on weaker GPUs.

TWEAKING
Open shaders/shaders.properties to adjust default profile, shadow
resolution, and sliders (SUN_INTENSITY, EXPOSURE, SATURATION,
FOG_DENSITY). Waving-block lists live in shaders/block.properties.
