Skip to content

Archive

Archive for April, 2012
FFT镜头效果已经完成,并集成入KlayGE开发版中,命名为FFTLensEffectPostProcess。除此之外,还写了一个命令行工具,用于产生镜头效果的纹理。虽然FFT的方法能在一个pass内产生各种复杂的镜头效果,但目前性能低于默认的多重gaussian blur。其中最主要的开销来自于FFT本身,下面就着重就讨论一下GPU FFT的进展和未来。 前不久我在用Pixel Shader实现FFT的时候,提到了用Compute Shader来实现FFT效率可以更高。之前Ocean的例子里就有用于实现波浪模拟的CS4 FFT(从NV的例子改进而成),它的输入和输出是1D Buffer的形式。为了更通用,在进入KlayGE核心的时候改成了2D Texture的形式。可惜的是,CS4不能写入纹理,就需要增加一个把Buffer转 ...
AMD在7900系列显卡发布的时候同时推出了Leo demo,并说明它不是用近年流行的Deferred框架渲染完成,而是用到了一种叫Forward+的框架。这个框架不需要Deferred的大带宽要求,却仍能实时渲染上千光源。EG2012上有篇新paper叫做Forward+: Bringing Deferred Lighting to the Next Level,讲述的就是这个方法。但目前作者还没有放出该论文的全文,这里我只能通过只言片语和AMD的文档来解析这个神奇的Forward+。 Tiled-based Deferred Shading 在进入正题之前,我们先回顾一下Intel在SIGGRAPH Courses 2010里提到的Tiled-based Deferred Shading。它的算法框架是: 生成G-Buffer,这一步和传统deferred shading一样。 把G-Buffer划分成许 ...
上周末把GPU Gems 2里的GPU FFT在KlayGE里实现了一下,经过优化和调整,昨晚已经进入KlayGE的开发版本中。完整的FFT Lens Effects也会很快集成进去。 这里用到的是那篇文章中提到的方法1,因为经过测试,方法2在现代GPU上速度不如方法1。我做的改进是把原来的3张查找表合并成1张,并都用16F而不是32F的格式保存输入输出数据。在GTX580上,512x512的数据量,PS版本的FFT花费0.94ms左右,能达到CPU FFTW的75倍速度。但即便如此,对于lens effect那样的应用来说还是有点慢。所以接下去考虑用Compute Shader来实现FFT,pass数会减少到1/3。PS每次处理2个数,512x512需要log(512) + log(512) = 18个pass;CS每次可以处理8个数,所以只要6个pass ...