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上算再适合不过了。
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合成就好。