I have solved most of the performance issues I was encountering with terrain
splatting.  I pushed all the level 0 patches up to level 1 and made 64x64
meters the size of level 0 patches in the quadtree.  Level 1+ textures are
pre-calculated for all patches and level 0 is a combination of dynamic
splatting and level 1 textures.  I need to do some more work on smoothly
transitioning level 0 -> level 1.  I think I will try Chris Thorne's
suggestion and place alphas into the mipmap at level 0 to force a smooth
fade out at the edges.  What is nice about this whole thing is that it is an
enhancement to the terrain system which can be optimized by the user.  In
other words the amount of "detail" can be set by the user or turned off
completely.  I have not yet tested this with GeforceII, but I tend tho think
this will work well on that card also.  Here are some preliminary "unpretty"
screenshots.  Prob by the end of the weekend I will have screenshots which
better show how nice this effect can be.

http://www.magicosm.net/screenshots/cosm829.jpg
http://www.magicosm.net/screenshots/cosm826.jpg
http://www.magicosm.net/screenshots/cosm825.jpg

The real trick to terrain looking nice is to have organic flow (rock,
grass,etc) and natural organization of the terrain elements (cracked mud by
river, moss on rocks, etc).  Add to this proper use of vegetation where
needed (weeds on grass, flowers in rock cracks) and it comes together.  We
should have all those elements working within a few days.

Dave Yazel


----- Original Message -----
From: "Yazel, David J." <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, August 15, 2002 11:39 AM
Subject: [JAVA3D] Advanced terrain texturing - continued


We implemented the technique described in this document:

http://www.cbloom.com/3d/techdocs/splatting.txt

I re-wrote our level 0 patch renderer to use layered alpha blended textures.
Each of these patches is 128 meters x 128 meters.  All of the level 1+
textures continued to use the pre-rendered textures, but for the level 0 we
layers splats onto the terrain with blending.

Each level 0 patch is rendered with a series of "splats" in a decal group.
1 to N splats are layers and rendered with repeated passes.  Each splat has
a high density tiled seamless texture in texture unit 1 and a greyscale
alpha map in unit 2.  Tye alpha mask is unique per patch and per splat.  We
combine using the alpha from unit 2 and the rgb from unit 1.  After fooling
around with various options we found that using an alpha map of 64x64 texels
was sufficient for nice blending between between splats.  This allows for
moss to be blended into rock and so forth.  You can use a perlin noise
filter to set the alpha so that the alpha for each splat is contiguous,
seamless and organic in nature.  The advantage is that the density of the
terrain texturing is exceedingly high, but you are really only re-using the
same 10,20 or 30 textures across your terrain, just blending them together
differently.

The tests from last night was on a Geforce 4 with 128 MB and a 2 GH Athelon.
With level 0 patches visible to 500 meters the frame rate with 4 blended
splats ( which is 4 multitextured passes per patch ) we had frame rates drop
from 90 to 70, and sometimes as low as 60.  I do not yet know about the
Geforce II, but can test that tonight.  But losing that much frame rate is
probably going to be unacceptable.  However I have not given up hope yet.  I
think I will add one more level of patches (down) to a 64 meter x 64 meter
range and see how splatting works with a reduced number.  Perhaps the trick
is to render the area immediatly around the user with a moving mesh and
merge it with the less dense textures at level 1+.

One thing which troubled me.  (And a question for the Sun engineers) In a
few cases I could see a blended splat *through* a hill.  So the texture was
for an occluded patch, yet the alpha splat was visible through the hill.
This suprises me since I am using decal groups for the shapes.  Since the
bottom texture is *not* transparent and only the coplanar ones are, then I
would assume this would not be rendered in a seperate alpha pass.  For me to
see a layer through an opaque hill it would require that Java3d was
rendering all the layers as transparent objects *and* disabling zbuffer
writing for all layers.  This could also contribute to a performance
degradation since that means even more overdraw than is necessary.

Dave Yazel

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to