I built a tool to fix the Landscape ↔ Cesium seam problem — automatically

Last year I had a project where I needed to create a landscape on top of Cesium terrain. The thing is — streamed terrain can’t be edited. You can’t sculpt it like a normal landscape. So I had a PNG heightmap, imported it into Unreal, and trying to get it to sit seamlessly on the Cesium terrain was a nightmare. Spent days sculpting around the edges just to make it look flush. Still didn’t look perfect.

This year, same requirement came up again. Seamless landscape on Cesium. And I thought — alright, it’s time to just automate this.

So instead of spending days sculpting again, I sat down and built a tool to do it for me.

The idea was simple — Cesium always streams the highest LOD right in front of the camera, so I just sample the terrain at that highest LOD and warp the Unreal Landscape to match it down to the vertex level. No more eyeballing altitude. No more nudging vertices one by one at the border hoping it looks close enough.

Right now the tool conforms directly to the Cesium terrain. Custom heightmap support isn’t in yet — that’s the next feature I’m working on. The idea is to let you bring in your own higher resolution, more accurate terrain data and blend it with the Cesium surface. A lot of users have better data than what Cesium streams, so it makes sense to support that properly.

Then there’s the Z-fighting underneath. Once your landscape sits on top, the Cesium tiles are still rendering below it. So the tool auto-generates a Cartographic Polygon and Raster Overlay to mask them out — no manual placement needed.

And if you’ve ever tried to delete a Cesium raster overlay mid-session — you know it crashes. Hard. So I built a safe teardown path for that too.

The whole thing is one Actor you drop in the level. Assign your landscape, assign your tileset, click conform. That’s it.

I called it GeoLandscape Conformer. It’s on Fab now — link below. Built it for myself first, but figured others are hitting the same wall.

How it works

Fab Link

This looks very close to exactly what I need but I have one questions. If I was working on a concept model of a building site and essentially wanted a completely flat build site, but I wanted the edges of the site to integrate seamlessly with the cesium map data. In other words can you sculpt or flatten areas of the landscape to not hug the cesium terrain?

It hugs, then clip out the cesium overlapped terrain. So no z fighting between landscape and cesium terrain.

Using ConformLandscapeToCesium, I’m unable to conform my Landscape to the Cesium Moon terrain.
When I click Conform, the Landscape_Conform does not conform to the Moon terrain. Instead, it remains flat on top of the original flat Landscape, even though the Cartographic Polygon and Raster Overlay correctly mask out the Moon terrain beneath it. This was the output log:

LogTemp: [GeoLandscapeConformer] Starting conform: Landscape=‘Landscape’ Tileset=‘Cesium Moon’ ZOffset=0.1 Stride=1
LogTemp: Landscape extent: [0, 0] to [1016, 1016] → [1017x1017]
LogTemp: ConformLandscapeToCesium: Waiting for Cesium tiles (up to 60 s)…
LogTemp: ConformLandscapeToCesium: Tiles ready (100.0%). Starting raycast…
LogTemp: ConformLandscapeToCesium: Raycast complete — 0 / 1034289 pixels sampled.
LogTemp: ConformLandscapeToCesium: Finished sampling 0 points. Spawning landscape…
LogLandscape: RegisterLandscapeActorWithProxyInternal: Automatically enabling edit layers on ALandscape: Landscape /Game/cesium_moon.cesium_moon:PersistentLevel.Landscape_5
LogTemp: ConformLandscapeToCesium: New Landscape generated successfully!
LogTemp: ConformLandscapeToCesium: session-only overlay created for ‘Landscape_Excluder’. Activation deferred 1s.
LogTemp: [GeoLandscapeConformer] RefreshClipping: Spawned session overlay for ‘Landscape_Excluder’.
LogTemp: [GeoLandscapeConformer] RefreshClipping: Overlay activated + tileset refreshed on ‘Cesium Moon’.

Here is another try with a smaller Landscape:

LogTemp: [GeoLandscapeConformer] Starting conform: Landscape=‘Landscape’ Tileset=‘Cesium Moon’ ZOffset=0.1 Stride=1
LogTemp: Landscape extent: [0, 0] to [508, 508] → [509x509]
LogTemp: ConformLandscapeToCesium: Waiting for Cesium tiles (up to 60 s)…
LogTemp: ConformLandscapeToCesium: Tiles ready (100.0%). Starting raycast…
LogTemp: ConformLandscapeToCesium: Raycast complete — 0 / 259081 pixels sampled.
LogTemp: ConformLandscapeToCesium: Finished sampling 0 points. Spawning landscape…
LogLandscape: RegisterLandscapeActorWithProxyInternal: Automatically enabling edit layers on ALandscape: Landscape /Game/cesium_moon.cesium_moon:PersistentLevel.Landscape_7
LogTemp: ConformLandscapeToCesium: New Landscape generated successfully!
LogTemp: ConformLandscapeToCesium: session-only overlay created for ‘Landscape_Excluder’. Activation deferred 1s.
LogTemp: [GeoLandscapeConformer] RefreshClipping: Spawned session overlay for ‘Landscape_Excluder’.
LogTemp: [GeoLandscapeConformer] RefreshClipping: Overlay activated + tileset refreshed on ‘Cesium Moon’.

Any ideas about what I might have done wrong?

What version Unreal? Let me test it.

I am using UE 5.7.

It used different elipsoid unlike earth wsg84(Moon=>1737400.0,1737400.0,1737400.0). I just learned how to replicate your project(https://www.youtube.com/watch?v=e1-JP0ROdmk). I wasnt aware user will use on moon. My mistake. Anyway. I will fix that and email it for you as soon as possible. drop me your email.

Its fixed now.

Works great. Thank you!

Check it out on Fab: V2