Brick & Mortar

How It's Made · Step 8 of 27

Step8

Where the trees, shrubs and scenery came from

· 4 min read

assetslicencesunrealphotoreal

A close view of a dense field of golden wheat seen from above at an angle, with a dark sidebar on the right.

The rule of the look is that only the LEGO is stylised, so the world around the bricks has to come from somewhere real. Nobody on this project can model a Norway spruce from scratch, and we did not want to. This step is the honest inventory: what we use, where it came from, on what terms, and what it cost us to get it into the game.

The sources, family by family

Elevation: NASA SRTM. The tropical maps are built from public elevation data, which is public domain. The game credits it on the credits screen.

Surfaces and rocks: Poly Haven (CC0). Ground, cliffs, forest floor, snow, scree, mud tracks, and a set of rocks, trees and desert plants. Poly Haven publishes under CC0: use for any purpose, including commercial, with no credit required. We credit the authors by name on the credits screen anyway, as a courtesy. A script, scripts/fetch_polyhaven.py, downloads them straight from their public API with no account, and each import keeps its own source.json recording the id and licence.

python scripts/fetch_polyhaven.py snow_field_aerial:arctic_grass rocks_ground_02:arctic_scree
python scripts/fetch_polyhaven.py --models fir_tree_01 dead_tree_trunk stone_01

Trees, plants and cliffs: Quixel Megascans and Megaplants, through Fab. The owner's Epic account holds free library items: 32 Megaplants species (pines, birches, beech, oak, bilberry and more), a slate quarry scene, an old mine, a cliff and boulder field. They fall under Fab's standard licence for free library items, which allows use in commercial games and asks for no attribution, but does not allow redistributing the source assets themselves. 29 species folders are imported. Eight Megascans imperfection scans (dust, scratches, stains) also went into the wear on the LEGO plastic.

The bricks themselves: ours. Every unit, building, wall and ore pile is built from LDraw parts by our own scripts (CC-BY 2.0, credited in the game). We have a firm rule against brick-built vegetation: no LEGO trees or bushes. The Unreal side does all the plants. Real foliage next to bricks is the point.

Anything with a licence we cannot check is skipped. An early catch: some free Fab items are licensed only for Unreal Editor for Fortnite, which would not cover a standalone game. We skip those.

Who clicked what

Agents never sign in anywhere and never accept a licence. The Fab library is behind the owner's Epic account, so the owner added the library items there, and downloaded the imperfection scans through a browser, clicking the licence box each time. Poly Haven needs no account, so a script does that part. Everything that arrives has a source.json, and the credits screen is generated from those files and from our licence table by scripts/make_credits.py, so the screen cannot drift from the documents.

A top-down view of a dark valley with a base clearing, scattered trees and a river running through it
An early forest and clearing: real scans for ground and trees, LEGO for everything that fights.

Getting it into the game

The pipeline is all scripts: fetch, then an editor commandlet that imports the files and builds materials, then a manifest that says which surfaces go into which biome. Trees and plants are instanced, so a forest is a few meshes drawn many times. We keep everything NoCollision and out of the simulation: scenery never changes a height, a cell or a path.

Two facts about our camera shaped the choices. It is a telephoto drone view at 18 degrees field of view, about 111 metres from the ground. A 250-unit tree is roughly 112 pixels tall at the default zoom, and a single leaf is a third of a pixel. Never pay for detail the camera cannot see.

The mistakes

What we would do differently

Try it yourself

Keep a source.json per imported asset (where from, what licence, what date) and generate your credits from those files. When someone asks where a rock came from, the answer takes ten seconds.

Next: Dress the map once - baked PCG scenery, snow and a honeycomb we did not want (28 September 2026)

Start at Step 1All 27 steps

Written afterwards from our project notes and commit history; dated to when the work happened.