This is basically an answer to Vivian who asked me why my Cumulus layers
look like stacks of cardboard rather than smooth volumetric objects like
Stuart's 3d clouds - I thought that maybe some others are also interested
in some background info, and maybe someone even has a new idea.

Basically, 3d cloud rendering works between 2 limits:

Billboard: Here a single cloud photograph is projected into the scenery.
Looks like an actual cloud from large distance, looks highly artifical
from close up, all the structure information of the cloud is encoded in
the texture.

Volumetric: Many small-sized 'particles' are brought into the scenery, the
sum of which forms the cloud. Here the cloud structure is encoded in the
distribution function of 'particles' which is *much* harder to get right,
as a result these clouds look good from up close, but not really from far
away.

Usually one uses a mixture between the two, say Stuart's default setting
uses 20 texture sheets O(200 m) in a 500 m cloud - that's not really
volumetric, but not really billboard either.

First issue: Cloud size distribution. It's not enough to generate one
realistic looking cloud and randomly distribute copies of it across the
sky - the repetition of clouds of the same size and shape looks very
artificial. A real image of an afternoon Cu layer shows that the sky
contains small-sized whisps O(100 m) up to well-developed towering cloud
masses O(5000 m) (and may even contain Cb O(20 km)). The underlying reason
is that Cu layers are a turbulent phenomenon, and turbulence mixes all
size scales in the problem. Thus, to get realistic layers, one need to
reproduce the size variation.

Second issue: Volume grows like L^3. If my basic 500 m cloud looks good
with 20 sprites O(200 m), and I want to use the same technique to render 5
km cloud masses, I need 10^3 * 20, i.e. 20.000 sprites _per cloud_
(1.280.000 sprites for a Cb tower) to get the same effect. Short of
waiting for a next-to-next generation GPU, that's simply out of the
question. A technique that produces very nice small-scale clouds simply
doesn't scale to large clouds. The only way out is: As cloud sizes grow,
so must sprite sizes such that #sprites/cloud is approximately a constant.
That inevitably means loss of detail.

Third issue: Shape distribution. Cumulus clouds have different shape,
often correlated with size. Small clouds are feathery whisps, large clouds
have well-defined cauliflower-like tops with sharp boundaries between
opaque cloud and sky. If that is to be right, the texture mixture needs to
be changed with the texture size. As the clouds become more opaque,
largely transparent feathered textures need to be changed against largely
opaque cauliflower-textures.

Taking issues #2 and #3 together, a large Cu cloud of 3 km size can only
reasonably be built from O(10-50) sprites with O(1000 m) sprite size with
rather opaque textures. Inevitably, that tends to look like a stack of
cardboard, because... that's largely what it is.

For small clouds, the fact that the textures and resulting clouds are
rather transparent and have no well defined boundaries hides the fact very
well that one is looking at a stack of sprites. For large opaque clouds,
that illusion unfortunately works not so well. The obvious solution is to
move towards a volumetric rendering limit, i.e. get the same opacity by
using more sprites which are individually less opaque - but that limit
runs into severe performance problems with a third power, see above.

Ultimately, it's the inability of the GPU to render millions of sprites
which prevents large clouds from looking as spectacular as small clouds
from close up, given the techniques we're using.

I haven't seen any definite answer to that problem anywhere - maybe there
is something I'm overlooking, but as far as I've been able to work out
these are generic reasons why large clouds can't look as good as small
ones.

* Thorsten


------------------------------------------------------------------------------
Get a FREE DOWNLOAD! and learn more about uberSVN rich system, 
user administration capabilities and model configuration. Take 
the hassle out of deploying and managing Subversion and the 
tools developers use with it. 
http://p.sf.net/sfu/wandisco-dev2dev
_______________________________________________
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel

Reply via email to