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".
