AuroraVane Shader (Original, für Iris/OptiFine) - v2 Fix/Update
=================================================

Installation
-------------
1. Iris (oder OptiFine) für deine Minecraft-Version installieren.
2. Diesen Ordner "shaders" (bzw. den Inhalt dieses Zips) in
   %appdata%\.minecraft\shaderpacks kopieren.
3. Minecraft starten -> Optionen -> Shader-Packs -> "AuroraVane" auswählen.

Einstellungen
-------------
Über den "Einstellungen"-Button im Shader-Menü findest du folgende Kategorien
mit insgesamt rund 30 Reglern/Schaltern:

- Lighting     : Sonnenlicht, Umgebungslicht, Mondlicht, Night-Vision-Boost,
                 Stärke des dynamischen Lichts von Lichtblöcken
- Shadows      : Schatten an/aus, weiche Schatten (PCF), Schattenstärke
                 (Schatten-Auflösung & -Distanz direkt im shadow.fsh als
                 const-Optionen, ebenfalls über das Menü einstellbar)
- Water        : Wellenhöhe, Wellengeschwindigkeit, Wasser-Helligkeit,
                 Sparkle-Kontrast, Alpha-Falloff, maximale Opazität
- Waving       : wehendes Gras/Blätter an/aus, Windgeschwindigkeit, -stärke
- Sky          : Sonnen-Glow-Größe, Sternenhelligkeit, Wolkenopazität, -höhe,
                 Wolkenzellgröße, Rundheit und Aufbruch der Wolkenpuffs
- Fog          : Nebel an/aus, Nebeldistanz, Unterwassernebel, Höhennebel,
                 zusätzlicher Regennebel
- BloomColor   : Bloom an/aus + Stärke, Belichtung, Sättigung, Kontrast,
                 Weißabgleich, Tonemap-Operator (keine Vignette mehr)
- Misc         : leichte Eigenbeschattung von Entities, Handlicht-Fix

Änderungen in dieser Version
-----------------------------
- Echte Shadow-Map-Schatten eingebaut (vorher war shadow.fsh nur ein leerer
  Platzhalter, es gab gar keine echten Schatten): die Distortion-Kurve für
  scharfe, spielernahe Schatten ist 1:1 aus dem Referenz-Shader
  ("miniature") übernommen (getShadowDistortion). Terrain, Wasser und
  Entities werfen und empfangen jetzt echte, weiche (PCF) Schatten.
- Endgültiger Fix für "wird beim Herunterschauen dunkler": Die Ursache war,
  dass sunPosition von Iris/OptiFine im Eye-Space geliefert wird und sich
  dadurch mit der Kamera dreht. Dadurch änderte sich die Tageslicht-Stärke
  je nachdem, wohin man schaute (u.a. beim Sonnenglanz auf dem Wasser).
  sunPosition wird jetzt überall zuerst in Feet-Space umgerechnet, bevor
  damit gerechnet wird -> Helligkeit hängt nur noch von Tageszeit und
  echten Schatten ab, nicht mehr vom Blickwinkel.
- Wolken überarbeitet im Stil von Complementary Reimagined: warmer
  Sonnen-Tint auf der Lichtseite, kühlerer Ambient-Ton im Eigenschatten,
  Abdunkelung/Entsättigung bei Regen (gleiches Prinzip wie Complementarys
  Cloud-Farbmischung, aber angepasst an die flache Wolken-Geometrie dieses
  Shaders statt an deren volumetrischen Raymarching-Renderer).
- Wasser weiterhin 1:1 vom Referenz-Shader: helle, funkelnde Oberfläche aus
  kontrastverstärktem Wellenmuster statt flacher Textur-Einfärbung; jetzt
  zusätzlich mit stabilem Sonnenglanz und echtem Schatten unter Dächern/Bäumen.
- Echtes dynamisches Licht: jeder Lichtblock (Fackel, Lava, Glowstone,
  Laterne, Seelaterne, Redstone-Lampe, ...) strahlt spürbar warmes Licht in
  seine Umgebung aus, statt nur die flache Vanilla-Lightmap zu nutzen.
- Vignette komplett entfernt.

