Tile Generation
Project Iota is an experimental project meant to demonstrate a tile-based level generation system. Levels under this system are composed of designer-made tiles that are then arranged by an algorithm to create unique play spaces. Project Iota is still under development and is built in Unreal Engine 5. The tile generation algorithm was based on a paper written by Daniel Brewer about Warframe, linked below.

Each level is generated with a given size and tile-set defining the number and types of tiles that will appear in the result. To keep the process smooth for the end-user, the level generator uses Unreal’s libraries to run itself asynchronously. The level generator also features its own collision system built around oriented bounding boxes.
When a designer creates a new tile, an export actor takes all critical information about the tile (such as its bounding boxes and the locations of its exits) and sends it to a data asset file. When level generation begins, all such data assets marked with the requested tile-set are loaded and copied into the generator thread, where they are then used to virtually create the level.
When the level generator completes, the resulting planned tiles can then be loaded by Unreal’s level streaming system to create a live play-space. Players can then teleport into the level and explore.
Generation Algorithm
The actual tile generation algorithm requires only two pieces of information about each tile: its collision bounds, and the locations of its exits, or “portals”. Tiles are stored in memory according to their purpose in the level, such as “start” tiles or “connection” tiles. At the start of generation, a sequence of these types is produced based on the requested level size, and then iterated through with a for-loop.
For each new tile to be placed, the generator runs through all tiles of a requested type and tries placing them. To place a tile, open portals on the new tile are connected with open portals on the last-placed level tile until the new tile does not collide with any existing geometry. Once placed, the new tile is linked to its “parent” and the associated portals are marked closed.
Branching is enabled by extending the list of valid portals to recursively include portals from a tile’s parents, up to a certain length called the branch size. If an open portal on a parent tile is selected as a connection point, all placed children of that tile become part of a new level branch as the generator continues in a different direction.
Finally, the generator also includes an element of randomness in its outputs by shuffling tile and portal lists before traversing them. Random numbers are generated from a seed provided as a parameter, allowing users to re-generate layouts if needed.