From e59c49e3bf99df57d9529edd0ae55a860ec82fab Mon Sep 17 00:00:00 2001 From: chexit Date: Sat, 14 Nov 2026 18:04:24 +0300 Subject: [PATCH] Blend HD shadow cascade filters at the near boundary Advance to engine 17382445a and document the six-block near/far transition verified on the forest aerial view. Co-Authored-By: Kimi Code --- docs/ENGINE.md | 4 ++-- docs/HD-RENDERER.md | 2 +- horizon | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/ENGINE.md b/docs/ENGINE.md index fff3fb6..f628dd5 100644 --- a/docs/ENGINE.md +++ b/docs/ENGINE.md @@ -63,8 +63,8 @@ runtime закреплённого движка. Используется вре ## Акустика и владение захватом (API 27) -Текущий pin: `c962cd472fd549bc72e722b23467a4780b6b19c2` (API 30; нормали моделей, -очистка неудачного захвата, power-of-two staging из #130 и dense camera/static motion из #124). Акустические +Текущий pin: `17382445af6fe81c71b003b18ae89007da526a38` (API 30; power-of-two staging, +dense camera/static motion и смешанный переход colour/depth shadow cascades). Акустические `render.acoustics-status` и `render.capture-owner-status` возвращают поколение, `available`, `enabled`, `request-accepted`, `prepared` и причину. В игре всё это показывает `/airdef capabilities`. Отсутствие запроса, выключение, ожидание backend и ошибка различаются. diff --git a/docs/HD-RENDERER.md b/docs/HD-RENDERER.md index d811560..7cfec3c 100644 --- a/docs/HD-RENDERER.md +++ b/docs/HD-RENDERER.md @@ -410,7 +410,7 @@ ffmpeg 9.0.1. `/airdef replay export` с записанного налёта (4 ## Цветные тени, рябь, кино-пост: что знать преемнику -- **Цветные тени.** Ближний каскад (c = 0) рисуется `fs_shadow_near` (листва `MAT_LEAVES` отброшена), потом проход `hd shadow colour` (`Hd::shadow_tint_pass`, цель `Shadows::tint`, очистка в белое) рисует листву (`shadow_tint_leaves`, твёрдые квады, `SHADOW_SOLID`) и полупрозрачные квады секций (`shadow_tint_glass`, по отсортированным индексам; вода не рисуется) тем же `fs_shadow_tint`: rgb умножаются (blend `Dst*src`), альфа = `(расстояние от света − 320)/160` с blend Min — ближайший такой квад. Приёмник в `shadow_tint` (`light.wgsl`, привязка 22) окрашивается, если квад ближе к свету, чем он; 8 точек Vogel радиусом 0.4 блока размывают листву в «пятна». Дальний каскад по-прежнему рисует листву полностью (на границе 36 блоков шов: ближе листва светлее). Цвет не доходит до лучей тумана, воды и дальнего каскада. Цена: `hd shadow colour` 0.25–0.35 мс (Mac, малая сцена). +- **Цветные тени.** Ближний каскад (c = 0) рисуется `fs_shadow_near` (листва `MAT_LEAVES` отброшена), потом проход `hd shadow colour` (`Hd::shadow_tint_pass`, цель `Shadows::tint`, очистка в белое) рисует листву (`shadow_tint_leaves`, твёрдые квады, `SHADOW_SOLID`) и полупрозрачные квады секций (`shadow_tint_glass`, по отсортированным индексам; вода не рисуется) тем же `fs_shadow_tint`: rgb умножаются (blend `Dst*src`), альфа = `(расстояние от света − 320)/160` с blend Min — ближайший такой квад. Приёмник в `shadow_tint` (`light.wgsl`, привязка 22) окрашивается, если квад ближе к свету, чем он; 8 точек Vogel радиусом 0.4 блока размывают листву в «пятна». Дальний каскад по-прежнему рисует листву полностью; с `17382445a` near/far depth filters смешиваются на последних 6 блоках перед границей 36,8, а tint затухает по той же smoothstep — круглого шва нет. Цвет не доходит до лучей тумана, воды и дальнего каскада. Цена: `hd shadow colour` 0.25–0.35 мс (Mac, малая сцена). - **Рябь.** `ripple_gradient` берёт часы воды (`water.y`, часы фильма): частоты — целые циклы на 600 с, сетка 160 клеток на 256 блоков, поэтому рисунок не прыгает на обороте. Гаснет по размеру пикселя, только под открытым небом (`nt.a`). Амплитуда 0.012 не подбиралась. - **Кино-пост.** `Hd::film` между `taa` и `finish` (`HdSource::Film`), только при `film_quality()`; цели создаются при первом фильме. Motion blur — только от движения камеры (глубина + `prev_view_proj`, затвор 180°, мёртвая зона 1–2.5 px из-за джиттера; движущиеся объекты не размываются; нет после склейки/телепорта: `taa.w`). DoF — диск 24 отсчёта, фокус авто (гармоническое среднее 9 глубин у центра) или `HORIZON_HD_DOF_FOCUS`. Детерминизм: единственное время в шейдере — `water.y` (часы фильма) для шума. Проверять на реальном фильме `/airdef replay film`; `HORIZON_HD_FILM_QUALITY=1` принудительно включает качество фильма для проб. DoF в игре был слишком сильным и дорогим; параметры уменьшены без повторного снимка. Motion blur на снимке (поворот 40° за 1.5 с) не разобран. - Из Photon (MIT) ничего нового не переносилось: THIRD_PARTY_PHOTON.md не менялся. diff --git a/horizon b/horizon index c962cd4..1738244 160000 --- a/horizon +++ b/horizon @@ -1 +1 @@ -Subproject commit c962cd472fd549bc72e722b23467a4780b6b19c2 +Subproject commit 17382445af6fe81c71b003b18ae89007da526a38