Though we can't afford DMM or such solution, neither in performance and in cash - it's very expensive (meaning like pre-created models of breakable stuff by our graphics guys is far less expensive than DMM) and not so well suited for open world games (in my opinion) - note that DMM looks good, I don't think it looks that much better than precomputed breakable models like in Source engine games.
Note: In next part I'll refer to NON-broken model as to object and to it's broken parts as to object fragments.
So, to the question - I know that there are more ways to achieve breakable body:
Solution 1:
1.) Create for each object fragment a separate geom and body. Connect them with fixed joints.
2.) Upon recieving enough damage, destroy fixed joints so the object fragments will be broken to parts.
Though this seems good, it's very bad (IMO). You have to render object fragments from the very beginning (so much geometry, not mentioning the seams where AA goes crazy). Also if we have object composed of 20 fragments it means we simulate 20-times more bodies than the single one (before it's broken) - a lot of contact points between them can also occur (slow, slow and horribly slow).
Although this one gives me ability to tear object to pieces one by one (e.g. where needed = where it was hit).
So I came up with better solution.
Solution 2:
1.) Create just single object. (And render as single object)
2.) Upon getting enough damage, destroy this object and spawn object fragments (of course I know I have to set their positions correctly here!)
This looks a lot better from the perspective of speed (and seams). But I don't have ability to tear object to pieces bit after bit (e.g. for larger objects where I'd like to drop off single fragment and keep the rest together...)
So in the end I think the best would be a mix of these two - but only for larger object (that I want to destroy piece by piece). I'd be glad to hear any opinons/advices here.
Note. I know this is unrelated, but Havok and PhysX have some examples to this (and I've used these two in projects some time ago), though this project needs to be cross-platform (and it's primarily developed on Linux) - and so we switched to Open Dynamics Engine.












