RealTime Synthesis and Rendering of Ocean Water

http://ati.amd.com/developer/Mitchell-Real-Time_Synthesis_and_Rendering_of_Ocean_Water(ATITR_Apr05).pdf

feature上没有实质性的进步,只是做了叠加offline generated的normal map的东西,造成可以有水波被鸭子影响的效果。

主要在实现上,放到gpu上,以及将geometry与normal分离的优化。

 

 

GPU computing FFT

 

理论背景仍旧是FFT,公式主要还是FFT, amplitude和spectrum。

 

由于FFT的计算在cpu上就是grid上一个个点算的,点之间没有dependency,天生并行。所以gpu上算再适合不过了。

 

 

  • 浪线h(k),根据philips spectrum算出,cpu上算一次就可以了,和时间无关
  • w---频率,也是和时间无关,cpu上算出就好
  • 浪线h(k,t)基于浪线h和w,加上时间,这部分gpu上算。
  • 结果就是fft的heigt field的了

performance:

当时是radeon x800,12 pixel shader, 392Mhz,计算64×64+256×256耗时6ms。

对比现在的主流gts250显卡,793Mhz,128 cuda processor,这的确是非常ok的一个消耗了。

 

normal map:

有了hight map之后,normal cross一下就好了。

 

 

 

synthesis waves

也是这个文章点题的一部分。

就是弄一个高resolution(256*256)的grid生成normal以显示细节。

低resolution(64*64)的作为vertex shader displacement map两者结合,效果很ok,效率也好。

至于低resolution map的生成,一种是直接算出一个,也可以高resolution的来downsample出来,文中是使用直接算一个的。

 

至于为什么vertex shader displacement map要用低resolution的而不是直接sample 高resolution的,应该是考虑到texture cache performance的问题。

 

 

 

composing other wave forms

 

用一些预先做好的height map or normal map合成就好。

RealTime Synthesis and Rendering of Ocean Water_第1张图片

 

 

你可能感兴趣的:(cache,CUDA,performance,shader,fft,Forms)