Um, something close to geomod would be what IL2 does, where the ships have specific damage points. When you hit that area with a big enough weapon, it'll display a transparant texture in that area, and its up to the modeler to put the wing spars and stuff underneath that area (and only there).
Just something that you guys could use.
Another idea that could be streamlined would be to make the ship out of destructable sub-systems, and when they get blown up, they leave a big hole. The only problem with this is that if you have a wing and the center section is blown up, it might leave the end still there - but I think that's bypassable.
The main problem with that approach is AFAIK is that each subsystem needs its own render pass, so that effect would be similar to having the same number of ships/textures in the environment....so it's not a truly feasible solution with the current engine.
Cartman's idea is not bad IMHO since it only takes one more render pass instead a dozen - and while the current decal code is quite fast, it still can't handle the massive ammounts of damage a capship can soak up.
The basic idea is good though - use a mape to store where the ship has been damaged. The problem is the hit of a new render pass.
There are a number of things that can be done, though the best for the whole fade-in would be to use a 1-bit texture. The nice thing could be that given the average decal size it could be even smaller than the texture above - basicly a single pixel would be assigned to a bigger portion of the ship's surface. All that the map stores is where the decal was placed - Bobbau's code already has to monitor this right now.
Here comes the tricky part - after a while the system can't draw any more decals as they would take up too much memory and CPU time.
This is where a pattern-discerning algorythm could do wonders: Once a certain number of decals are grouped together it switches them for a bigger decal texture - cutting down on the number of decals. It could continously merge these decals into bigger and bigger textures.
You could say that that would take too many textures - though if we simply made a base decal texture to cover a sizable portion of a capships hull then let the mipmaps take care of the smaller maps we could circumvent the memory problem.
With the material system further tricks could be done:
-Strech the texture in different manners, flip it
-Apply different alpha blending routines for the decals
-Use the base map as a template and change the decals color accordingly (can be done with shaders AFAIK - check out the disco Arcadia)
Though the tricky part is the said patterning routine - may be too hard to code/take up too much CPU time.
The other alternative is to use a damage texture and alpha blend it into the main once enough decals accumulate.
A further trick is to create a new instance of the whole texture set - with the decals / damaged texture portions burned in. That would lessen the render passes as the decals would be drawn as part of the texture.
The problem is that it would make a new instance for each ship and therefore chew up memory.