Grünes Wasser beheben

Wasser wirkt in FlightGear oft grün. Das hat zwei getrennte Ursachen. overlay_einrichten.py behebt beide im Overlay. Der Beitrag dazu erklärt die Suche: Grünes Wasser in FlightGear.

Grüne Seen

See bei Leipzig ab Werk: dunkelgrün

Derselbe See mit fester Wassertiefe: blau

Flaches Wasser mischt der Shader mit einer Bodenfarbe aus einer groben Weltkarte. Kleine Seen liegen dort offenbar auf Land, also grün. Binnengewässer nutzen Effects/water-inland.eff, und dort lässt sich eine feste Tiefe vorgeben:

<use_specified_water_shallowness type="int">1</use_specified_water_shallowness>
<water_shallowness type="float">0.3</water_shallowness>

Bei 0,3 fällt die Bodenfarbe ganz weg, die Helligkeit bleibt aber voll.

Grün bei tiefer Sonne

Wasser bei tiefer Sonne ab Werk: olivgrün

Mit neutralerem Licht: blaugrün

Das Licht berechnet der Shader je Farbkanal, und bei tiefer Sonne fällt Blau zuerst weg. Die Wasserfarbe 0,148 / 0,27 / 0,3 enthält kaum Rot. Multipliziert bleibt vor allem Grün. In Shaders/water-ALS-high.frag wird das Licht deshalb vor der Multiplikation neutraler:

float light_helligkeit = dot(ambient_light.rgb, vec3(0.3, 0.59, 0.11));
ambient_light.rgb = mix(ambient_light.rgb, vec3(light_helligkeit), 0.7);

Der Wert 0,7 ist der Anteil, mit 1,0 wäre das Licht auf dem Wasser ganz neutral. Mittags ändert sich sichtbar nichts, weil das Licht dort schon fast neutral ist.

Bemerkung

Der Patch gilt für den Shader water-ALS-high, den das Profil high-quality nutzt. Geprüft habe ich ihn in Standbildern. Abends wirkt das Wasser dadurch auch etwas weniger warm.