Получение "предыдущих (n) кадров" в шейдере obs-shaderfilter

Я пишу простой шейдер для 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.

Кто-нибудь знает, возможно ли это, и если да, то как должен выглядеть код для достижения этой цели?

0 ответов

Другие вопросы по тегам