Hey all, I’m Matt, the environment + lighting artist on the project as well as the principal programmer. My background in the game industry is actually 100% programming, but going indie has allowed me to do art as well. Jumping into this thread so I can comment on all of the above and answer any questions.
Good question! AFAIK, there’s no in-engine support for realtime caustics because calculating them is quite costly – if you have not seen it yet, check out this excellent talk by Ryan Brucks (I linked to the part about caustics). It shows some of the best caustics I’ve seen anyone do in UE4, using a method that generates a flipbook texture so performance isn’t too crazy, and even getting a volumetric appearance with some UV tricks.
Our caustics are a fairly simple light function. We use the standard method of using Motion_4WayChaos with a premade caustic texture to create visual chaos. However, I found this method to look a bit too “obvious” on its own (I don’t like how my eye can track any single texture and follow it along a predictable trajectory), so we augmented it by also 4-way panning a white noise texture that subtly offsets the coordinates of the main caustic texture. This creates unpredictable movements and I think it makes the effect mesmerizing to look at without catching on that you’re seeing a bunch of static textures being panned. On top of this there’s a bit of tweaking done with CheapContrast and alpha thresholds.
For comparison, here are some tweaked caustics on an empty landscape.
Default Motion_4WayChaos. Not too bad IMO, but notice how you can follow each texture with your eye.
With some UV distortion applied (based on a very low-frequency white noise texture that is also being chaos-panned). It’s a little less predictable.
For demonstration purposes, here’s what it’d look like if you cranked up the tiling on the noise texture. You start to see more UV “swimming.”
(Side note: these images also demonstrate our water post process, which causes the red spectrum to fade out over a distance, emulating how light works underwater. But that’s probably a subject for another post…)