Ok so this thread definitely got me thinking that we for sure need a video on this subject. Too much cool stuff to cover.
So I went ahead and made a playground of how I would go about doing this. I’ll record a video in the coming weeks.
https://playground.babylonjs.com/#D4AERS#7
The gist of what’s happening here is that I am using this texture as a projection texture.

I create a scene with a groundplane from a heightmap as in this example:
https://doc.babylonjs.com/babylon101/height_map
I then create 4 boxes, give them different colors, and give them random positions on the ground. Note that there’s a tricky bit in here where I raycast to figure out the height of the ground, to place each box on “top” of the ground.
I create a spotlight and give it the green circle texture as a projection texture, then whenever you pick a mesh that is NOT the ground (so one of the boxes), the light will shift to project over that box.
Note that the texture I’m using is a green circle with black around it. The black masks out the light projection. So the light will only project the green circle.
I know that’s a lot to digest, but hopefully it’s helpful in answering you question.
Again, I’ll do a video on this in the coming weeks!
Thanks for the awesome question!
Cheers!