Hinweis zu den Wolken
----------------------
Complementary Reimagined nutzt ein vollständig volumetrisches,
raymarchtes Wolkensystem, das tief mit dessen eigenem Renderer (eigene
Rauschtexturen, Deferred-Buffer, Atmosphären-Pipeline über ein Dutzend
Dateien) verzahnt ist. Das lässt sich nicht 1:1 in dieses schlankere,
einstufige Shaderpack "hineinkopieren", ohne dessen gesamte Architektur zu
übernehmen. Übernommen wurde stattdessen die Optik/Lichtstimmung
(warmes/kühles Licht, Regenverhalten); falls gewünscht, kann darauf
aufbauend später ein echter volumetrischer Wolkenlayer als größeres
Extra-Projekt ergänzt werden.

Zusätzlich gibt es drei Profile (LOW / BALANCED / ULTRA) oben im Menü, die
viele der Optionen mit einem Klick sinnvoll voreinstellen.

Hinweis
-------
Dies ist ein eigenständig neu geschriebenes, einfaches Shaderpack (kein
Fork/Repack eines bestehenden kommerziellen Packs). Es eignet sich als
Startpunkt zum Weiterbauen und Experimentieren mit eigenen Effekten.

=====================================================================
Änderungen in diesem Update (Bugfixes + Sodium-Style Profile-Menü)
=====================================================================

Gefixte Bugs
------------
- GROSSER FIX: Reihenfolge von Tonemap/ColorGrade war vertauscht.
  ColorGrade hat vorher HDR-Werte (Bloom, Dynamic Light, Sonnenglanz, ...)
  VOR dem Tonemapping hart auf 0-1 geclamped -> jeder helle Punkt wurde
  sofort zu einem flachen, gelblich-weißen Fleck statt sauber abgerollt
  zu werden. Das war die Hauptursache für den "alles wird satt-gelb"-
  Effekt aus deinem Screenshot in der Nähe von Fackeln/Licht. Jetzt läuft
  zuerst tonemap(), danach erst colorGrade().
- Dynamic Light (Fackeln, Lava, Glowstone, ...) hat sich vorher mit der
  bereits eingefärbten Vanilla-Lightmap verdoppelt und additiv ohne Deckel
  aufaddiert -> Überbelichtung direkt an Lichtquellen. Jetzt nur noch ein
  kleiner zusätzlicher Kick nahe an voller Lichtstärke (smoothstep,
  gedeckelt), Standardstärke von 1.0 auf 0.6 gesenkt.
- Bloom war fest auf 1920x1080 Pixel verdrahtet -> auf jeder anderen
  Auflösung war der Weichzeichnungs-Radius falsch (zu eng oder zu breit).
  Nutzt jetzt die echte viewWidth/viewHeight-Auflösung und reagiert nur
  noch auf wirklich überbelichtete Pixel statt auf normal helle Flächen.
- texture2DLod() wurde in mehreren Fragment-Shadern (Sonne/Mond, Wetter,
  Entities, Hand, GUI-Texturen) verwendet, ohne die dafür nötige Extension
  zu deklarieren - kann auf manchen Treibern (v.a. AMD/Intel) zum
  Compile-Fehler führen. Durch normales texture2D() ersetzt (identisch
  bei LOD 0, aber überall sicher kompilierbar).
- Sonne und Mond: die Vanilla-Textur wurde 1:1 durchgereicht und wirkte
  dadurch blass/kaum sichtbar. Neuer Regler CELESTIAL_BRIGHTNESS hellt nur
  die Sonnen-/Mondscheibe selbst auf (Standard 1.6x), ohne die Szene
  global zu überstrahlen.
- Sicherheits-Clamp am Ende jedes Terrain-/Wasser-/Entity-/Hand-Shaders
  gegen ausufernde HDR-Werte, die vorher unkontrolliert ins Bloom liefen.

Neu: Sodium-Style Qualitätsprofile (POTATO/LOW/NORMAL/HIGH/ULTRA)
------------------------------------------------------------------
Oben im Shader-Menü gibt es jetzt statt der alten 3 (LOW/BALANCED/ULTRA)
fünf echte Leistungsstufen zur Auswahl:

- POTATO : keine Schatten, kein Bloom, kein Dynamic Light, keine Höhen-
           nebel, kleinste Shadow-Map (512/64 Blöcke) - für sehr alte/
           schwache PCs.
- LOW    : einfache harte Schatten, kein Bloom, kein Höhennebel, kleines
           Dynamic Light.
- NORMAL : Standard-Look des Shaders (weiche Schatten, moderates Bloom,
           Wolken, Höhennebel) - guter Mittelweg.
