Spheres and bounding boxes are both great ways to make the collision detections simpler, but the thing is that some objects might be suited for one rather than the other and if only one system is implemented, some objects might suffer from it.
Another option might be using ellipsoids as the combine the best parts of both primitives, if used for organic models, but for static scenery, which in most cases is constructed of blocks, it would be a waste of performance.
Allowing the developer to attach their own collision model is the best way in my opinion, but it would cut on the possible optimizations. Maybe you could add all options and use the specific optimizations for the different objects, making the performance cost lower a bit, if it isn't too much work to do.
What I would do in such a case (if I had the knowledge for optimizations and 3D drawing) is make 2 separate objects: 1 for scenery and 1 for moving objects. The scenery would use bounding box collision making it easy to do collision vs moving objects, since most of the time you won't want to do such smooth motions and paths, which can be achieved with pathfinding algorithms anyway. Objects which aren't static could use any of the 3 possible collision models, making it easier to make accurate collisions, but increasing the performance cost. Maybe you can give the objects which have used defined collision models, a simpler model, which will be used, when frame rate lowers drastically.
Hopefully I haven't confused you entirely and made nonsense offers :lol: