Nope not at all, your code works amazingly well! Hardly any measurable impact on performance for a single object. I thought calling GetWaveHeight and recreating each wave cluster for each test point on Tick would be more taxing, but it works great even with multiple actors!
Ah yes, so about that bug… Well it ended up being something I totally overlooked. The default value of a variable was reset to 0 within a migrated blueprint, which shouldn’t happen, it was within the blueprint itself not in the scene. Migrating between projects has turned up a couple of issues in the past as well, should have expected it… The value controlled how often to update the Skylight capture, which is very costly performance wise. Instead of updating every 10 minutes it was updating every Tick, causing a CPU stall every other frame preventing the BuoyancyComponent/OceanManager from executing.
Yes it was a bit of a stupid mistake on my part (just a little), but good news is I now know how to use the profiler properly! So something good resulted from my utter failure.
Big thanks for everything though, it is working great! In the process of putting together a drivable boat right now, it’s a lot of fun!