Temporary UE5.4 solution for city map instanced workflow

Given HISMs/ISMs are great ways to optimize a dense level by reducing draw calls and number-of-actors, I’d like to share a [temporary] approach we’re considering when dealing with building a dense city level with interiors and underground areas.

Eventually we will do an engine upgrade to 5.5+ to take advantage of CellTransformers, but meanwhile we’d like to have some solution to hit performance targets. At a medium level, consider the following approach:

  1. Level artist use nested LevelInstances (containing SM actors) to compose and set-deck the city (streets, props, buildings, rooms, etc.)
  2. Assign these LIs into an editor private DataLayer (which will eventually get stripped from the cook)
  3. During cook/manually trigger an auto-packer to convert SM actors into PLAs
    1. Collect all actors in nested LIs
    2. Duplicate all collected actors (because this workflow should be non-destructive)
    3. Split into cells/buckets by world partition grid
    4. Split into static vs non-static actors
      1. Static actors: Create 1 PLA per cell and assign it into a public DataLayer (so it’ll be included with the cook)
      2. Non-static actors: put into a separate public DataLayer so we can inspect it

As far as I understand, this is essentially what CellTransformer solves. But given where our project is at/engine version, I’d like to hear what folks from Epic and the community think about such an approach.

Thanks!

Joe

Hi Joe,

This is highly similar to how the Cell transformers are working. I’m wondering if you shouldn’t try to backport that code instead. The feature was first introduced at CL#33661896 and the changes are fairly localized. The RCT are executed on the generated cell and are non-destructive. The code was written after the 5.4 stream was created but before the 5.4.0 released. My feeling is that it would be an easy integration for the initial CL. The subsequent revisions of the ISM transformer should also be fairly easy to pick.

I should warn you that we recently found a bug in the RuntimeCellTransformerISM where BPs that are not fully transformed will result in duplicated instances because the destroyed components are recreated by the Simple Construction Script. You should exclude BPs from being inspected for now. For reference: Unreal Engine Issues and Bug Tracker (UE\-350090)

The RCT in FastGeo (5.6) doesn’t have that problem as it’s using a different approach where it analyzes all actors before taking any action. That allows to exclude BPs that are not fully collected (and destroyed). You should not try to backport that one but the Analyze\Decide\Apply workflow can serve as an example on how to fix the original ISM RCT.

Regards,

Martin