The Landscape - Part 1

Description

For the scale of this project, I decided on a 3 × 3 km map. Ribe itself is quite compact, but I wanted enough room to include the surrounding marshlands and nature so the town doesn't just sit in a vacuum.

If you’ve been to this part of Denmark, you know the terrain is incredibly flat. Historically, the town was built on a slightly elevated sandbank where the sea branched inland, so the elevation changes are subtle but vital.

Even though the terrain is very flat, and the waterways have changed course over time.
I decided to use existing geographic data as a starting point. This helps get the scale and placement roughly correct while also providing a realistic base elevation for the area.

Source: Middelalderbyen Ribe by Ingrid Nielsen, 1985.


To get the scale right, I started with real geographic data from Dataforsyningen.dk. It’s a great way to ensure the placement of the waterways and the town center is grounded in reality.

Wrangling the Data

I used QGIS to export a 32-bit GeoTIFF of the area, but getting that into Unreal was a bit of a headache. I quickly learned that Unreal is picky—it really prefers 16-bit PNG heightmaps.

The first attempt at importing was a mess. The map ended up way too big. I found out that Unreal treats each pixel as one meter, so my 8126-pixel heightmap turned into an 8 km map instead of the 3 km I planned.

Right now, I’m debating whether to scale it down in-engine or just keep the higher resolution. A 3000-pixel map for a 9 km² area feels a bit "crunchy," and I’d prefer to keep the extra detail if I can, as long as it doesn't tank the performance later on.

The Elevation Problem

Finding the "correct" height is another hurdle. There’s a specific formula for calculating elevation in Unreal:

(Max height of your heightmap in meters) × (100 to convert to centimeters) × 0.001953125

but getting the raw range out of QGIS is proving to be a challenge.

On top of that, converting the files in Photoshop tends to flatten the data, so I’ve been manually tweaking the contrast and exposure to bring the "depth" back. I also had to do some manual cleanup:

  • Removing modern roads and structures.

  • Painting the waterways darker (since the data records the water surface, not the actual depth of the riverbed).

Next Steps

I also ran the data through Gaea just to see what happened. It didn't fix my elevation issues, but it added some really nice weathering and smoothing that made the landscape feel more natural.

For now, I’m going to have to "eyeball" the height values until I find a more precise way to translate GIS data into Unreal units. It’s a lot of trial and error, but the foundation is finally there.


Aligning the past with the present. Here I am using QGIS and Photoshop to overlay 17th-century maps of Ribe onto modern heightmaps and terrain data for an accurate Unreal Engine environment.

Before After

From raw data to a playable landscape. This heightmap represents the first step in recreating the Ribe marshlands, combining precise GIS data with manual Photoshop edits to prepare the environment for Gaea and Unreal.

Forrige
Forrige

Searching for Solid Ground

Næste
Næste

The idea: Ribe, Denmark in the 1650s