- HIGH   : größere Shadow-Map/-Distanz, stärkeres Bloom, dichtere Wolken/
           Nebel.
- ULTRA  : maximale Shadow-Map (4096/320 Blöcke), stärkstes Bloom &
           Dynamic Light, dichteste Wolken, größerer Sonnen-Glow - jetzt
           wirklich spürbar stärker als NORMAL statt nur leicht anders.

Jede Stufe stellt automatisch Schatten-Auflösung/-Distanz, Bloom
(inkl. neuer Kernel-Qualität BLOOM_QUALITY), Dynamic Light, wehendes Laub,
Höhennebel und Wolkendichte passend ein. Alle Regler bleiben danach im
Menü weiter einzeln anpassbar, falls gewünscht.

=====================================================================
Update 2 - Sonne/Mond wieder sichtbar, weniger Nebel
=====================================================================
Root-Cause gefunden: composite.fsh hat Nebel auf ALLE Pixel angewendet,
auch auf Himmel/Sonne/Mond/Wolken (die technisch auf der "unendlich weit
weg"-Tiefe liegen). Die Nebel-Formel hat dort unabhängig von den
Nebel-Reglern praktisch immer ~95% Nebelfarbe eingemischt -> Himmel,
Sonne und Mond verschwanden fast komplett im Nebel. Das war vorher schon
so im Shader, ist aber erst jetzt aufgefallen, weil die alte
Überbelichtung das kaschiert hat.
- Himmel/Sonne/Mond/Wolken werden jetzt NICHT mehr durch den Nebel-Pass
  geschickt (Erkennung über die Tiefe: reine Himmel-Pixel bekommen gar
  keinen Distanz-/Höhennebel mehr aufgedrückt).
- Nebel-Kurve für normales Terrain zusätzlich sanfter (späterer Start,
  weicherer Verlauf, niedrigere maximale Höhennebel-Intensität).
- Die neuen shadowMapResolution/shadowDistance-Einträge wieder aus dem
  Profil-/Menüsystem entfernt (waren zusätzliches Risiko fürs
  Einstellungsmenü) - beide bleiben ganz normal direkt in shadow.fsh als
  const-Werte editierbar, genau wie im Original.

Falls das Einstellungsmenü im Spiel weiterhin leer bleibt: bitte einmal
das Shaderpack im Menü ab- und wieder auswählen (bzw. Iris/Minecraft neu
starten) - Iris cached geladene Packs teils, bis man sie neu auswählt.

=====================================================================
Update 7 - Echte puffige Wolken, Horizont-Dunst
=====================================================================
Hinweis zur "Vorlage" (Complementary Reimagined): Diese darf laut ihrer
eigenen Lizenz (License.txt im Complementary-Zip, Abschnitt 2.1 "Denied
Cases") nicht einfach code-weise in ein anderes, eigenständiges
Shaderpack wie dieses hier übernommen werden - nur der komplette,
unveränderte Look als "Modified Pack" mit Pflicht-Credit wäre erlaubt,
nicht das Herauskopieren einzelner Effekte. Übernommen wurde daher nur
die OPTIK/Stimmung als Vorlage (wie in den vorherigen Updates auch schon
bei den Wolken vermerkt), der komplette Code unten ist neu und
eigenständig für AuroraVane geschrieben.

- NEU: eigenes gbuffers_clouds.vsh/.fsh. Vorher gab es dafür gar kein
  eigenes Programm - Vanillas Wolken sind einfach durch das ungestylte
  gbuffers_basic (reines vColor-Durchreichen) gelaufen, und die dafür
  vorgesehenen Regler (CLOUD_OPACITY, CLOUD_CELL_SIZE, CLOUD_ROUNDNESS,
  CLOUD_BREAKUP, CLOUD_HEIGHT_OFFSET) standen zwar im Menü, wurden aber
  nirgends im Code gelesen - toter Code. Jetzt formt ein echter
  Noise-Puff-Shader jede Wolkenzelle zu einem weichen, runden Puff,
  lässt zufällig einzelne Zellen ganz weg (Breakup) und färbt die
  Wolken warm auf der Sonnenseite / kühl im Schatten oder bei Nacht -
  neuer An/Aus-Regler CLOUDS_PUFFY im Sky-Menü.
- NEU: Horizont-Dunst (HAZE_INTENSITY, Fog-Menü) - zusätzlich zur
  normalen Distanz-/Höhennebel-Kurve wird jetzt auch der reine
  Blickwinkel zum Horizont berücksichtigt (nicht nur die Entfernung):
  flache Blickrichtungen zum Horizont hin blassen deutlich stärker zur
  Himmelsfarbe aus als der Blick nach oben/unten in dieselbe Distanz -
  genau der weiche, "verwaschene" Panorama-Look aus dem Referenzbild.

=====================================================================
Update 6 - Gras-Bug beim Bewegen gefixt, schönere Schatten, Golden-Hour-Atmosphäre
=====================================================================
- ECHTER FIX für "Gras zappelt/dreht sich komisch, wenn ich mich bewege":
  Die Wind-Sway-Funktion hat ihren "welcher Block bin ich"-Seed aus
  gl_Vertex berechnet. Für Terrain ist gl_Vertex relativ zur Kamera/zum
  Spieler - und dieser Versatz verschiebt sich bei jedem einzelnen Frame
  minimal, sobald man sich bewegt (nicht erst beim Wechsel in einen neuen
  Block). floor() davon hat dadurch ständig einen anderen, zufälligen
  "Block" geliefert, obwohl es real derselbe Grasbüschel war -> sichtbar
  als ruckartiges Zappeln/Drehen der Gras-Sway-Richtung beim Laufen.
  Fix in gbuffers_terrain.vsh: cameraPosition wird jetzt zur Vertex-
  Position zurückaddiert, bevor floor() den Block-Seed bildet - dadurch
  ist die Seed-Koordinate wieder eine echte, feste Weltkoordinate, die
  sich nur noch ändert, wenn tatsächlich ein anderer Block gemeint ist.
  Betrifft sowohl wehendes Gras als auch die Blätter-Wind-Phase.
- Weichere, schönere Schatten: PCF-Kernel von 3x3 auf ein gewichtetes 5x5
  vergrößert (weicherer, weniger "treppiger" Schattenrand, z.B. am
  Spielerschatten oder unter Baumkronen), plus sanftes Ausblenden der
  Schatten zum Rand der Shadow-Map hin statt eines harten Abbruchs.
  Standard-Auflösung/-Distanz angehoben (1024/128 -> 2048/176 Blöcke) für
  schärfere und weiter reichende Schatten von Bäumen & Spieler - beides
  bleibt wie gehabt im Shader-Menü frei einstellbar.
- Neue "Golden Hour"-Atmosphäre (composite.fsh): steht die Sonne tief am
  Horizont (Sonnenauf-/-untergang), wird der Nebel/Dunst warm orange
  eingefärbt statt neutral - genau der goldene Dunst-Look aus den
  Referenzbildern. Neuer Regler GOLDEN_HOUR_STRENGTH (Fog-Menü) steuert
  die Stärke, GOLDEN_HOUR_ATMOSPHERE schaltet den Effekt ganz ab.

=====================================================================
Update 5 - Bugfix (richtige Ursache): Rauschen auf Lava/Fackel/Verzauberungstisch
=====================================================================
Der Mipmap-Bias-Fix aus Update 4 hat das Rauschen NICHT behoben - die
tatsächliche Ursache lag woanders: Die Stärke des neuen Farbglühens wurde
direkt von der rohen Textur-Helligkeit jedes einzelnen Texels abgeleitet
(mit hartem x2.2-Clamp). Lava, Feuer/Fackelflamme und die sich ständig
neu erzeugende Zufalls-Glyphen-Textur des Verzauberungstisches haben aber
von Natur aus sehr feinkörnige, "unruhige" Texturen - dieser harte
Multiplikator hat genau dieses feine Rauschen massiv verstärkt und durch
die Bloom-Schwelle noch sichtbarer gemacht.
Fix: Die Helligkeits-Maske wird jetzt bewusst bei einer stark
UNSCHARFEN Mip-Stufe (bias +4.0 statt -100.0) gesampelt statt beim
scharfen Texel oder der Lightmap (letztere wurde kurz als Zwischenschritt
versucht, fällt aber bei der Redstone-Fackel - Lichtstufe nur 7 - und dem
Verzauberungstisch - leuchtet in Vanilla gar nicht selbst - faktisch aus
und wurde wieder verworfen). Eine grob gemittelte, unscharfe Helligkeit
hat kein Texel-Rauschen mehr, unterscheidet aber weiterhin grob
"heller Flammen-/Rune-Bereich" von "dunkler Holz-/Stein-Bereich".

=====================================================================
Update 4 - Bugfix: verrauschte/verpixelte Lava, Fackeln, Verzauberungstisch
=====================================================================
Root-Cause: Lava, Fackelflamme und das animierte Overlay des
Verzauberungstisches bestehen aus mehreren Animationsframes, die
übereinander in derselben Textur-Atlas-Spalte liegen. Die automatische
Mipmap-Auswahl von texture2D() hat dort teils Pixel aus benachbarten
Animationsframes mit hineingemischt -> das sichtbare "TV-Rauschen"/
verrauschte Flimmern auf genau diesen drei Blockarten.
Fix: alle texture2D(gtexture, ...)-Aufrufe in jedem betroffenen
Fragment-Shader (Terrain, Entities, Hand, Wasser, Wetter, GUI-Texturen,
Sonne/Mond, Schatten) erzwingen jetzt über den eingebauten bias-Parameter
(texture2D(gtexture, uv, -100.0)) die feinste Mipmap-Stufe (LOD 0) - kein
Vermischen mehr zwischen Animationsframes. Bewusst NICHT über
texture2DLod() gelöst, da das (siehe Update weiter unten) auf manchen
Treibern schon mal zu Kompilierfehlern geführt hat; der bias-Parameter
ist normales GLSL 1.20 und braucht keine Extension.

=====================================================================
Update 3 - Farbiges Licht pro Lichtquelle (echte "Atmosphäre")
=====================================================================
Neu: jeder Lichtblock leuchtet jetzt in seiner eigenen Farbe und erzeugt
dadurch über das vorhandene Bloom einen farbigen Lichtschein/Atmosphäre
um sich herum - vorher hatten alle Lichtblöcke denselben pauschalen
warmen Ton.

- Redstone-Fackel: kräftiges rotes Glühen + rote Bloom-Atmosphäre
- Seelenfackel/-laterne/-lagerfeuer, Seelaterne, Beacon: kühles Cyan
- Fackel, Laterne, Lagerfeuer, Kürbislaterne: warmes Orange (wie vorher)
- Glowstone, Redstone-Lampe, Shroomlight, End-Rod, Froglights: helles
  Warmweiß
- Lava/Magma: tiefes, leicht flackerndes Orange-Rot
- Verzauberungstisch: animiertes, pulsierendes Violett statt der alten,
  flachen dunkellila Optik

Technisch: die Blöcke werden über neue Einträge in block.properties
(IDs 20001-20006) erkannt, der Vertex-Shader reicht die ID als varying
an den Fragment-Shader weiter, und lib/common.glsl (getEmissiveGlow())
gibt dafür einen echten HDR-Farbwert zurück, der on top zur normalen
Beleuchtung addiert wird. Da der Wert bewusst überbelichtet ist, greift
automatisch das bestehende Bloom in composite.fsh und färbt den
Lichtschein in genau dieser Farbe ein - eine einfache, aber wirkungsvolle
Annäherung an "echtes" farbiges Licht ohne komplettes Deferred-Rendering.

Neuer Regler: EMISSIVE_LIGHT_STRENGTH (Lighting-Menü) steuert die Stärke
dieses farbigen Eigenleuchtens separat von DYNAMIC_LIGHT_STRENGTH (dem
allgemeinen warmen Umgebungslicht in der Nähe von Lichtquellen). Ist in
allen fünf Qualitätsprofilen (POTATO-ULTRA) passend mit vorbelegt.

Hinweis: Das ist bewusst kein volles "farbiges Licht strahlt auf jede
Wand ringsum"-System wie bei vollständig deferred-basierten Shadern
(z.B. Complementary) - das würde eine Screen-Space-Lichtliste und einen
komplett anderen Renderer-Aufbau brauchen. Was hier passiert, ist ein
in einfachen Forward-Shadern üblicher, sehr wirkungsvoller Trick: die
Lichtquelle selbst leuchtet stark in ihrer Farbe, und das Bloom
verteilt genau diese Farbe als Halo/Atmosphäre in der Umgebung. Falls
du später "echtes" farbiges Licht auf umliegenden Wänden willst, wäre
der nächste Ausbauschritt ein kleines deferred Lighting-System - gerne
als eigenes Projekt, wenn gewünscht.
