2D运动模糊解决方案

时间:2009-07-03 13:24:40

标签: language-agnostic graphics 2d effects motion-blur

我正在考虑将运动模糊放入我的2D程序中,但我怀疑我当前算法的结果。

我的方法目前看起来像这样:

  • 画到后台。
  • 什么时候到 更新前缓冲区,混合 后缓冲器放在前缓冲器上。
  • 重复

什么会导致“运动模糊”效果显然是混合,因为运动中的物体会留下褪色的痕迹。

这显然对硬件要求不高,无论如何都会进行双缓冲,唯一的额外步骤是alpha混合,这是一个简单的计算。然而,小径将非常尖锐,并且根本不模糊,这可能看起来有点奇怪。在混合步骤之前,我可以在后台缓冲区上做一个盒子模糊,但感觉它可能对像Nintendo DS这样的低端系统非常沉重。

是否有任何解决方案可让我更有效地做到这一点或产生更好看的效果?

3 个答案:

答案 0 :(得分:5)

实际上你应该渲染许多中间帧并将它们混合成一个结果。例如,假设您的输出帧速率为50 fps。如果你在内部以500 fps的速度渲染并将10帧的混合组合在一起,然后再向用户显示,你可能会得到一个合理的结果。

您目前使用的方法模拟持久性,就像您使用慢速磷光体渲染到旧的CRT一样。这与运动模糊不是一回事。如果帧持续时间为20ms(1000/50),则运动模糊帧由跨越20ms帧持续时间的渲染组成,所有渲染都具有相同的alpha加权。持久性解决方案包括20,40,60,80,100ms前的渲染,逐渐淡出。

答案 1 :(得分:1)

它可能不是很尖锐。这一切都取决于使用的混合功能。例如,先前/当前图像的0.1 / 0.9将分别提供一些微弱的痕迹。

我可能会补充一点,这实际上是如何完成OpenGL中的运动模糊(通过累积缓冲区)

答案 2 :(得分:1)

根据我的知识,没有真正的方法可以更有效地做到这一点。这就像它获得的效率一样。如果帧率很好并且移动也不太锐利,那看起来相当不错。

对于每个像素,最佳外观的计划是从新位置到旧位置绘制半透明线。然而,这不是一个微不足道的计算。