[bug] Native TAA: история и перепроекция используют разные системы координат джиттера #38
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).
Проверено на
f443f0a. Источник: патч 16, последующее состояниеgfx.rsиgfx/hd.rsнаf443f0a. Это относится к обычномуfs_taaпри масштабе 1, а не автоматически кfs_taau.В
gfx.rsтекущая геометрия рисуется сview_proj = jitter_translation * unjittered, но вtaa_prevсохраняется unjittered матрица предыдущего кадра.В обычном
fs_taa:in.uvчерез обратную jittered матрицу;centreиз текущего jittered пикселя; компенсации/восстановления в сетку без джиттера здесь нет;prev_view_proj, которая unjittered.На первом кадре, в который записана история,
frame.taa.w=0, поэтому история точно равна текущему jittered изображению. Уже следующий кадр ищет ту же точку по матрице без прошлого джиттера — попадает в другое место.Проверка матриц на CPU
Неподвижная камера, 1920×1080, та же RH reversed-Z перспектива, точка
(0,0,-20). Позиции Halton взяты из функцииjitter:Это проверка координат матрицами, без запуска GPU. На гранях/тонких текстурах ожидается лишнее смягчение, дрожание или шлейф от накопления несовмещённых выборок. Конкретную выраженность нужно проверить в игре.
Исправление
Выбрать единую систему координат истории: либо история в сетке без джиттера с соответствующим восстановлением текущего цвета/позиции, либо история в jittered-сетке с использованием предыдущей jittered матрицы/смещения при перепроекции.
Не менять
prev_view_projвслепую для обоих путей:fs_taauуже отдельно учитывает текущий jitter и восстанавливает цвет в выходную сетку.Приёмка
Добавить тест двух кадров статичной плоскости с известным цветовым градиентом: одна мировая точка должна попадать в ту же мировую точку истории при изменении Halton. Отдельно проверить scale=1 и 0.67, неподвижные тонкие линии и медленное вращение камеры; сравнить с TAA=0.
🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/e3148bf (запушено в main).