Sunday, July 20, 2008

GPU Geometry Clipmaps DX10 wip

It has been some months since I wanted to make a new GPUgc using DX10 features. Specially with the new instancing, texture arrays & new formats available. ( leaving geometry shader & instanced tesselation out of the equation until nvidia presentations at coming siggraph ).

One week ago, i started the project from scratch except the MxM & Mx3 blocks generation from the DX9 version. The toroidal update & coordinates system is brand new, much faster, much shorter & support loading from a heightmap or a mathematical functions. Best of all, toroidal update is fully functional (not yet optimized ). Any out of core streaming/compression system can be plug in, i hope.

With all the new features of DX10, new problems appeared. Problems that bring questions, questions that need answers, answers that need to be found :)

GPUgc Dx10 Wip source

Wednesday, July 9, 2008

GPU Ocean Tessendorf 2001

In 2001, Jerry Tessendorf wrote "Simulating Ocean Water" which describe wave motion in open ocean. Based on statistical model, it simulates a realistic ocean, better than Gresner waves. The inverse FFT is the most CPU-intensive part. The DirectX SDK come with an 1D inverse FFT sample "GPUSpectrogram", since CUDA mapping support in directX10 is still on beta, i tranform the sample to do a 2D inverse FFT. The other parts can be precomputed or done on GPU easily.

Source DX10 : GPU Ocean

GPU Crysis Atmospheric scattering

Previously, i used ONeil atmospheric scattering from GPU Gems II to update a sky texture like Crytek did for Crysis. But they used nishita 93 model ( ONeil's code add optimisations and trade-off speed / flexibility / quality ). A few weeks ago, I made a shader that build this "sky texture" based on nishita93. There is two methods, the first one just compute all nasty integral and the other one use a precomputed texture to speed up thing at the cost of loosing some quality when sun is near horizon.

Source DX10 : Sky2008

left : first method, right : second one

Playing with parameters :