SkyruneShader v18 - Iris + Sodium (Minecraft Java, Fabric)

INSTALL
  Drop this .zip (do not unzip) into  .minecraft/shaderpacks/
  Options > Video Settings > Shader Packs > SkyruneShader

REMOVED IN v18 (SSR pulled a second time, waves removed)
  - Screen-space reflections (blocks/mobs in water) are gone again, fully
    removed from the code, not just toggled off. The dithering fix in v17
    did not resolve the artifacts on screen edges - two attempts at this
    technique have both produced visible problems, so it will not be
    re-added without a fundamentally different approach.
  - What water reflects now: the analytic sky/sun color only (sky
    gradient, sunset tint, and the sun's sparkle/glint on the surface) -
    this is the same reflection code that was already there underneath the
    SSR layer, so the sun glint you asked to keep was never actually
    dependent on SSR and is unaffected by this removal.
  - General wave swell removed - water is a flat surface again. The
    small ripple that radiates near the player/boat is kept (it's a
    separate, self-contained effect, decoupled from the wave height
    setting so removing the swell didn't remove it too). Toggle/tune in
    Shader Options > WATER.

NEW IN v17
  - Golden hour: sunrise/sunset now push a noticeably deeper orange/gold
    grade (not just a warmer version of daylight), plus a soft contained
    glow around the sun disc itself. Shader Options > GRADE > Golden hour
    warmth / Sun glow.
  - Real screen-space reflections are back (second attempt). The first
    version (pulled after v8) banded/checkered because the raymarch had no
    per-pixel dithering - neighboring pixels' rays sampled at identical
    distances, and any hit/miss flip became a hard visible edge, especially
    under complex geometry like a tree canopy. This version jitters the
    starting sample offset per pixel (the same dithering trick already used
    for god rays), which should turn that aliasing into soft noise instead
    of a checkerboard pattern. I cannot fully guarantee this in a live
    client - please check it against a tree line or similar busy geometry
    over water and report back. Toggle: Shader Options > WATER > "Real
    reflections (blocks/mobs)" - turn off immediately if you see banding
    again, no need to wait for a new version.
  - Known limitation unchanged: your own first-person body still can't
    appear in the reflection (vanilla doesn't render it), other players/
    mobs/blocks do.

NEW/FIXED IN v16
  - Real, visible waves: wave height roughly 3.5x taller than v15 (which
    was too subtle to notice). Water sun-sparkle narrowed back to sharp
    points instead of a wide sheen, and the deep-water color pushed toward
    a more saturated turquoise-blue instead of a duller tint.
  - Leaves now sway too (whole-block gentle jitter, smaller than the
    plant sway since leaves have no single base to anchor).
  - Wind sway on grass/flowers roughly doubled - v15's amount was too
    subtle to read as movement.
  - Water disturbance near the player/boat: an honest approximation, not a
    true trailing wake. A real wake needs the boat's velocity and a
    history buffer persisted across frames - exactly the kind of fragile
    multi-frame technique that caused the reflection bugs pulled earlier.
    What's here instead is a ripple radiating from the camera's position,
    which tracks a boat reasonably well since the camera rides with it,
    but will not draw a V-shaped trail behind a moving boat. Toggle/tune
    in Shader Options > WATER > "Water ripple near player/boat".
  - Addressed the whiteness/color complaint from multiple angles at once:
    removed a small sky brightness boost, lowered exposure further,
    pushed saturation and contrast up significantly, and made the water's
    own color more vivid instead of relying on a bright sparkle to read as
    "water."

NEW/FIXED IN v15
  - Wind sway: grass, ferns, flowers, saplings, crops and vines now sway
    gently in the wind. Identified via block.properties (ID 130) and
    displaced in the terrain vertex shader - the base of each plant stays
    anchored to the ground while the top sways, using the plant's own
    local model height as the anchor weight. Toggle/strength/speed in
    Shader Options > WATER (grouped with the other environment motion
    settings).
  - Much less fog. FOG_DENSITY dropped to 0.5 - below the original 1.0
    default, not just back to it - per explicit feedback that the last
    pass made everything too hazy.
  - Fixed the washed-out/whitened look: exposure down to 0.98, saturation
    and contrast brought back up. The extra fog from last version was
    compounding with the height-fog multiplier and pushing the whole scene
    toward the fog color, which read as "everything is bleached."
  - Prettier water: slightly calmer base swell (wave height down a touch)
    but wider, more numerous sun sparkle highlights and more visible fine
    ripple detail, closer to the small-wave shimmer in the reference photo.

REVERTED IN v14 (AO/bloom/wetness removed - reported buggy)
  - Ambient occlusion, bloom and rain wetness (v13) have been fully removed,
    not just toggled off - same policy as when SSR was pulled earlier: if
    something causes visible problems, it comes out of the code entirely
    rather than staying as a disabled option.
  - Atmosphere retuned for a softer, hazier look: more distance fog by
    default, lower saturation and contrast, lighter vignette - closer to a
    misty, diffused-light mood rather than a punchy high-contrast one.
  - Fixed a real bug found while in this file: shaders.properties had
    "clouds = fast" hardcoded since the very first version, which silently
    forced flat clouds no matter what the player chose in Video Settings.
    That directly undercut the "set Clouds to Fancy for 3D clouds" advice
    from v9 - it's now "clouds = default" so the player's own setting is
    respected.

NEW IN v13 (ambient occlusion + immersion) - REMOVED IN v14, see above
  - Ambient occlusion: corners, block edges and crevices darken naturally
    for more visual depth. Depth-only technique (4 taps, no extra render
    buffer) - deliberately avoided anything resembling the buffer-based
    reflection technique that caused problems earlier.
  - Bloom: a soft, lightweight glow around already-bright things (sun,
    torches, lava, glowing ores). Single-pass 8-tap blur, not a full
    multi-pass bloom - a cheaper approximation that still reads as
    "cinematic glow" without a new render pass.
  - Rain wetness: upward-facing surfaces under open sky darken slightly and
    pick up a soft sheen while it's raining, fading back once it stops.
  - All three are in Shader Options > IMMERSION, on by default and each
    individually toggleable/tunable. AO and bloom are the ones to turn off
    first if you need FPS back after v12's optimization pass.

MEGA-OPTIMIZED IN v12
  All defaults tightened for maximum FPS. Nothing was removed from the
  code - every effect is still there and one click away in Shader
  Options - only the out-of-the-box settings changed:
  - Shadows: hard shadows by default (SHADOW_PCF 0) instead of the 3x3 soft
    kernel - this alone cuts shadow texture reads from 9 to 1 per lit
    pixel, on every terrain/entity/water fragment on screen.
  - Colored shadows off by default (one less texture read per lit pixel).
  - Shadow map: 768px -> 512px, distance 64 -> 48 blocks. Quadratically
    cheaper to render and sample.
  - God rays: 6 -> 4 steps, distance 48 -> 32 blocks.
  These are compile-time toggles (#if, not runtime branches), so turning
  soft shadows or colored shadows back on in Shader Options costs exactly
  what it did before - nothing was deleted, just switched off by default.
  Turn any of it back up in QUALITY if your PC has headroom; the visuals
  (water, ice, ore glow, seasons, torches, flashlight, clouds) are
  untouched.

FIXED IN v11
  - SEASON OPTION CAUSING A COMPILE ERROR. The season slider used a
    "value:Label" syntax ([0:Normal 1:Winter ...]) meant to show text names
    in the menu. Selecting anything but the default wrote that literal text
    back into the #define, producing invalid GLSL (#define SEASON
    1:Winter) and a shader compile error - which is why "Normal" (the
    untouched default) always worked and every other season didn't. Switched
    to a plain numeric list ([0 1 2 3 4]); tested all five values compile
    cleanly. The option label now spells out what each number means since
    the slider itself will only show the number.

OPTIMIZED IN v11
  - Shadow map resolution lowered 1024 -> 768 and shadow distance
    80 -> 64 blocks (synced across all 6 files that declare them).
  - God ray steps lowered 8 -> 6 and max distance 56 -> 48 blocks.
  - These are the two biggest fixed costs in the pack, so they're the
    settings to drop first if you still want more FPS: Shader Options >
    QUALITY > God ray quality, and God ray distance.

NEW IN v10 (visual pass: shadows, fog, water)
  - Colored shadows: stained glass and other tinted translucents now leak a
    hint of their color into their shadow instead of it always being flat
    black. Toggle: Shader Options > (shadows section) > COLORED_SHADOWS.
  - Height-based fog: haze is now denser near ground/sea level and thins
    out with altitude, instead of a flat distance-only fog that looked the
    same on a mountaintop as in a valley.
  - Finer water surface detail: a faster, smaller-amplitude ripple layer is
    now blended on top of the existing swell for more surface texture up
    close, without changing the overall wave motion.

NEW IN v9
  - Seasons. Shader Options > ATMOSPHERE > Season: Normal, Winter, Spring,
    Summer, Autumn. Tints the sky, distance fog, water reflections and
    ambient light. Does not recolor grass/leaves (that would need its own
    per-block pass) - it changes the atmosphere, not individual blocks.
  - Cloud shading. Clouds are now shaded by face direction (top brighter,
    underside darker, sides in between) instead of one flat color, so
    Minecraft's "Fancy" 3D cloud prisms actually read as 3D.
  - IMPORTANT: real 3D cloud geometry is a vanilla Minecraft setting, not
    something a shader pack generates - go to Options > Video Settings >
    Clouds and set it to "Fancy" (not "Fast") to get the 3D prism shape
    this shading is designed for.

REMOVED IN v8
  - Screen-space reflections (blocks/mobs/players reflected in water) have
    been removed entirely. The technique needed an extra render buffer
    (colortex1) and a per-pixel raymarch with no dithering on the step
    offset, which produced visible banding/checkerboard-style artifacts
    across the water, not just near specific objects. Rather than iterate
    further on a fragile technique, water is back to the reliable
    analytic sky reflection (sunsets, biome tint, sun glint) used in v5,
    with none of the extra buffer or raymarch complexity.

FIXED IN v7
  - HELD ITEMS/BLOCKS LOOKING WARPED AND OVERBRIGHT. gbuffers_hand shared
    the same lighting code as terrain, which reconstructs a "world position"
    using gbufferModelViewInverse. That matrix is for the main camera - the
    hand uses its own local presentation transform (swing, bob, offset), so
    combining the two produced garbage positions/normals feeding into the
    shadow-map lookup and lighting, which showed up as a distorted,
    overbright, warped-looking held item (most visible on 3D block items
    like logs). The hand now has its own simple, self-contained shading
    with no shadow sampling, no fog and no handheld/flashlight
    self-illumination - all of which needed that broken reconstruction.

NEW IN v6
  - Real reflections. Water now reflects blocks, mobs and other players
    above it, not just a procedural sky gradient. This works via a
    screen-space raymarch: the water pass writes its normal into a second
    buffer (colortex1), and composite.fsh marches along the reflected view
    ray, checking it against the already-rendered depth buffer. Where the
    ray hits nothing (open sky), it falls back to the sky-gradient
    reflection exactly as before.
  - KNOWN LIMITATION: vanilla Minecraft never renders your own first-person
    body, so your own reflection cannot appear - that is an engine
    limitation, not something a shader pack can work around. Other players,
    mobs and blocks reflect correctly.
  - Adjustable in Shader Options > WATER: reflection on/off, quality (step
    count), and max reflection distance. Lower quality/distance for FPS.

FIXED IN v5
  - ICE. gbuffers_water only checked face orientation to decide "is this
    water", so ice's flat top face (same orientation as water's) fell
    through to the water code and got animated waves + a blue water tint -
    ice looked like rippling water sitting on an ice texture. Ice is now
    identified through block.properties (ID 120) and gets its own static,
    glossy shading: tight specular sparkle, a faint cold tint, a subtle
    static sky reflection, and no wave animation.

FIXED IN v4
  - ENTITY SHADOWS. shadow.vsh used the shadowModelView uniform directly,
    which drops the per-entity model transform, so player and mob shadows
    landed in the wrong place while terrain shadows looked fine. It now uses
    gl_ModelViewMatrix / gl_ProjectionMatrix, which include that transform.
  - Sunlight and water reflections toned down (SUN_STRENGTH, WATER_REFLECT,
    WATER_SPECULAR are all adjustable in Shader Options).

NEW IN v4
  - Glowing ores, driven by block.properties + mc_Entity. The glow is masked
    by saturation and brightness so only the mineral pixels light up, and it
    fades in as ambient light drops so ores pop in caves.
  - Flashlight: focused cone along your view direction.
  - Underwater rework: depth-attenuated water fog, rippling caustics, and
    correct handling of the water surface seen from below (mostly total
    internal reflection rather than sky).

FLASHLIGHT AND THE "C" KEY
  A shader pack cannot read the keyboard - Iris exposes no key state to
  shaders, and this is by design (Iris is a shaders mod only). The flashlight
  is therefore toggled in:
      Shader Options > LIGHTING > Flashlight
  There is no way to bind it to C from inside the pack. The closest thing to
  a key-driven light is the handheld light, which is already automatic:
  hold a torch or lantern and it lights your surroundings.

SHADER OPTIONS
  LIGHTING - sun, ambient, moon, torches, handheld, flashlight, ore glow
  WATER    - waves, reflection, sun glint, underwater density, caustics
  QUALITY  - god rays, soft shadows, distance fog
  GRADE    - exposure, saturation, vignette

IF A ROUND BLACK BLOB STILL FOLLOWS ENTITIES
  That is vanilla's fake entity shadow, drawn by the game itself, not by this
  pack. Look for an "Entity Shadows" toggle in Sodium / Sodium Extra.

PERFORMANCE (in order of impact)
  1. QUALITY > God ray quality -> 4
  2. QUALITY > Soft shadows -> 0
  3. LIGHTING > Flashlight -> 0 when unused
  4. shadowMapResolution 1024 -> 512 in ALL 7 files that declare it:
     shadow.vsh, gbuffers_terrain.fsh, gbuffers_hand.fsh,
     gbuffers_textured_lit.fsh, gbuffers_entities.fsh,
     gbuffers_water.fsh, composite.fsh
  5. shadowDistance 80.0 -> 48.0 in the same files
