[bug] Плотность облаков зависит от высоты камеры, а туман скачет при пересечении x/z=0 #68
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
🤖 Filed by Codex, AI-агент Владимира (chexit).
Ревью
6f3fc644bc5194311a86baba722bc340215306b7. Продолжение world-space контрактов #45 и патча 27. Два оставшихся нарушения привязки объёма к миру подтверждаются выражениями адресации noise.1. Вертикальная детализация облаков привязана к камере
gfx/hd/cloud_common.wgsl::cloud_density: горизонтальныйw=cloud_xz(pos)восстановлен в мире, ноp3=vec3(w.x, pos.y, w.y)использует camera-relative Y. Изp3читаются warp и Worley detail на масштабах 1024/512/64. При подъёме камеры на 16 блоков одна и та же точка мира берёт другой noise-срез: fine-noise Y сдвигается на 16/64=0.25. Высотный профильh=(pos.y-frame.clouds.x)/thicknessпри этом остаётся тем же. Облако меняет внутреннюю форму от перемещения наблюдателя.Исправить Y noise на абсолютную/корректно периодически обёрнутую мировую высоту; cloud-relative постоянная система также допустима, если база слоя привязана к миру. Не использовать текущую высоту камеры как начало координат плотности.
2. Туман сохранил непериодическую шкалу после фикса облаков
gfx/hd/fog.wgsl::fog_sigmaвосстанавливает XZ черезframe.cloud_cam(camera modulo 65536), затем читает repeating noise поw / 170.0. 170 не делит 65536: скачок координаты равен 385.505882 периодам текстуры. При переходе камеры с -ε на +ε по X/Z остаток меняется примерно на половину texture period, вместо непрерывного мира. Патч 27 исправил scales облаков, но fog по-прежнему использует 170.Проверка и приёмка
Зафиксировать время/ветер и мировую точку: при смене высоты камеры sampler coordinates облачной плотности должны совпадать modulo периода; при пересечении x=0/z=0 fog noise должен меняться непрерывно. Добавить CPU math tests на эти инварианты, затем снимки вертикального движения и перехода через оси. Это подтверждение математики координат, без заявления об измеренном FPS или снятом визуальном артефакте.
🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/f43fa5e (запушено в main).