我正在尝试使用OpenGL实现真实的运动模糊,但没有累积缓冲区(因为它不能在我的显卡上工作)。以下是我对实施的想法:
有没有比这更简单/更快/更优化的方法?或者这是最好的解决方案吗?
答案 0 :(得分:3)
NicolBolas在他的评论中所说的是正确的:要获得真正的运动模糊,你必须应用由每个片段的速度控制的矢量模糊;计算每个顶点的屏幕空间速度,并将其作为另一个统一传递给片段着色器。然后在片段速度的方向和距离上应用矢量模糊。
由于这会与其他片段模糊,因此最终会出现透明度排序问题。因此,您应该将其应用为后期处理效果,理想情况下应使用深度去皮层。您可以通过使用先前渲染的帧的积压来节省深度排序的复杂性,这实际上是您建议的帧缓冲方法,添加了矢量模糊。
答案 1 :(得分:0)
执行此类操作有两种常规方法:
告诉哪些方法可以更好地工作并非易事。方法(2)的缺点是你进行了很多次传递,因此需要很多开销。方法(1)将在纹理读数处进行瓶颈处理。虽然在方法(1)中你仍然最终读取了方法(2)中的所有数据,但在方法(1)中,你将能够利用多个缓存行来进行纹理内存提取。 因此,决定绩效的两个最重要的因素是
a)你有多少个“子帧” b)你的屏幕有多大,因此要读取和写入的纹理有多大。