How to approach world-composition, level-streaming *and* Landscape?

(Pretext: I know these questions can be googled, but UE is changing rapidly —4.6 just released—, the documentation on these questions is rather sparse and those are more ‘architectural/high level’ questions than simple/technical yes/no/how questions…)

Consider building a new open-world game. Approx. 20x20 km total area would work. No networking/multiplayer is ever planned for that project.

As far as I understand it, using the World Composition feature would allow designing in-editor all “sectors” as different levels/maps that stream in and out seamlessly both at runtime and at edit-time. Is that assumption roughly correct?

The big question for me here is Landscape. Right now I’m thinking the “persistent level” would hold just exactly one single Landscape object 20x20 km off a 8k-by-8k heightmap. So there’s never any (manual) “stitching”/fitting and never more than one Landscape component consuming resources (rather than say up to 4 if the player is at a cross-section in between 4 neighboring streamed sectors/levels)… is that the most reasonable approach?

Furthermore I’m inferring from the latest release notes that somehow Landscape support texture streaming, no idea how that would be worked out in practice. IIRC you assign a single material to the Landscape, but you might have 20+ ground textures (plus the same amount of normals) in total, however in practice no more than say 4 (plus normals) would need be sampled/shaded in any given frame. How to work it out which textures to stream in and out of VRAM seamlessly in a Landscape material context? Any tutorials on this that I may have missed?

Lastly, world position offsetting. Good idea to always enable? Or is that only for worlds that exceed MAX_WORLD_SIZE (previously ~5km, now ~20km in v4.6)?


It depends on your project, if most of the time all landscape surface will be visible, there is no need to cut it to sectors. Usually for big worlds it’s better to subdivide landscape to tiles, so you can stream in/out distant parts of it. There is a tool that helps you import tiled landscape. Community made a nice tutorial about it here: A new, community-hosted Unreal Engine Wiki - Announcements - Epic Developer Community Forums

Tiled landscape will still work as one seamless surface in the editor. Another benefit of subdividing your world to tiles is that in the editor you can load only part of the world and work on it. Big worlds with a lot of content require more machine resources. You want to keep your working set as small as possible to have responsive editor.

Landscape (heightmaps/weightmaps) texture streaming works automatically, you don’t need to think about it. It uses same streaming mechanism as all other textures (based on distance from camera).

All worlds that fit into world bounds (20x20km) should not use origin rebasing. I will disable it by default in next release, as most of the projects will now fit into new world bounds.

Brilliant, thanks a lot ddvlost! Tiling it is, then. Sounds more sensible indeed. Over on Reddit I heard “Engine handles stitching automatically, you don’t need to worry about that” so I guess that’s what you mean by “There is a tool that helps you import tiled landscape”? Will investigate.

Love to hear about the fully automagic streaming, can’t wait to see it in practice :wink:

“All worlds that fit into world bounds (20x20km) should not use origin rebasing. I will disable it by default in next release, as most of the projects will now fit into new world bounds.” — I read in some threads that origin-rebasing is always advisable even in smaller-than-max-worlds for best physics/collision precision at all times, but not sure how dated that advice is? If it’ll be disabled by default in the future, seems safe to go with that for now.

Thanks again for giving me those helpful pointers/directions in such a concise and speedy manner, much appreciated indeed! UE rocks =)