aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-11-01 07:26:46 +0300
committerValentin Popov <valentin@popov.link>2026-11-01 07:26:46 +0300
commit651f5e10a7e5fbaa65a9acffd76d033925291e8e (patch)
tree95bac3c256906f24f4f454d858343ff0ba59b827 /docs
parent0f8b14abbf73a43402644c9acd0750bf25a79e98 (diff)
downloadfparkan-651f5e10a7e5fbaa65a9acffd76d033925291e8e.tar.xz
fparkan-651f5e10a7e5fbaa65a9acffd76d033925291e8e.zip
fix(render): match native reflection target sizes
Diffstat (limited to 'docs')
-rw-r--r--docs/appendices/knowledge-boundaries.md2
-rw-r--r--docs/tomes/05-render.md17
2 files changed, 16 insertions, 3 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md
index 7b71e9e..ce3400e 100644
--- a/docs/appendices/knowledge-boundaries.md
+++ b/docs/appendices/knowledge-boundaries.md
@@ -76,7 +76,7 @@ MSH-запрос со свободной preview-камерой; это не пÐ
среде, перехватить DirectDraw/Direct3D calls и surface flips, сохранить state
log на минимальных сценах с одним типом материала.
-Горизонтальные грани Land.msh с флагом `0x20000` используют исходную карту Du/Dv и окно shifted-камеры, проверенное исполнением Terrain.dll. Диапазон глубины, небо/туман/FX основного вида и размер target остаются приближениями: `planar_reflection_render_context_approx`; неперспективная камера API использует обычное зеркало.
+Горизонтальные грани Land.msh с флагом `0x20000` используют исходную карту Du/Dv, окно shifted-камеры и квадратный размер текстуры, проверенные исполнением DLL. Диапазон глубины, небо/туман/FX основного вида и соответствие размеров при обрезанном capture остаются приближениями: `planar_reflection_render_context_approx`; неперспективная камера API использует обычное зеркало.
Raw queue clock задаёт фазу волн отдельно от времени суток и sky elapsed; старые захваты без него считаются в `captured_water_phase_unverified`.
Один target отражает ближайшую активную высоту воды; остальные высоты и неплоские грани считаются в `planar_reflection_other_planes_unsupported` и `planar_reflection_nonplanar_unsupported` и сохраняют обычный terrain shader.
`terrain_face8_pipeline_unverified` теперь считает только исходные грани с `0x8` без `0x20000`; сама семантика оставшихся специальных проходов ещё не установлена.
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md
index 53667c8..4aba919 100644
--- a/docs/tomes/05-render.md
+++ b/docs/tomes/05-render.md
@@ -1169,6 +1169,18 @@ Rust-тест отдельно проверяет углы водоёма и гÑ
водоёма с добавленным смещением волн. Для неперспективной камеры API остаётся
обычное зеркало с экранными координатами.
+Размер изображения отражения выбирается отдельно от размера основного кадра.
+Terrain.dll в конструкторе CShade (RVA `0x278E0`, цикл с `0x27FC7`) берёт
+ширину и высоту renderer через Ngi32.dll RVA `0x7FB0`. Сторона квадратной
+текстуры — наибольшая степень двойки, не превосходящая меньшую из этих
+величин и 1024; нижний предел равен 2. Например, экран 1280×1024 даёт
+отражение 1024×1024, а 1280×720 — 512×512. Getter размеров и исходный цикл
+выбора проверены исполнением DLL на десяти входах; создание нативной текстуры
+в этом оракуле пропущено. Vulkan создаёт цвет и глубину с этой стороной и
+задаёт каждому проходу собственные viewport и область очистки. Так уменьшение
+отражения не обрезает основной кадр и воспроизводит исходный масштаб его
+пикселей, от которого зависит чёткость берегов и ряби.
+
Цветовой target переходит из attachment layout в shader-read layout после
записи. Следующий зеркальный проход ждёт предыдущего чтения этой текстуры;
основной и отражённый виды используют разные слоты uniform buffer. Во время
@@ -1196,9 +1208,10 @@ Rust-тест отдельно проверяет углы водоёма и гÑ
В Vulkan карта хранится в двух каналах несжатой текстуры и возвращается к
знаковым значениям перед вычислением смещения.
-Матрица положения камеры, её окно и координаты волн восстановлены, но весь
+Матрица положения камеры, её окно, размер текстуры и координаты волн восстановлены, но весь
контекст отражённого вида ещё не повторён. Диапазон глубины, небо, туман и FX
-заимствуются из основного вида, а размер target совпадает со swapchain.
+заимствуются из основного вида. Для захвата с обрезанным viewport ещё не
+подтверждено соответствие размера окна FParkan полному renderer оригинала.
Эти ограничения учитываются в `planar_reflection_render_context_approx`;
совпадение генератора волн и окна не доказывает совпадения итогового отражения.
Один target обслуживает ближайшую