From 55e98d7ff6224aa3bf4b5d4260a594705ee2133f Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Sun, 1 Nov 2026 14:39:37 +0400 Subject: fix(render): draw translucent water into planar reflections --- docs/tomes/05-render.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'docs/tomes') 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`. Сторона квадратной -- cgit v1.2.3