Introduction & Tools
To create a landscape in UE4 with the same shape/scale as the real world, we need a DTM (Digital Terrain Model) – a digital representation of the topography of an area of the Earth’s surface.
TerraForm can import DTM files into UE4 at the correct scale to create native UE4 Landscape actors and retain the geographical accuracy, however it is sometimes necessary to do a little preparation before you can import your data.
>> IN SHORT
DTM DATA & TERRAFORM
Terrain data comes from many different sources and, as a result, DTMs come in many different formats with different specifications:
DTM Vs DSM
A DEM (Digital Elevation Model) is the name given to a digital representation of the topography of an area of the Earth’s surface. The data is most commonly collected using RADAR or LIDAR sensors on satellites or aircraft. DEMs come in 2 forms:
DSM (Digital Surface Model)
This is the raw data from the RADAR/LIDAR and is the first reflective surface that bounces a signal back to the satellite/aircraft. It includes stuff like buildings, trees, bridges etc., so it’s not great for creating landscapes in UE4.
DTM (Digital Terrain Model)
This is the edited version of the DSM, where surface features have been removed to leave only the ‘bald’ terrain. This is what we want to use to create landscapes in UE4.
RASTER OR VECTOR
DTMs can be either raster (e.g. a grey scale image where the height of a pixel is given by a shade of grey), or vector (e.g. a .csv file with x, y, and z values that represent the location and altitude of a point in space.). TerraForm currently supports raster DTMs, but we’re working to add support for more data types.
Given the world isn’t flat, geographers/cartographers use different mathematical methods of ‘projecting’ map data in spherical coordinates (measure in degrees latitude/longitude) onto a flat surface in order to make subsequent calculations a little easier. DTM data can however be stored in both spherical and planar coordinate systems.
UE4 uses a set of 3 perpendicular axes (x,y,z), each with the same linear scale (metres, centimetres, feet, inches etc.), known as a Cartesian (planar) projection. Since TerraForm doesn’t currently support re-projection for DTM data, it may be necessary for you to ‘re-project’ your DTM so that it can be used in UE4.
The UTM (Universal Transverse Mercator) projection system provides global coverage and is common to all GIS software. If you’re not familiar with projection systems and don’t need to use a specific Projection/Datum for your project, we recommend using your local UTM zone with a WGS84 datum (origin point).
DTM data comes in many different file formats. TerraForm currently supports DTM data in the industry standard ‘GeoTiff’ format (which all GIS software supports). Depending where your DTM data comes from, you might need to convert it to GeoTiff by exporting it with GIS software.
The Bit-Depth of a raster image refers to the number of computer Bits (1s and 0s) used to store the value of a pixel. 8-Bit files use 28 (256) values, equating to a range of 0 to 255 possible values. If a DTM covers an area with a height range of 500m, an 8-bit file can only represent the values approximately every 2m, which isn’t very accurate at all.
TerraForm uses 32-bit GeoTiff format, with 232 (2,147,483,647) values, which means that sea level to the summit of Mt Everest (8,848m) can be represented with values approximately every 4mm. This is far greater accuracy than almost all DTM data sources, so we’re not losing any accuracy. If your data is not already in 32-Bit format, you will need to convert it.
FLOAT VS INT
Numerical values in binary format can be stored as either integer (“Int”), or decimal (“Float”). Float is short for Floating Point and refers to the placement of the decimal point – i.e. in a float, the decimal point is not in a fixed position. Given the z-value scale of DTM data is most commonly stored in metres, if DTM data values were integers your data would appear stepped (like MineCraft). For this reason, DTM data should always be stored as a float value – in our case a 32-bit float.