Which also means that spheres are usually more than sufficient and if you can easily group a bunch of objects into chunks, it's a waste of time to cull every single object individually.
For a large terrain, I use a sphere tree. It's crude and draws the occasional invisible chunk, but culling takes almost no time at all.
hmm...
the world is procedurally generated when the player starts a new game. what gets culled? ground quads, trees, rocks, bushes, PCs, NPCs, monsters, dropped items, missile in flight. that's about it. the usual stuff.
ground quads are simply drawn around the camera out to clip range. the world map defines the texture tile set used (sand, leaves, etc). a "pattern map" defines the texture used for each quad. a procedural heightmap function based on the terrain in the world map is used to heightmap a quad before drawing.
trees rocks bushes etc are located via a terrain flag in the world map (yes there are rocks here), and a "pattern map" of what rock is where. the pattern maps are sparse matrices, IE lists with type (defines mesh and texture, or model), coords, scale, rotation, pre-estimated bounding box coords, etc.
PCs are in another list. NPCs and monsters are in yet another list. Dropped items are yet another list. and active missiles is the final list of stuff to draw.
Models (any object requiring more than 1 mesh and 1 texture to draw) are clipped or not clipped in their entirety, so clipping a model automatically clips all its meshes. that's about the only place where the data is already tree-like. models are a limb based system with up to 20 limbs (currently), and any limb can be the parent of any other limb, or have object space as its parent frame of reference.
as you can see, everything is in lists, and none of these object types encapsulates another. that's already handled by the individual models. clip a tree and you clip its trunk/branch mesh, and all its leaf meshes. clip a monster model and you clip its body, limbs, head, fangs, claws, etc.
is there a way to put these lists into a tree that would speed things up? or is it already as "treed out" as possible?