AlphaLook-Shader 9.44 — КОНТРОЛЬНАЯ ТОЧКА 2
(файл лежит рядом с папкой shaders, шейдеру не мешает)

РЕАЛИЗОВАНО (меню: Water)
  Reflections   — composite.fsh (луч по буферу глубины + небо), метка воды в gbuffers_water
  Water Tint    — gbuffers_water.fsh: ползунок-оттенок 0..8 (1 бирюзовый, 2 глубокий синий, 3 изумрудный, 4 болотный, 5 фиолетовый, 6 розовый, 7 красный, 8 золотой)
  Transparency  — gbuffers_water.fsh: ползунок 0..100% (только вода)

  + Underwater Tint (composite.fsh, ползунок 0-100%) — готово
  Underwater Distortion (composite.fsh, ползунок 0-100%) — готово
  Specular Highlight (composite.fsh, ползунок 0-100%; WS_* — тонкая настройка; реалистичная версия: Френель, дальность ряби, цвет у горизонта, дождь) — готово
  Depth Fog (composite.fsh, ползунок 0-100%; WDF_* — тонкая настройка) — готово
  Caustics (composite.fsh, ползунок 0-100%; WC_*; и изнутри воды, и сверху сквозь воду — узор привязан ко дну) — готово
  Refraction (composite.fsh, ползунок 0-100%; WRF_* — тонкая настройка) — готово
  Edge Fade (gbuffers_water.fsh, ползунок 0-100%; WEF_WIDTH) — готово; Foam: пробы берега в мировых координатах (без круга вокруг игрока)
  Foam (composite.fsh, пиксельная, по близости берега; ползунок 0-100%; WF_DEPTH) и Surface Noise (ползунок 0-100%; WSN_SIZE) — готово
  Splash Particles (composite.fsh, ползунок 0-100%; SPL_* — тонкая настройка; брызги-«крошки» 1/16 блока из тех же точек, что круги дождя; только дождь и открытое небо; метку воды в gbuffers_water пишет тоже) — готово
  Flow (gbuffers_water.vsh + .fsh, кнопка Вкл/Выкл; WFL_* — тонкая настройка): по всей воде бегут пиксельные полоски: на текущей (наклон из dFdx/dFdy позиции ДО волн) вниз по склону, на стоячей — слабый медленный дрейф (WFL_STILL*). Метка воды в composite не нужна, colortex3 не трогает — готово
  Surface Parallax (кнопка Вкл/Выкл; WPX_* — тонкая настройка): слои узоров на разной глубине, сдвиг по углу взгляда. Flow — второй глубокий слой полосок (gbuffers_water.fsh); Surface Noise — второй слой пятен, Foam — приподнята над водой (composite.fsh). Работает вместе с Flow / Surface Noise / Foam — готово
  ВАЖНО: метку воды в gbuffers_water теперь пишут и Specular/Caustics/Refraction (раньше блик без Reflections/Tint/Transparency не работал)

ФАЙЛЫ, КОТОРЫЕ ТРОГАЛИ (относительно оригинала 9.44)
  composite.fsh, gbuffers_water.fsh, gbuffers_water.vsh, block.properties (тег 10502 = вода),
  shaders.properties (sliders=), lang/en_us.lang, lang/ru_ru.lang,
  объявления настроек в composite2.fsh и final.fsh (корень, world1, world-1)

КАК РАЗБЛОКИРОВАТЬ СЛЕДУЮЩУЮ ЗАГЛУШКУ (важно!)
  Кнопка серая, пока #define настройки ОТЛИЧАЕТСЯ в разных файлах. В world1/final.fsh у всех заглушек
  стоит 1, в остальных файлах 0. Чтобы разблокировать — поставить 0 в world1/final.fsh
  (для WATER_REFLECTIONS, WATER_TINT, WATER_TRANSPARENCY уже сделано).

ТОНКАЯ НАСТРОЙКА (в меню не выводится, правится в коде)
  composite.fsh        : WR_STRENGTH, WR_SOFT, WR_SOFT_MAX, WR_STRETCH   (отражения)
  gbuffers_water.fsh   : WT_TINT_AMOUNT, WT_ALPHA_MIN; список оттенков — функция waterTintColor

ИЗВЕСТНЫЕ ОГРАНИЧЕНИЯ
  - Отражается только то, что попало в кадр (остальное — небо).
  - Поверхность воды считается плоской (для Waves нужно будет подключить нормаль).
  - world1 / world-1 (Энд, Незер): копии composite.fsh и gbuffers_water НЕ обновлялись.

