Saturday, March 17, 2007

GPU Geometry Clipmaps Done








http://www.youtube.com/watch?v=qw-gomauW84

http://www.gamedev.net/community/forums/topic.asp?topic_id=439770

Demo

Finish ! Instead of normal maps size 512, i use 256 because it looks better. i also notice that this technique don't like much pikes ( RidgeMF ) but i think that's the way they compute the average of coarser level with only 2 tex fetch. On other terrains ( Turbulence ) morphing is hardly visible.

6 comments:

vaseo said...

hi, looks great. do you synthesize the finest level as mentioned in the paper?
i still didnt get to my project, but when i get to it i will rebuild my 'clipmap web' and we can share some info if u would be interested.
btw where r u from?

FilouGK said...

I synthetise all levels. I don't use his filter.

In his paper, he synthetised the coarsest level and use is filter (16 + 1 texture fetch) on finer levels + add noise from a 2D texture. It's faster than synthetising all levels.

I am from france and i don't mind sharing :)

Gregory said...

Really nice demo,

Is it available for download ? executable ? sources ?

FilouGK said...

I added a demo. Sources right now have no comments, don't think they would be of any help.

vaseo said...

if u mean gpugcm paper, i think they use compression so the height values come from a preprocessed data file. then they add noise to the finest level. at least thats how i understand it.

the '16filter' is used when upsampling from a coarser level and somehow corrected from a residual data map (the compression and pyramid hierarchy of residuals is described in an older nonGPU paper).

i like the all-synthesize idea, because it's CPU and RAM free ;) my current implementation reads data from a raw heightmap and the update stuff is done on CPU, which is not ideal. i;d like to implement the compression but i think it will be a bit more tricky..

FilouGK said...

hum that's a bit different from what i understood.

I thought that only the coarsest level was fill with real data and the finer were done with his filter + noise from a 2D noise map.

Having a residual map for each level that correct the value of the filter mean that the the residual must be updated as the clipmaps and residual map are preprocessed. Updating directly the clipmaps with float instead of doing his filter+residual sounds faster. Maybe it's part of their compression algorithm ( PTC ), but i read somewhere that it was patented. Maybe his filter is used to build an approximation of a level because updating a all level mean a lot of decompression on CPU and can't be done in one frame.

Anyway, in the paper they say residual can come from PTC or noise. So filling only the coarser level with real data and use filter + noise for finest can be a good trade off.