fix(render): match native reflection target sizes
Docs Deploy / Build and Deploy MkDocs (push) Successful in 35s

This commit is contained in:
Valentin Popov committed 2026-11-01 08:26:46 +04:00
1 parent 0f8b14abbf
commit 651f5e10a7
5 files changed
+68 -16

No files matched your search

+15 -2
View File
@@ -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 обслуживает ближайшую