在obs-shaderfilter着色器中获取“前(n)帧”

时间:2018-11-18 19:17:21

标签: shader hlsl obs

我正在使用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);
}
...

但是为了执行时间平滑,降噪等操作。我有点需要处理一个或多个先前的帧,并且由于周围缺乏文档,因此我无法弄清楚这是否可能OBS公开的有限形式的HLSL。

有人会知道这是否有可能吗?如果可以,那么实现该目标的代码应该是什么样?

0 个答案:

没有答案