With that approach you will still need a light for each different color since all lightfunctions have the limitation of being grayscale.
I am curious about the modulated approach you said you tried. I am not sure what static lighting limitation you are talking about. Could you elaborate a bit please?
I would try projecting the material onto your geometry using a “Worldposition behind translucency” material. Using that technique you can get nice soft colored lighting but you can only affect opaque objects with it.
If you want to project a texture onto a particle system, you need to do the same worldspace projection within the materials in your particle systems. Here is an example. It’s simple world-XY mapping a texture and then using worldposition and dot product to fade the effect. It will always be unshadowed though. Using a random texture from EngineContent.
Notice how you see the center black hole on the lower sphere that is closer to the ground and the higher sphere has a more desaturated blurred color. That is because the material uses the distance from the Actor Z to control the Mip level of the projection texture.
It also masks using a sphere mask and normalmap falloff. This projection is a simple orthographic projection but you could also easily give it some FOV by dividing XY by Z scaled by some factor.
Also this example is a simple texture but it could work with animated material effects as long as you can match the world coordinates to the scale of your ground material UVs or whatever you used to define the grid.
To make this effect work requires placing a box around the entire bounds of the area you want the effect to show up. It is best to use flipped normals on that mesh and check “Disable Depth Test” in the material. One additional depth mask is required to mask foreground geometry that I forgot to paste. If you want to use this I’ll get that too.
To match in a particle system, do the same just using “worldposition” instead of “worldpositionbehindtranslucency”.