You can also look into custom shaders and global variables, would be a very small footprint on your project if you’re comfortable with shader graph at all. If all the materials of these objects share the same shader, and you have a global float variable controlling saturation within that shader, you could achieve these global effects with very little headache. There are a lot of small pitfalls along the way though, like some shader node editors adding an “_” into the internal naming of the property of global variables specifically and others not, among other little things like anything in gamedev that you’d have to figure out along the way.
The code would look something like:
var globalSaturationString = “globalSaturation”;
if(shader editor adds an underscore to global variables) globalSaturationString = “_globalSaturation”;
Shader.SetGlobalFloat(globalSaturationString, desiredSaturationValue);
Edit: I’ll go ahead and link what your variable setups would need to be in shader graph since i’ve already gone this far:
Note: The REFERENCE name is what matters, not the default Name itself.
So any object using a material that’s derived from this shader would have this saturation. Any object using a standard shader, or a different custom shader with a different global variable for its saturation would have a differnt saturation.
If you wanted to get tricky with this shader, and create custom switches so that you could have one uber shader, and several global variables affecting several “layers” of objects, that would be entirely possible as well.
It sounds like for what you’re wanting to do with custom visuals for certain objects, learning some shader tricks would go a long way.
By enabling bloom and adding unique global variable multipliers to diffuse you could obtain custom bloom settings for layers, custom opacity settings, you could even move the location of objects or get wavey distortions with vertex offsets so long as it didn’t pertain to object collision.