[bug] HD-полигон сравнивает разные моменты анимации и может принимать движение облаков за регрессию #71
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. Новыйtools/hd_bench.pyполезен, но его baseline/flicker-проверка пока не обеспечивает одинаковые входы рендера.Что происходит
run_shotделает time set, weather clear, teleport, wait-ready и wall-clock sleep; затем снимает первый кадр, ждёт 0.5 секунды и снимает второй. Между ними мир и render animation продолжаются. Нет фиксированного tick/render timestamp, отключения daylight/weather progression, стабилизации существующего налёта/техники/мобов или одинаковой frame sequence накопления TAA.В форке уже разные часы:
HdFrame.water.y = self.started.elapsed()%600для волн,clouds.wприходит из game/cloud time, dither зависит от номера кадра. Даже при одинаковых time set/позе два запуска и два снимка показывают разные воду, облака, тени и шум.compare_framesсчитает любую разницу каналов, аjudgeобъявляет её flicker/regression. Разница может быть честной анимацией или длительностью прогрева, а не багом.Полигон также наследует renderer env и значения по умолчанию графического профиля/размера окна, не фиксируя полностью воспроизводимый профиль и реальный engine binary SHA. В отчёте
git_rev()— SHA мода, который не доказывает версию запускаемого--gameбинарника.Нужно
Разделить deterministic visual snapshots и live performance/motion tests. Для snapshots фиксировать simulation time, renderer time/wind, camera/scene seed, размер/профиль и последовательность прогрева/temporal reset; для мерцания исключать ожидаемое движение или использовать соответствующую motion-aware метрику. Performance оставить живым, но на сравнимом сценарии с устойчивым warm-up. Писать SHA engine/patch stamp/бинарника, параметры GPU, разрешение и профиль. Не делать freeze одних world ticks единственным решением: вода живёт wall clock.
Приёмка
Два независимых прогона одного бинарника дают baseline diff в пределах численного шума при воде/облаках/закате. Повторные кадры не помечают штатную анимацию как неисправность. Контрольное изменение шейдера действительно ловится; GPU-бюджет сравнивается в одном режиме. Статическое ревью сценария/часов, GPU-бенч в текущей среде не запускался.
🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/3ced60e (заморозка времени/погоды, несколько кадров, маска движения). Остаётся: вода и ветер идут от настенных часов в движке — точная повторяемость требует заморозки в рендере.