aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-11-01 13:39:37 +0300
committerValentin Popov <valentin@popov.link>2026-11-01 13:39:37 +0300
commit55e98d7ff6224aa3bf4b5d4260a594705ee2133f (patch)
tree828a6ea2ad0ebf7cc127e20fb8a0a03673636a35 /docs/tomes
parentbbd31fc25336d6a2e6c5927ad4d7101696f8bd78 (diff)
downloadfparkan-55e98d7ff6224aa3bf4b5d4260a594705ee2133f.tar.xz
fparkan-55e98d7ff6224aa3bf4b5d4260a594705ee2133f.zip
fix(render): draw translucent water into planar reflectionstrunk
Diffstat (limited to 'docs/tomes')
-rw-r--r--docs/tomes/05-render.md15
1 files changed, 15 insertions, 0 deletions
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md
index 8c059f2..387db11 100644
--- a/docs/tomes/05-render.md
+++ b/docs/tomes/05-render.md
@@ -1197,6 +1197,21 @@ Rust-тест отдельно проверяет углы водоёма и гÑ
водоёма с добавленным смещением волн. Для неперспективной камеры API остаётся
обычное зеркало с экранными координатами.
+В отражённом виде видна и сама вода. После остального мира оригинал рисует
+её обычной текстурой с непрозрачностью `0,1`; этот слой приглушает отражение
+и сохраняет оттенок поверхности. Подготовка ландшафта задаёт такую альфу
+и отдельную категорию пакета, когда уже строится отражение. Живой захват
+подтверждает те же водные вершины у зеркальной камеры и у основной камеры:
+в первом случае альфа равна `0,1`, во втором — `1`.
+
+Внутренний водный слой использует texture mode 7: цвет текстуры умножается
+на diffuse, а альфа берётся только из diffuse. Затем обычное смешивание
+`src × alpha + dst × (1 − alpha)` соединяет его с отражённым миром.
+Проверка и запись глубины сохраняются, альфа-тест пропускает значения
+не меньше `1/255`. FParkan воспроизводит этот проход после отражённой сцены
+и читает исходную текстуру материала, поэтому изображение отражения
+можно закончить до его чтения основной камерой.
+
Размер изображения отражения выбирается отдельно от размера основного кадра.
Terrain.dll в конструкторе CShade (RVA `0x278E0`, цикл с `0x27FC7`) берёт
ширину и высоту renderer через Ngi32.dll RVA `0x7FB0`. Сторона квадратной