OK, I figured out a way to get some very nice caustics over an entire map with a single light function. There are settings for the brightness above the water, and below. The planar skewing method is good for lighting particles, and providing a separate method if for any reason you want to opt out of the light function method and hardcode the caustics into the individual materials yourself.
I’m nearing the point where I can say the light function is ready for a Marketplace release. But the final package will feature more than just a light function, I’ll also have to make sure the material function method is just as viable. There will need to be multiple functions, not just for the caustics, but also for the coloring effect because unfortunately light functions do not support coloring in and of themselves: if you want your underwater environment to be blue, it needs to be shaded that way per-object. On top of that, I want to include a Blueprint to make the setup of caustics much easier. Right now there’s a little tricky and unusual math involved because of the way light functions operate. For whatever reason, the light function material does not scale the brightness beyond what is defined in the light itself: the values get clamped. And since the caustics need to be brighter than the surface, the light brightness is actually the caustics brightness while the actual environment light needs to be scaled in the function. You have to work backwards with the math. Again, I’ll do the best I can to simplify before release.