Я пишу простой шейдер для OBS , используя плагин obs-shaderfilter , и я хотел бы получить доступ к "предыдущему кадру" или даже "предыдущим N кадрам "так что я могу реализовать временное сглаживание, но ни https://obsproject.com/docs/graphics.html, ни примеры obs-shaderfilter не показывают способ получить ссылку на предыдущие кадры или кэшировать кадры, когда они выполняются с помощью шейдера.
Получить «пиксели» из текущего кадра довольно просто:
...
float4 get(VertData v_in, float x, float y)
{
return image.Sample(
textureSampler,
float2(
v_in.uv.x - x * uv_pixel_interval.x,
v_in.uv.y - y * uv_pixel_interval.y
)
);
}
float4 mainImage(VertData v_in) : TARGET
{
float4 c, p1, p2, p3, p4, p5, p6, p7, p8;
p1 = get(v_in, -1,-1); p2 = get(v_in, 0,-1); p3 = get(v_in, 1,-1);
p4 = get(v_in, -1, 0); c = get(v_in, 0, 0); p5 = get(v_in, 1, 0);
p6 = get(v_in, -1, 1); p7 = get(v_in, 0, 1); p8 = get(v_in, 1, 1);
return processKernel(c, p1, p2, p3, p4, p5, p6, p7, p8);
}
...
но для того, чтобы выполнить сглаживание времени, шумоподавление и т. Д. Мне нужно работать с одним или несколькими предыдущими кадрами, и я не могу понять, возможно ли это вообще или нет, учитывая отсутствие документации вокруг ограниченная форма HLSL, которую выставляет OBS.
Кто-нибудь знает, возможно ли это, и если да, то как должен выглядеть код для достижения этой цели?