GLSL Shader Effects:如何进行运动模糊?


16

我有一个完整的2D环境,周围有精灵,例如风景,角色等。

为了使它看起来更先进,我想实现运动模糊效果,类似于快速移动相机时的现代FPS游戏(即《孤岛危机》)模糊。

在侧滑车中,理想的效果是使这种轻微的模糊出现,从而使摄像机在移动时可以快速移动。如果有人可以给我一些这样做的技巧,我假设是在像素着色器中,我将不胜感激。


保留渲染缓冲区的多个副本。例如,对前四个帧进行模糊处理以创建当前帧。那应该创建您想要的效果。
knight666

@ knight666最好保留1个额外的缓冲区(称为A),而不是将其一部分(比如0.75)与输出缓冲区(进入屏幕,称为B),然后再将B复制到A。这将创建滚动平均值,并且增加运动模糊不会花费任何额外费用。
Elva

1
我本打算对此发表评论,但找不到评论按钮。无论如何,戴夫·O(Dave O.)所说的可能是最好的选择,而《孤岛危机》(Crysis)等游戏中所使用的则是最佳选择。这有点像这样。在对象渲染期间,将对象速度渲染到单独的缓冲区中。MRT将使速度更快一些,并且有多种计算速度的方法,但是您最终要获得一个额外的缓冲区,该缓冲区具有整个渲染缓冲区的速度。然后在后期着色器中,根据每个像素的速度,沿与速度相反的方向采样到颜色缓冲区中
Arelius

清单27-1中的HLSL / Cg代码使用全屏后处理像素着色器中的先前方程式,使用深度缓冲区和当前像素的倒数来计算在给定像素处渲染的对象的世界空间位置视图投影矩阵。... HLSL ....在您的代码中不是GLSL .....

Answers:


6

保留最后一个帧缓冲区的副本。获取相机运动矢量并将其反转。照常绘制场景,然后绘制最后一个带有微小偏移量(刚计算出的相机增量)和0.75 alpha的帧缓冲区。重复多次,以获得运动模糊效果。


1
这种方法很容易实现,但很难进行微调(看起来就像对象留下痕迹而不是模糊不清)。另一种简单的方法是在后处理像素着色器中沿反转的相机移动方向“涂抹”像素。
Dave O.

6
这种方法的主要问题在于,它取决于帧速率-如果以20 fps的速度运行,它将看起来与以100 fps的速度运行时的外观非常不同。只要您知道这一点并以您希望的帧速率获得想要的结果就可以了,但是您确实需要意识到这一点。
Maximus Minimus

19

我建议使用这种方法: 运动模糊作为后处理效果

实现起来非常简单,这是我在glsl演示废墟岛中使用的那个[link]


这种方法远胜于过去的帧融合方法
Steven Lu

现在,此答案仅提供了一个链接。如果将来链接中断,没有人会知道如何实际解决他们的问题。至少尝试包含链接提供的基本信息

是的,让我们制作一个互联网副本,因为该副本完全不会中断:J
SasQ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.