Привет.
Как известно фильтр миксует уже накопленную картинку
с текущей усредненной по 3*3 сетке
Пытаюсь отладить правильность в полном покое.
Я пока жестко блендфактор передаю с клавы.
Накоплю что-то на 0.95 и потом выставляю его на 0.99/1 - типа показывается только история.
Так вот - даже при 1 у меня шум, но несильный.
Непонятно что за косяк.
Я там в шадере все поотрубал. Картинка статичная. Скорости все нулевые
==========================
vec4 clip_aabb(vec3 aabb_min, vec3 aabb_max, vec4 p, vec4 q)
{
const float FLT_EPS = 0.00000001f;
vec3 p_clip = 0.5 * (aabb_max + aabb_min);
vec3 e_clip = 0.5 * (aabb_max - aabb_min) + FLT_EPS;
vec4 v_clip = q - vec4(p_clip, p.w);
vec3 v_unit = v_clip.xyz / e_clip;
vec3 a_unit = abs(v_unit);
float ma_unit = max(a_unit.x, max(a_unit.y, a_unit.z));
if (ma_unit > 1.0)
return vec4(p_clip, p.w) + v_clip / ma_unit;
else
return q; // point inside aabb
}
=====================================
current = textureLod(ScreenInput, uv, 0.0); /// noisy current ssr
vec2 prevUV = uv ;
vec4 previous = GetPrevT(prevUV); // sample from history
// calc box
vec4 m1 = vec4(0.0);
vec4 m2 = vec4(0.0);
for (int i = 0; i < 9; i++)
{
ivec2 iuv = ivec2(gl_LocalInvocationID.xy) + offset;
vec4 val;
Load1TPixel(uint(iuv.y * (KERNEL_SIZE + 2) + iuv.x), val);
m1 += val;
m2 += val * val;
}
vec4 currentAverage = m1 / 9.0;
// noise power at this point
vec4 stddev = sqrt(max(vec4(0.0), (m2 / 9.0) - (currentAverage * currentAverage)));
float gamma = 2.0;
vec4 currentMin = currentAverage - stddev * gamma;
vec4 currentMax = currentAverage + stddev * gamma;
previous = clip_aabb(currentMin.xyz, currentMax.xyz, clamp(currentAverage, currentMin, currentMax), previous);
float k_feedback = TResponseMax;
vec4 pout = mix(current, previous, k_feedback);
imageStore(TemporalResult, uvInt, pout);
==================
Кто что только не советует. И вместо среднего считать по гауссу с весами, и цветовое пространство
другое советуют. Запутался уже сам....
Если коментарю функцию с клипААББ то тогда не шумит даже на 0.99
Если ставлю гамму 5, то не шумит, но и при этом каша/гостинг при движении камеры (скорость по камере я добавляю, чтобы отражения соотвтетссовали действительности)
Если гамма большая, то в движении за объектами и отражениями тянутся жирные шлейфы (гостинг).
Если гамма маленькая, то в покое картинка и SSR начинают дико мерцать и «кипеть».
Неужели эту гамму надо подбирать динамически - для покоя и движений?
Не понял , а гамма тут как изначально ?
Можешь чекнуть здесь
https://github.com/DiligentGraphics/DiligentFX/blob/master/Shader… cumulation.fx
Здесь дополнение по тому как накпливаем сэмплы
https://github.com/DiligentGraphics/DiligentFX/tree/master/PostPr… -accumulation