You could (in theory) encode all your colours/gradients as a curve or 1dLUT , mark up the various different "material IDs" with vertex color and offset them with parameters on the material instance to index into the curve. bit of a waste of effort though imo :D
Well it's a single texture for the entire game. I do have to use material instances for anything that wants something unique beyond the texture. Like for example, I have an EnemiesCommon material instance, and a lot of enemies can just use that, but if I want to tweak the tint or add an overlay or whatever on some enemy,…
I don't know if this method is good or not performance-wise; I'm assuming one gradient texture is more performant though and complex materials less so. Have you thought of assigning material instances to individual mesh components, and just using a colour vector parameter? This will allow you to change colours on the fly,…
its quite simple to implement, the effort is in setting the rules around what a material ID means. It's no more complex than dealing with a single indexed color palette but we stopped doing that for a reason..