Vegetation Rendering

Started by
16 comments, last by Dig Arts 19 years, 8 months ago
I'm looking for information on vegetation rendering. Specifically I'd like to add procedural trees to my rather bland terrain. I've got a basic concept on how I'll render the grass. If anyone has any ideas they'd like to discuss I'd love to hear your thoughts. I'm not set on the procedural geometry idea yet, so if you have ideas on other techniques please feel free to share as any thoughts you may have will help me make the final decision.
Advertisement
I was looking at Far Cry's vegetation today. They use a small collection of hand-modeled trees and bushes. For a given model, they also have a set of billboards of the model rendered from several viewing directions. (They actually have a high- and a low-rez set of billboards for each model.) For a distant tree, they select the billboard that most closely matches the actual viewing direction. (If you strafe around the tree and change your viewing angle enough, you'll see the tree pop as it switches to a different billboard.)

When you get close enough to a billboard tree, it switches to the 3D model, but you don't see a pop! I would have expected a pop, since the billboard version of the tree is only in approximately the correct orientation. To avoid this, they orient the 3D model so that it matches the billboard. Then, as you approach the tree, the 3D model gradually rotates to the tree's "true" orientation.

Well, anyway, that was my impression of how their system worked. If you want to check it out for yourself, download the demo and focus on the "bent" palms along the beaches.

Hey, Winter Park is a few miles south of me. I suppose you're at Full Sail, yes? Just curious...
Nature Wizard has some interesting tips on plant geometry and l-systems. The Virtual Terrain Project is also a good source for informations like this.

Last but not least, there is the Convincing treesthread on this forum which contains very interesting tips about vegetation rendering (trees).
Eric: It almost looks like farcry is dynamically updating their billboarded trees. I believe this is why you don't see a pop. I was attending Full Sail, but I graduated last year.

Emannuel: I've read nearly everything I could find on the forums and vTerrain. Thanks for that Nature Wizard link though, seems like they may have some interesting technology.
I'm seriously contemplating implementing a dynamicly updated imposter system. So up close I would render the full mesh, then maybe use some geometry LOD techniques, and at a distance use render to texture to cache the billboard.

This should solve a lot of popping issues and have a relatively good performance as long as the number of imposters updated per frame is minimal. I suppose I could use a priority system and update during a timeslice.

Any questions, comments or concerns? Has this been done? I'm also wandering how I'd set up the transforms to rendre the tree to the imposter, any ideas?

[Edited by - Sages on August 10, 2004 12:22:55 PM]
Sages: Yann L describes a similiar system in this thread:

http://www.gamedev.net/community/forums/topic.asp?topic_id=157049
Regarding rendering... http://www.vrvis.at/TR/2003/TR_VRVis_2003_027_Abstract.html (the pdf paper is there also) has a summary of different techniques. The "interactive rendering of trees with shading and shadowing" mentioned in there looks the most interesting to me - although the cube map visibility could probably be replaced with some cheaper visibility calc in a vertex shader (eg, polynomial texture map except per-vertex, ambient occlusion, SH, shadow map, etc). Speedtree also looks interesting though not much info - downloading and looking at the valley demo can reveal alot though.
I am attempting to understand all the possibilities before I decide to implement a method. I am curious as to how you would calculate the view and projection transforms needed to updating the imposter texture. Any thoughts on this?

Here are some screen shots of the the project I'm implementing these features into. I've implemented all the tree and grass rendering features today, and they are in need of improvement.



[Edited by - Sages on August 11, 2004 6:29:33 PM]
That grass looks pretty sweet man, nice long-field type of grass - what method did you end up using for it? It looks like it might be moving in real-time too but I can't tell from the static shots too well.

-Mezz
The rendering is based on an article in GPU Gems, which discusses the technique used in the Code Creatures Benchmark. It actually looks pretty crappy IMO, since my current pixel shader just returns a constant color, and the animation is currently applied to all of the grass patches the same way.

All the grass currently animates exactly the same which definitely doesn't portray reality but the system is flexible enough that I could add per patch animation easily. There is a few methods discussed in the GPU Gems article, I just haven't implemented any of them.

Unfortuneatly, since the article is discussing a benchmark, the rendering method is meant to be taxing on the system. So, I've been reading several other articles to help decide how I'll do LOD. I have a method worked out that should be sufficient, but I won't be implementing it until I get the render to texure tree system implemented, as I think the trees will be more impressive to the end user (me).

This topic is closed to new replies.

Advertisement