Ok after a bit of thinking and talking with Woppin, I’m going to make a branch and refactor the plugin a fair bit. Things to do:
- Do away with the ZoneManager Actor
- Replace the zone manager with a UObject that is purely responsible for generating heightmaps/zone mesh data
This class will have a generic base so different mesh generation algorithms can be swapped in and out - WorldManager will contain :
- Array of ZoneManager UObjects
- RuntimeMeshComponents
- Pool of of LOD data structures and corresponding RMC pointers
- Foliage spawning component
This should make multiplayer implementation a lot easier for starters.
It’ll save a shedload of memory as instead of maintaining complete mesh data structures for every LOD + zone, I’ll just have a pool big enough to use for current in-process generation jobs. This should give a 99.5%+ memory saving on the demo scene.
Foliage spawning will now be done at the world level, spawning in a radius around the pawn, this’ll save a ton of draw calls and duplicate ISMC components.
Also going to switch to a single re-used worker thread for mesh data generation instead of spinning up a new one all the time.
Shouldn’t be too big a job (hopefully). There’s only about 1000 lines of real code in the plugin.