Well, now that you mention outdoor scenes, you will actually get better performance by grouping the small objects(clutter/props/rocks) into few chunks, where you can render each group using a single DIP call.
The threshold value, obviously, depends on the gfx/CPU combo you use, but it is obviously faster to just render a group of 10 objects of, say, 3000 tris in one DIP compared to:
- frustum culling of 10 objects on CPU
- 10 DIP calls for some measly, 300 tris on average per object
Think of it the same way you partition the terrain. I assume you use some kind of a quadtree-like scheme for cutting the terrain into chunks and doing the frustum culling.
Now, while a single terrain chunk, say 128x128, will be considered a leaf (in terms of a quadtree), you may have lots and lots of props/rocks/clutter and it may very well be prohibitive to just render ALL props from a single VB - and especially in a scenario when there will be 4 terrain chunks in the frustum and only a small part of each is actually visible, yet you'd be sending 4 huge props VBs through the gfx card's pipeline.
As for the dynamic VB, I forgot to mention that the framerate really dropped for a short moment when the VB was being recreated- you might very well be allergic to such behaviour, but if amount of RAM is an issue, this is a great option, especially if you can spread the task of creating the dynamic VB across multiple frames.
Which, admittedly, becomes harder to manage, since during those few frames you might actually change the camera position, and thus recreate the VB that wasn't even created fully in the first place...