Получение "предыдущих (n) кадров" в шейдере obs-shaderfilter - PullRequest
0 голосов
/ 18 ноября 2018

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

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

...