Thanks for the reply, I appreciate it and will definitely watch the videos. I was talking with someone else via email a little while back and they asked how WorldStreamer works as well and this is what I had wrote to them below, I apologize it is a little long and there may be a few sentenses that may not pertain exactly, but I believe I got a pretty solid bit of the details in here.
My main concern with whatever I used ends up being the fact that my game is an online persistent world RPG, so I don’t think / know if floating point fixes would really work for my game, as things can’t really just be moved around willy nilly like most fixes do. I am trying to make my game as modular as I can, terrain wise as well, so I can just start out with X size and then expand on it as I discover ways to keep the world seamlessly loading but also not have to worry about the distance from 0,0,0, but that might end up having to come from some sort of multiserver solution at some point.
"With WorldStreamer you are to have to terrain pre-sliced and you put in size of each slice that you already have. What it actually does create your different streaming layers. I use WorldCreater stand alone for my terrain which has a sync tool that brings the terrain in from WorldCreator and automatically slices it for you when it imports, but of course not everyone has that. My map is 10248x10248 currently cut into 1600 256x256 chunks of terrain. Yes, a lot, lol, but It gives me a lot of flexibility in how much or how little I want to load because the loading grid system is dynamic. So for instance If I get on my drag and fly upward I can have it trigger to extend the grids loading range from 3x3 to 4x4 or 5x5, etc and vice versa, when I land it goes back to 3x3. So within the SceneSplitter, I put in that my terrain size is 256x256, then I create my layers. What you do is prefix all of your items in game with something (which is why he mentions another free tool which can auto rename with pre_ or _suffix based on different things).
Each prefix becomes a layer. So all my terrain Ter_, so it is Ter_WC_Terrain_01x01x01 or whatever, so that takes care of my terrain layer (for performance purposes terrain is always by itself when loading or unloading) My next layer is my mesh lod which is LOD_Ter_WC_etc, then for the time being I had My whole castle as another layer by itself just because it was the only thing really else that I had in the game at the time name Castle_Castle. So that would be 3. The terrain layer gets set more or less as the primary, it will always load that first when the game is loading, hopefully before you player loads, lol. It has a Neighboring_terrain setting/script on it which I believe is used as the connecting point for the grid system for loading and what not, but I am not 100% sure, never really looked through that file. When you tell the scene splitter to do its thing, it takes each layer and all the objects within it and then based on each terrain chunk exports every 256x256 area as its own scene. So each layer would end up with a folder based on the layer name and in there ends up being one scene for every 256x256 area but only containing what was in that particular layer based on its name, and which scene it is in is of course based on its location and which chunk it was in. Along with that was a single prefab with a script on which contained a list of all of the scenes within that layer and those prefabs are what you put in the scene and attach to the rest of the components to make the system work. The way it named each scene dictated its position in world space as seen here. 2018-04-25 - 19.25.27 ~ Cropped Capture - Imgur This allowed everything within a particular chunk of terrain to be able to be loaded in the right place, but at different times.
In your grid loading settings, you would say I want the terrain layer to load only 1x1 grid space from me, which would be the one I am on, and then the first set of grid spaces around me but nothing further than that. The next layer is my LOD mesh terrain, using the Ring LOD system it works by setting a minimum and maximum loading range. So I have it set to I want it to only load in grid spaces 2-3, so that terrain is the first grid space, but then 2nd and 3rd grid spaces are the LOD. If you have more layers, say a large and small object layer, you would set it that you want LargeObject_streaminglayer_ to begin loading as far away as 3x3 grid spaces, but you only want SmallObject_streaminglayer_ to load then you are 1x1 grid spaces away. Even though one particular grid space within the world might be loaded, it might have 4-5 different scenes of the same area, each containing different objects depending on its streaming layer.
It works really well as long as you take the time to prepare all your assets by naming them in the hierarchy properly. The only downside other than the extra work is having extra size on the client because of all the extra scenes, even though each one might only have a few objects in there by themselves, each scene file takes up space. Well worth it for the performance gain you get though. Mix that with the trigger loading system and you can have some huge open areas that look populated (VegetationStudio will let you prebake billboard foliage and attach it to each chunk of the lod, but use the real stuff on terrain when you are close to it) but then unload a bunch of that when you enter an enclosed area with the trigger and have super detailed interiors.
The way it tries to combat too much loading at a single time if you cross the threshold into a new grid space is simply allowing you to input a set number of frames for each thing to wait in between its loading, so you have terrain load first frame, wait 2 frames then something else, wait another frame for something else."