feat(render): animate water with native EMBM waves
Docs Deploy / Build and Deploy MkDocs (push) Successful in 41s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 41s
This commit is contained in:
15 files changed
+390
-42
No files matched your search
+26
-3
@@ -1161,9 +1161,32 @@ lightmap state передаются в `VulkanStaticMaterial`, а shader пос
|
||||
записи отражения привязан отдельный нейтральный descriptor, чтобы проход
|
||||
не читал собственное вложение.
|
||||
|
||||
Такое зеркало ещё не повторяет shifted-камеру и EMBM оригинала: искажение
|
||||
отражения волнами пока отсутствует и учитывается в
|
||||
`planar_reflection_embm_unsupported`. Один target обслуживает ближайшую
|
||||
Волны не требуют готовой текстуры из ресурсов: Terrain.dll RVA `0x2BF50`
|
||||
создаёт карту 128×128 со знаковыми парами Du/Dv. Для нормированных координат
|
||||
текселя `x` и `y` угол равен `(x + y − 1) × 12,566360473632812`, а компоненты —
|
||||
округлённые `64 cos(угол)` и `64 sin(угол)`. Все 32 768 байт Rust-генератора
|
||||
сверены с исполнением этой функции DLL при игровом x87 CW `0x007F`.
|
||||
|
||||
Рябь привязана к водоёму, поэтому не плывёт вслед за экраном. Конструктор
|
||||
ландшафта собирает прямоугольник всех отражающих граней; U меняется против
|
||||
мировой Y, V — против X. Эти координаты повторяются сто раз, к обеим прибавляется
|
||||
`(queue_clock % 10000) / 10000`. Это самостоятельный clock: время суток и
|
||||
относительный clock неба не задают фазу волн. Захват хранит исходный
|
||||
`sky_uv_clock.raw_clock`; ограниченный replay фиксирует его, интерактивный
|
||||
продолжает с этого значения. Старые захваты без raw clock явно считаются в
|
||||
`captured_water_phase_unverified`.
|
||||
|
||||
Карта Du/Dv смещает координаты следующей текстуры с диагональными коэффициентами
|
||||
`0,01`, без изменения яркости. Это правило
|
||||
[Direct3D BUMPENVMAP](https://learn.microsoft.com/en-us/windows/win32/direct3d9/bump-mapping-formulas).
|
||||
В Vulkan карта хранится в двух каналах несжатой текстуры и возвращается к
|
||||
знаковым значениям перед вычислением смещения.
|
||||
|
||||
Обычное зеркало ещё не повторяет shifted-камеру оригинала: смещения Du/Dv
|
||||
сейчас переводятся из координат водоёма в текущую зеркальную проекцию.
|
||||
Это приближение учитывается в `planar_reflection_shifted_camera_unsupported`;
|
||||
совпадение генератора волн не доказывает совпадения итогового отражения.
|
||||
Один target обслуживает ближайшую
|
||||
активную высоту воды; другие высоты и негоризонтальные поверхности явно
|
||||
считаются как неподдержанные. Это промежуточный водный проход, а не полная
|
||||
приёмка воды или лавы.
|
||||
|
||||
Reference in new issue
Block a user