Overall, I'm in support of the player having some special stuff just for them.
I'd like to see some kind of procedural paintjob adjustment for different factions, though this may be extremely tricky.
I've often thought that was the right way to go, using a secondary shader pass, along with using a shader for the damage system.
The 'mech shader for Mechwarrior 5, for example, uses a system where the base texture is mixed with "paint colors" (with about a half-dozen other textures mixed in; normalmaps etc.- it's massive overkill for SS).
Damage is handled via a damage texture and "heat" texture to produce a final result via a shader. This means that instead of managing a bunch of quads, the system just has to allocate three textures to the shader, plus the damage texture for <ship style> during the render pass. If ships were organized by <sprite,style> in the rendering pass, it'd be reasonably efficient, in terms of texture loading operations per frame.
If done this way, the ship would have two render textures for these special textures, that would use the ship's base sprite as a translucency mask and also render off-screen with a shader; each time they took damage, if taking a hit heavy enough to inflict visual damage, the damage map would get updated (essentially, just a black/white mask used for the final render pass) and the heat map would get updated every frame that some value <damageheat> was still above zero, to keep processing loads down. Damage map would be permanent changes, where white values indicate that the damage texture's almost overriding the base, kind of like how it looks now (although, fun fact, repairs to Hull/Armor could be reflected by simply running the hull damage operation in reverse), heat map would keep updating until <damageheat> reached zero.
Final shader operation would look something like:
Colorvalue = base_texture_sample
Colorvalue = lerp(Colorvalue,damage_texture_sample,damage_amount_sample)
Colorvalue.rgb += damageheat_sample.rgb
Colorvalue.rgb = vec3(min(Colorvalue.r,1.0),min(Colorvalue.g,1.0),min(Colorvalue.b,1.0)),
I would think that this system would be, on average, cheaper than the current system, because while it costs some CPU / GPU per hit (to re-render the damage amount texture and sometimes the damage heat texture), it's not having to do a whole bunch of rendering passes / additional quads / etc. per frame otherwise. It would cost some more texture memory,
maybe. Remember, none of those textures have to get allocated for anything off-screen; they don't even need to be updated visually until they're on-screen again- a record of damage hits could be queued instead, for example, so that damage visuals aren't even updated until the ship's rendered again. Also, we are in 2023, and even low-end gaming GPUs have 6GB or more, so it's less of a technical constraint.
IDK how the current system is implemented exactly, but I've always gotten the impression it's using layers upon layers; this might well be significantly cheaper and offer some opportunities for visual uplift as well.
Also, if the shader was exposed, the current modded system people use for normalmaps, etc., could be converted to operate within that framework pretty easily, one suspects, improving performance substantially.