Custom landscape

This tutorial will teach you creating a landscape with custom aerial imagery, terrain mesh and water bodies.

Noarootsi peninsula in western Estonia will serve as an example area. During the last ice age, Noarootsi was under hundreds of meters of ice. To this day, the land mass continues to rise in rebound. The peninsula used to be a group of small islands, but the rising land merged with mainland in the 19th century. Large parts of the peninsula are still very low, muddy and wet.

The peninsula gets ruined in MSFS by poor Bing imagery, large chucks of which are missing altogether due to clouds.

In this tutorial, you will completely replace aerial imagery for the whole peninsula, add watermasking, and generate digital elevation. The peninsula has a small airstrip (EELU Lyckholm), which you will carve out to leave room for third-party airport modifications.

Placing the runway


Tutorial contents:

Tip
Fully assembled project folder with all files mentioned in this tutorial can be found in noarootsi-landscape example. You can download it from Examples. It also contains build.bat, which automatically processes and builds the project into a package.

1. Create project

First of all, you need to create a new project folder.

Open a command window and type:

msfs project -name noolaero-landscape-noarootsi -type scenery -title "Noarootsi" -id "Noarootsi" -creator "Nool Aerosystems" -scene -aerial -mesh -watermask "C:\Dev\Noarootsi"

This initializes a scenery project at “C:\Dev\Noarootsi”.

Components:

  • scene – for custom-drawn polygons. You can load it later in MSFS editor to make manual changes like remove excessive trees.
  • aerial – for custom aerial imagery tiles created with aerial tool.
  • mesh – for terrain mesh created with elev tool.
  • watermask – for land/water mask created with watermask tool.

2. Add data to the project

Open “C:\Dev\Noarootsi” folder and create “Source” folder.
Place there source files acquired from land survey authorities or companies.

We have already prepared source data for you:
download noarootsi-landscape example and copy contents of its “Source” folder into the “Source” folder you just created.

It contains aerial imagery and elevation data in GeoTIFF format. Lakes, rivers and seas are in three ESRI Shapefiles (they may all come in a single file; splitting them by type is not required).

It also has border.shp shapefile that defines the area we want to cover with custom data, and elev_exclusions.shp shapefile with a polygon that covers Lyckholm airfield to cut a hole into our elevation data and keep stock mesh intact there.


3. Cut aerial imagery into tiles

Now let’s start processing the source data.

First, cut aerial imagery into tiles:

msfs aerial -imagery "C:\Dev\Noarootsi\Source\Aerial Imagery\*.tif" -border "C:\Dev\Noarootsi\Source\border.shp" -res 1.0 "C:\Dev\Noarootsi\PackageSources\aerial\tiles"

If needed, you can now apply color-correction to PNG tiles at “C:\Dev\Noarootsi\PackageSources\aerial\tiles” with any photo editor that supports batch processing. Make sure results get saved as 32 bit PNGs with transparency (RGB + alpha channels).


4. Create height maps

Create height map rectangles from elevation data and save them to MSFS XML file in “mesh” project component:

msfs elev -imagery "C:\Dev\Noarootsi\Source\Elevation\*.tif" -border "C:\Dev\Noarootsi\Source\border.shp" -exclude "C:\Dev\Noarootsi\Source\elev_exclusions.shp" -fillnodata 0 -res 30 "C:\Dev\Noarootsi\PackageSources\mesh\mesh.xml"

Since Noarootsi is very flat, we sample the original 5 m data down to 30 meters. Higher resolution makes no meaningful difference.

We also exclude airports, because runways have baked-in elevations, and unless we provide corrected airports, it’s better to cut them out of our elevation data.


5. Add water masking

Provide water polygons and border shapes, and watermask tool will create appropriate MSFS terrain shapefile:

msfs watermask -water "C:\Dev\Noarootsi\Source\Water bodies\*.shp" -border "C:\Dev\Noarootsi\Source\border.shp" "C:\Dev\Noarootsi\PackageSources\watermask\watermask.shp"

6. Build the project

If you are using cmd.exe, build the project with:

"%MSFS_SDK%\Tools\bin\fspackagetool.exe" noolaero-landscape-noarootsi.xml

Powershell equivalent:

&"$env:MSFS_SDK\Tools\bin\fspackagetool.exe" noolaero-landscape-noarootsi.xml

It takes approximately an hour to build the project into a package.

Once complete, you will find the package inside “C:\Dev\Noarootsi\Output” folder. Move it into MSFS Community folder and start your flight at Lyckholm airfield (EELU) to visit the peninsula.


Summary

The screenshots below show the difference between stock and our custom landscape. Because MSFS has poor imagery for this location, many trees remain misplaced.

Before (1) Before. Large patches of aerial imagery are missing and have been replaced with synthetic textures.
After (2) After. Stock trees still persist and should be edited manually.

MSFS Toolkit does not currently provide an automated tool to place trees. You can use the in-game editor to open the project, load “scene” component, make manual edits and re-build the project to fix the most glaring errors.