Aeq*_*tas 7 opengl motion-blur
我一直在关注如何基于相机移动进行模糊的GPU Gems 3教程.但是我也希望实现基于对象移动的模糊.解决方案在文章中提供(参见下面的引用),但我很好奇如何实现这一点.
目前我将对象的矩阵乘以视图投影,然后再分别对前一个视图投影进行乘法,然后将它们传递到像素着色器中以计算速度而不仅仅是视图投影.
如果这实际上是正确的方法,那么为什么我不能简单地传递模型 - 视图 - 投影?我会假设它们的价值相同吗?
要为刚性动态对象生成速度纹理,请使用当前帧的视图投影矩阵和最后一帧的视图投影矩阵来变换对象,然后以与后处理过程相同的方式计算视口位置的差异.应该通过将两个变换位置传递到像素着色器并在那里计算速度来按像素计算该速度.
看看我几个月前在这个主题上做的研究:http://www.stevenlu.net/files/motion_blur_2d/Fragment_shader_dynamic_blur.pdf
(2014年12月20日更新:现在由我的网站提供服务,该网站已经以最经济的亚马逊EC2形式重生,请不要太难打...)
塔粉碎的标准渲染http://www.stevenlu.net/files/motion_blur_2d/60_noblur.gif 模糊塔粉碎的渲染http://www.stevenlu.net/files/motion_blur_2d/60.gif
遗憾的是,在制作这种材料时我没有实现纹理对象,但确实运用了你的想象力.我正在研究一个游戏引擎,所以当它最终以游戏的形式看到光明之日时,你可以确定我会来这里发布面包屑.它主要讨论如何在2D中实现此效果,以及在对象不重叠的情况下.使用片段着色器来"扫描"样本以产生"准确"模糊并没有真正好的方法.虽然随着样本计数的增加,效果接近像素完美,但必须生成以覆盖扫描区域的几何体必须使用一些"丑陋"技术手动组装.
在全3D中,知道动态对象在帧的过程中将扫过哪些像素是一个相当困难的问题.即使使用静态几何体和移动相机,GPU Gems文章提出的解决方案在快速移动过程时也是不正确的,因为它无法解决需要混合移动的区域的问题...
也就是说,如果忽略扫描的这种近似是足够的(并且它可能是)那么你可以做的扩展到动态对象就是考虑它们的运动.您需要计算出详细信息,但请查看您链接文章的第二个代码块中的第2行和第5行:它们是像素的当前和上一个屏幕空间"位置".您只需要以某种方式传入矩阵,这将允许您计算每个像素的先前位置,同时考虑到对象的动态运动.
这不应该太糟糕.在渲染动态对象的过程中,您将发送一个额外的矩阵,表示其在最后一帧上的运动.