ПЛАН ДАЛЬШЕ
  Specular Highlight (блик солнца), Underwater Tint, Underwater Distortion, затем Fresnel Effect / SSR как переключатели.

СЛАЙДЕРЫ (как оформляются): значение //[...] должно быть ОДИНАКОВЫМ во всех файлах, где объявлена настройка
  (gbuffers_water.*, composite2.fsh, final.fsh и их копии в world1/world-1), плюс имя в sliders= в shaders.properties
  и подписи value.НАСТРОЙКА.N в lang.

ПОГОДА (Weather):
  Puddles / RAIN_PUDDLES (кнопка Вкл/Выкл, gbuffers_terrain.fsh + .vsh): пиксельные лужи (клетки 1/16 блока) на верхних гранях обычных блоков под открытым небом; растут с uniform wetness, в снежном биоме нет. Цвет/прозрачность воды берут из WATER_TINT / WATER_TRANSPARENCY; пиксель лужи метится в colortex3.z как вода (0.41+0.08*небо), поэтому composite.fsh даёт лужам отражения/блик/пятна/круги (WATER_REFLECTIONS, WATER_SPECULAR, WATER_SURFACE_NOISE, WATER_RIPPLES). Брызги (WATER_SPLASH_PARTICLES): на самих лужах их НЕТ; на мокрой земле вне луж — мелкие (сетка 1/64, взлёт/разлёт вдвое меньше, тусклее). Метка мокрой земли — colortex3.w = 0.85 - 0.45*e, e = 0.3*wetK + 0.7*wetK*wetG (wetG = зеркальность пикселя). Отражения мокрой земли: при WATER_REFLECTIONS вкл composite.fsh отражает зеркальные пиксели (сила smoothstep(0.32,0.92,e), без волн, Френель мягче); при выкл terrain сам добавляет простой блеск неба. Раньше метка была (terrain пишет, composite читает; у остального w = 1.0; colortex3.y занят флагом опасного моба для final.fsh — не трогать). Пена (WATER_FOAM) на лужи не идёт (условие dF1 > dF0). Мокрая земля вне луж (та же кнопка): wetK по пикселям — темнее (RPD_DARK) + блеск отражения неба по Френелю (RPD_GLOSS), считается в gbuffers_terrain.fsh независимо от TERRAIN_SPECULAR_MAP. Блика солнца на мокрой земле нет. Разблокировано (world1/final.fsh: 0) — готово, в игре не проверено.
  Дальше по плану: Rain Ripples (пиксельные круги на лужах + мелкие брызги-капли на сухой земле + разная мокрость по пикселям).
  Мокрость теперь на ВСЁМ под открытым небом (земля, стены, трава, листва; низ сухой, бока слабее верха; лава исключена): gbuffers_terrain.fsh, pdCover. Отражения/брызги (w-метка) только у верхних граней обычных блоков; трава/листва/бока — только потемнение и лёгкий блеск. Лава под дождём (верхняя грань, небо) метится colortex3.w = 0.2 — на ней ЧЁРНЫЕ брызги (composite.fsh, isLavaP). Не исключены: огонь, факелы и т.п. (нет отдельного id).
  Время жизни (shaders.properties): uniform wetThin = smooth(2, дождь в биоме, 20, 240) — тонкая мокрость, сохнет ~8 мин; wetPuddle = smooth(3, ..., 120, 1700) — лужи наполняются ~2 мин, стоят ~30 мин. Дождь только там, где biome_precipitation == 1 (пустыня без луж). Рядом с лужей земля влажнее, пока лужа стоит. wetness (игровая) остаётся для снега. Идея на потом: быстрее сохнуть на солнце, медленнее в тени.
  Реалистичная вода (Puddles): (1) глубина лужи — середина глубже/темнее/плотнее, кромка мелкая и прозрачная (pdDepth, terrain); (2) стекание по стенам — анимированные ручейки-колонки на боковых гранях обычных блоков (rstreak, terrain, ползут вниз по клеткам 1/16); (3) край лужи у обрыва (composite.fsh, блок «КРАЙ ЛУЖИ», нужен RAIN_PUDDLES в гейтах рядом с WATER_FOAM): пробы в мире по 4 сторонам, если за пробой на экране поверхность заметно дальше/небо — у кромки мокрая полоса без воды + светлый валик. Не сделано: капли, падающие с края; перетекание воды между блоками разной высоты; лужи в самых низких местах (шейдер не знает рельеф).
  Лужи (обновление): wetPuddle = smooth(3, ..., 600, 5100) — наполняются медленно (~10 мин дождя), стоят ~90 мин после дождя (было 120/1700). Тонкая мокрость без изменений (20/240).
  Лужи (9.79 на базе 9.77; изменения 9.78 сюда НЕ переносились): (1) МАТЕРИАЛ решает, где лужи. Впитываемость pdPor 0..1 из тегов block.properties (gbuffers_terrain.vsh): трава 0.80, земля/подзол/мицелий 0.65, гравий 0.90, песок 1.00, тропинка 0.30, пашня/мох/сено 0.80 (тег 10701); всё без тега (камень, булыжник, доски, бетон, глина, грязь) = 0, там лужи самые большие. Теги 10601..10605 общие с CONNECTED_TEXTURES. В gbuffers_terrain.fsh: лужа на впитывающем материале появляется только после налива RPD_SOAK*pdPor; площадь луж меньше в (1 - RPD_PORCOVER*pdPor) раз; мокрая впитывающая земля темнее (RPD_PORDARK) и меньше блестит (RPD_PORGLOSS). Кнопок нет — работает при RAIN_PUDDLES вкл. В игре не проверено.
  План луж дальше (по порядку): 3 текстура как карта высот -> 4 лужи в низинах -> 6 цвет неба в дожде -> 7 огни ночью -> 8 ветер гонит рябь -> 9 высыхание с гистерезисом -> 11 грязь (отдельный ползунок/кнопка) -> 12 капли с листвы и краёв. Синий цвет воды в лужах НЕ менять. Пузырьки уже есть.
  Лужи (9.80): (3) РЕЛЬЕФ ТЕКСТУРЫ. gbuffers_terrain.fsh: pdH = (яркость пикселя - средняя яркость вокруг, мип +2) / средняя, -1..1; считается вне ветвлений по пикселю под uniform-условием wetPuddle > 0.001. Граница лужи сдвигается на RPD_CRACK*pdH (0.20): тёмные щели/швы булыжника заполняются первыми, светлые бугорки остаются сухими островками; глубина воды в щелях больше. RPD_RIDGE (0.35): светлые бугорки на верхних гранях меньше мокрые. Кнопок нет. В игре не проверено; если на очень мелких/высокого разрешения текстурах выглядит шумно — уменьшить RPD_CRACK.
  (9.81 «лужи и рельеф» — пробы высоты в composite — откатили по просьбе: плохая идея. Пункт 4 (лужи в низинах) снят.)
  Лужи (9.82, на базе 9.80; 9.81 откатили): (6) ПАСМУРНОЕ НЕБО В ОТРАЖЕНИЯХ. composite.fsh, блок отражения воды (WATER_REFLECTIONS; лужи и настоящая вода идут одним кодом, поэтому эффект и там и там): в дождь запасное небо (skyFb) и небо, прочитанное «в бесконечности» (skyRd = 1), переводятся в ровный серый той же яркости, чуть холодный, чуть тусклее; деревья/постройки в отражении остаются цветными. Сила ovK = rainStrength * WR_RAINSKY (0.85); WR_RAINSKY_TINT vec3(0.82,0.86,0.93), WR_RAINSKY_DIM 0.85 (в начале composite.fsh рядом с WR_*). Кнопок нет. В игре не проверено.
  Лужи (9.83): (7) ОГНИ НОЧЬЮ В ОТРАЖЕНИИ. composite.fsh, блок отражения воды (лужи и настоящая вода): вокруг точки, куда попал отражённый луч, по вертикали (12 проб, ±WR_LIGHT_LEN=0.035 высоты экрана, случайный сдвиг на пиксель) собираются светящиеся пиксели из colortex1 (буфер свечения BLOOM/лавы/руды) и добавляются к отражению вытянутой дорожкой (WR_LIGHT_GAIN 3.5, потолок 1.5). Сила: WR_LIGHT (1.0, 0 = выкл) * ночь (1 - smoothstep(0.08,0.35, яркость skyColor)) * попадание луча. Нужен рабочий BLOOM (или LAVA_GLOW/ORE_BLOOM) — иначе colortex1 пуст. Кнопок нет. Направление дорожки симметрично вокруг отражённой точки (не проверено, куда «вытянутее»). В игре не проверено.
  Лужи (9.84, на базе 9.83): (9) ВЫСЫХАНИЕ С ГИСТЕРЕЗИСОМ. shaders.properties: новый uniform wetStain = smooth(4, ..., 600, 9000) (падает медленнее wetPuddle 5100). gbuffers_terrain.fsh: (а) лужа сжимается к самым глубоким местам, как и раньше (порог по шуму); (б) тёмное пятно на месте усохшей лужи: тот же шум pdN, порог pdStainThr = wetStain*RPD_COVER*(1-RPD_PORCOVER*pdPor), wetK >= RPD_STAIN (0.70), блеск вдвое меньше (пятно матовое); (в) светлый след кромки: полоса шириной RPD_RINGW (0.035) на границе пятна, видна только когда пятно заметно больше лужи (pdSep), только на твёрдых материалах, albedo * (1 + RPD_RING 0.22). pdN теперь считается вне `if (pdWet > 0.002)` (нужен пятну); pdH считается и при wetStain > 0.001. ИСПРАВЛЕНО: puddleK = step(pdN, pdThr) * step(0.001, pdThr) — в 9.80 из-за сдвига pdN на RPD_CRACK*pdH щели с pdN < 0 давали «воду» даже при почти нулевом пороге. Кнопок нет. Пункт 10 (сохнет быстрее на солнце) НЕ делали. В игре не проверено.
  9.85 = ИСПРАВЛЕНИЕ КОМПИЛЯЦИИ composite (в игре: «Invalid program composite», «program not linked»). Причина: огни ночью (9.83, WR_LIGHT) читали colortex1, а этот sampler объявлен в composite.fsh только под `#if BLOOM || NEON_MOBS > 0 || GLOW_EYES > 0 || LAVA_GLOW > 0 || ORE_BLOOM > 0`; при всех выключенных — необъявленное имя. Теперь блок «ОГНИ НОЧЬЮ» обёрнут в то же условие. Без BLOOM дорожек огней нет (как и было задумано). ВАЖНО на будущее: перед чтением любого sampler в composite/terrain смотреть, под каким #if он объявлен.

  Luzhi 9.91: fix merцания (mip-fade pdH, RPD_HOLLOWS/RPD_LODFADE_*, kray luzhi po vysote), mini-luzhi v vyemkakh teper na wetThin (RPD_HOLLOW_LIFE) - sokhnut pervymi.
  9.92: mini-luzhi tolko na blokakh s pdPor<=RPD_HOLLOW_MAXPOR (0.35), relef luzh otkliuchen na trave/pesке/gravii (RPD_RELIEF_MAXPOR 0.70).
  9.93: Weather: ubrany RAIN_SPLASH/RAIN_RIPPLES (voda v Water). Frost Overlay (final.fsh, uniform frostK v shaders.properties, FRO_* tonkaya nastroyka): piksel nyj izmoroz po krayam ekrana v snezhnom bione. World1/final.fsh: 0 (razblokirovano). V igre ne proverено.
  9.94: frost: predel glubiny FRO_REACH 0.50 (polovina puti k tsentru po kazhdoy osi, zhestkiy potolok), narastanie ~5 min (smooth 150), taet ~10 min (smooth 300).
  9.95: frost FRO_REACH 0.28 (bylo 0.50 - slishkom shiroko), bazovyy frostK 0.85+0.15*rain.
  9.96: (1) mokrost/luzhi ne ischezayut pri vkhode v snezhnyy biom (RPD_SNOWKILL 0.0, pdKeep), (2) opisaniya papok Water/Weather v lang pereпisany (byli zagotovki).
  9.97: luzhi/mokrost ne sozdayutsya na snezhnykh blokakh (teg 10702: snow, snow_block, powder_snow, packed/blue_ice) i na trave/listve s kholodnym ottenkom (pdCold). Ostalnye bloki v snezhnom biome bez snega - ne opredelyayutsya.
  9.98: Water: krugi (WATER_RIPPLES) i bryzgi (WATER_SPLASH_PARTICLES) v snezhnom biome ne otklyuchayutsya, a stanovyatsya spokoynymi (snowBiome, SNW_RIP_* / SNW_SPL_* v composite.fsh): rezhe, medlennee, tusklee, pufy vmesto kapel.
