Give Page Feedback | API

Streamable Grids - Multi-Chunking

Multi-Chunking is a powerful technique that allows you to split the assets related to a Cell into multiple Asset Chunks, which allows for more performant loading by reducing the number of assets that need to be loaded with a single load operation.

--Upgrade Note--
Multi-Chunking is a new feature, so don't worry if you don't recognize it!

Why Use Multi-Chunking?

Imagine a scenario where you have thousands of assets that need to be loaded for a specific Streamable Grid Cell. The Cell could be part of a larger forest, for example. If you were to place all of the tree game objects as children of a single Asset Chunk and then tried to load that Asset Chunk, the overhead of integrating every single tree asset into the main thread would likely strangle your game's CPU resources and cause a significant drop in FPS.

Multi-Chunking allows you to split a Cell up into multiple Asset Chunks and load them in separate operations. The end result is an Asset Chunk Set, with each Asset Chunk representing one part of a larger, more complex Cell.

Multi-Chunking Limits

For some Assets, multi-chunking cannot be used. For instance, Unity Terrain cannot be split up into chunks. The only solution for reducing the loading overhead of a Terrain is to slice the terrain into smaller terrains. Actually, I think my creator has another product to do just that . . .

Shameless Plug: View Terra Slicer Info Now!

In addition, while each Cell on a Streamable Grid can usually have a unique number of Chunks, when the Grid is sufficiently large (> 10,000 Cells), all Cells must have the same number of Chunks (otherwise the memory overhead of storing how many chunks each Cell has would be far too great).

Enabling & Configuring Multi-Chunking

Multi-Chunking can be enabled via the Use Multi-Chunking setting within an LOD Group's Multi-Chunking window. Once enabled, you can either set all Chunks to use a specific value by using the 'Set All Chunks To Value' button, or set each Cell's Chunk Number individually via the Visual Grid (note, this Visual Grid also shows you the dimensions of the Streamable Grid and enabled/disabled state of cells, however these settings are only editable within the Global Main Settings window).

There is no limit to the number of Chunks that can be used, however note that if you set a Cell up to use specific number of Chunks, Asset Chunks for each Chunk must exist or else errors will be thrown at runtime and while using the World Designer tool.

Generally speaking, multi-chunking is best used in combination with the World Designer tool. With this tool, you can specify the max number of child objects that can be parented to a single Asset Chunk for a specific LOD Group. As you remove and/or add child objects via different operations, the World Designer tool can (either automatically or manually) evaluate each Cell to determine the number of child objects across all existing Asset Chunks. It can then use that data to calculate the number of Asset Chunks needed, deleting and creating Chunk Assets accordingly and setting the Chunk Value for the Cell on the Streamable Grid.

In this way, you do not have to try and predict the number of Chunks you will need for any given Cell; the values are instead updated automatically based on the makeup of your Asset Chunks. Additionally, the number of child objects parented to each Asset Chunk will be balanced, resulting in Asset Chunks with equivalent (or nearly equivalent) load overhead.

Multi Chunk Naming

Asset Chunks must adhere to one of two formats found in the Naming Convention Asset being used. These formats are the First Chunk Format (which applies to the first Asset Chunk in the Chunk Set) and the Supplemental Chunk Format (which applies to all other Chunks in the Set). By following these formats, LOD Groups can seamlessly transition between using Multi-Chunking and not using Multi-Chunking (and vice versa), without requiring a renaming of existing Asset Chunks.

You can explore these formats in more detail by looking at the Naming Convention Section from the Scriptable Assets Chapter

I'd Like To Know More