Photographic Scenery for X-Plane Using Ortho4xp

Notes on Installing Photographic Scenery in X-Plane 10/11 Using Ortho4xp

These are notes to remind me of the procedure for installing the required software through to having the photo scenery installed. Note I have Ortho4xp on a different drive to that on which X-Plane is installed so for X-Plane to access this scenery a symbolic link is required. These notes were made using X-Plane 11 but also work with X-Plane 10. These notes assume familiarity with X-Plane and navigating folders etc.

Links for downloads
  1. Python -
  2. Ortho4xp -
  3. HD Mesh Scenery V3 -
  4. Height map data -

  1. Install Python.  Check if Python is already installed by running a command prompt and type python - enter. If it is installed it will return the details.
  2. Download, extract and place the Ortho4xp folder wherever you like (no install required). I have Ortho4xp on E: and X-Plane on F:
  3. Install the relevant HD Mesh areas for the photo scenery you wish to install.
  4. Download Height Data for the areas you want.
  5. Set path to X-Plane Custom Scenery in Ortho4Xp.cfg file.
  6. Create a Symbolic link in X-Plane pointing to where the Ortho4xp overlays are.
  7. Create shortcut to run Ortho4xp for example: E:\Ortho4XP\bin\Ortho4XP_v120b.exe 
  8. Run Orth4XP

Set path in Ortho4XP.ini to point to X-Plane Custom Scenery folder

Open the Ortho4XP.ini which is in the Ortho4XP folder. 
Change the line (28):
Custom_scenery_dir="/media/oscarpilote/X-Plane-ssd/X-Plane-10/Custom Scenery" 
To point to your X-Plane Custom Scenery file, for example:
Custom_scenery_dir="F:\\X-Plane 11\\Custom Scenery"

HD Mesh at

HD Mesh Areas

Comprehensive instructions are given on the download page:

Place the extracted files in:
\X-Plane 11\Custom Scenery\zzz_hd_global_scenery3_europe\Earth nav data

HD Mesh .dsf files from

Height Data from viewfinderpanoramas

Height Data at

Height Data - h

Download and extract the areas you want and put all the .hgt files in a folder of choice. I have mine in E:\Heightmaps which is a different drive to my X-Plane install.

Run Ortho4XP

Orth4xp Program


Leave all settings as they are apart from those in the red boxes.

1) Working from the top down, start by clicking Earth Tile Map at the very top. On the tile map below, there are tiles in blue which have already been installed. Select a new tile by clicking to place the yellow box around it.

On the left column note the lat/lon reading, in this example +52-003. You can close or leave the Earth Tile Map open. Go back to the Ortho4XP window and ensure the correct lat/lon readings are in their respective boxes.

Earth Tile Map - select a tile

2) In Provider and Zoomlevel you can leave Base source: as BI and then choose the Base zoomlevel: from the drop down box. Default is 16 but for VFR I found this too pixalated at low altitude. Level 17 is considerably better but of course is a much bigger size (up to about 4GB). It may be worth experimenting with this to choose a compromise for your own visual and storage space requirements.

NOTE: As each of the Step buttons are clicked (yellow boxes) the right of the Ortho4XP window will display the actions taking place. See below for an example read out of the actions.

3) Click Step 1: Build vector data

4) Step 2: Build base mesh. First click the Custome DEM file check box and Navigate to your height maps folder and select the .hgt file for the lat/lon (in this example N52W003.hgt). Then click Step 2: Build base mesh.

5) Click Step 2.5: Build Masks and wait for the DSF/Masks progress bar to finish

6) Click Step 3: Build Tile and wait for Download Progress/Convert progress bars to complete. This is the longest step and can take several minutes.

7) Build Overlay. First click the Custom overlay dir: check box and navigate to the X-Plane Custom Scenery and select the zzz_hd_global_scenery3_europe in scenery_packs.ini (this is mine, select yours). Click (Build overlays).

8) Click Earth tile map at the top, or go to it if you left it open and do a refresh. The tile you chose at the start should show in a light blue colour. Do a ctrl+click and it should go a dark blue.

9) Edit your scenery_packs.ini file and add the entry (adjusting lat/lon as necessary).

SCENERY_PACK Custom Scenery/zOrtho4XP_+52-003

Example scenery_packs.cfg file

1000 Version

SCENERY_PACK Custom Scenery/LOWI Demo Area/
SCENERY_PACK Custom Scenery/Aerosoft - EBBR Brussels/
SCENERY_PACK Custom Scenery/Aerosoft - LFMN Nice Cote d Azur X/
SCENERY_PACK Custom Scenery/Aerosoft - LFPO Paris Orly/
SCENERY_PACK Custom Scenery/LFPG Paris - Charles de Gaulle/
SCENERY_PACK Custom Scenery/Aerosoft - EDDF Frankfurt/
SCENERY_PACK Custom Scenery/Aerosoft - EDLP Paderborn-Lippstadt/
SCENERY_PACK Custom Scenery/Aerosoft - LPFR Faro/
SCENERY_PACK Custom Scenery/Aerosoft - LEMD Madrid/
SCENERY_PACK Custom Scenery/Aerosoft - LSGG Genf/
SCENERY_PACK Custom Scenery/Aerosoft - EGBB Birmingham/
SCENERY_PACK Custom Scenery/Aerosoft - EGKK London-Gatwick/
SCENERY_PACK Custom Scenery/Aerosoft - EGLL Heathrow/
SCENERY_PACK Custom Scenery/Aerosoft - EGPF Glasgow/
SCENERY_PACK Custom Scenery/Aerosoft - EGSS London-Stansted/
SCENERY_PACK Custom Scenery/Global Airports/
SCENERY_PACK Custom Scenery/EGFH Swansea/
SCENERY_PACK Custom Scenery/OpenSceneryX/
SCENERY_PACK Custom Scenery/yOrtho4XP_Overlays/
SCENERY_PACK Custom Scenery/zOrtho4XP_+50+000/
SCENERY_PACK Custom Scenery/zOrtho4XP_+50-001/
SCENERY_PACK Custom Scenery/zOrtho4XP_+50-002/
SCENERY_PACK Custom Scenery/zOrtho4XP_+50-003/
SCENERY_PACK Custom Scenery/zOrtho4XP_+50-004/
SCENERY_PACK Custom Scenery/zOrtho4XP_+50-005/
SCENERY_PACK Custom Scenery/zOrtho4XP_+50-006/
SCENERY_PACK Custom Scenery/zOrtho4XP_+51-001/
SCENERY_PACK Custom Scenery/zOrtho4XP_+51-002/
SCENERY_PACK Custom Scenery/zOrtho4XP_+51-003/
SCENERY_PACK Custom Scenery/zOrtho4XP_+51-004/
SCENERY_PACK Custom Scenery/zOrtho4XP_+51-005/
SCENERY_PACK Custom Scenery/zOrtho4XP_+51-006/
SCENERY_PACK Custom Scenery/zOrtho4XP_+52-001/
SCENERY_PACK Custom Scenery/zOrtho4XP_+52-002/
SCENERY_PACK Custom Scenery/zOrtho4XP_+52-003/
SCENERY_PACK Custom Scenery/zOrtho4XP_+52-004/
SCENERY_PACK Custom Scenery/zOrtho4XP_+52-005/
SCENERY_PACK Custom Scenery/zOrtho4XP_+52-006/
SCENERY_PACK Custom Scenery/zOrtho4XP_+53-002/
SCENERY_PACK Custom Scenery/zOrtho4XP_+53-003/
SCENERY_PACK Custom Scenery/zOrtho4XP_+53-004/
SCENERY_PACK Custom Scenery/zOrtho4XP_+53-005/
SCENERY_PACK Custom Scenery/zOrtho4XP_+54-002/
SCENERY_PACK Custom Scenery/zOrtho4XP_+54-003/
SCENERY_PACK Custom Scenery/zOrtho4XP_+54-004/
SCENERY_PACK Custom Scenery/zOrtho4XP_+54-005/
SCENERY_PACK Custom Scenery/zOrtho4XP_-46+166/
SCENERY_PACK_DISABLED Custom Scenery/zzz_hd_global_scenery3_asia/
SCENERY_PACK Custom Scenery/zzz_hd_global_scenery3_europe/
SCENERY_PACK_DISABLED Custom Scenery/zzz_new_zealand/

Example read out of the actions for the Build data processes


Step 1 : Building OSM and patch data for tile +52-006 :

-> Downloading airport and water/ground boundary data from Openstreetmap :
Recycling OSM data for way["aeroway"="aerodrome"]
A total of 0 node(s) and 0 way(s).
Recycling OSM data for rel["aeroway"="aerodrome"]
A total of 0 node(s) and 0 relation(s).
Recycling OSM data for way["aeroway"="heliport"]
A total of 0 node(s) and 0 way(s).
Recycling OSM data for way["natural"="water"]["tidal"!="yes"]
A total of 0 node(s) and 0 way(s).
Recycling OSM data for rel["natural"="water"]["tidal"!="yes"]
A total of 0 node(s) and 0 relation(s).
Recycling OSM data for way["waterway"="riverbank"]
A total of 0 node(s) and 0 way(s).
Recycling OSM data for rel["waterway"="riverbank"]
A total of 0 node(s) and 0 relation(s).
Recycling OSM data for way["natural"="coastline"]
A total of 3017 node(s) and 17 way(s).
Recycling OSM data for way["waterway"="dock"]
A total of 0 node(s) and 0 way(s).
-> process of the associated data completed : 3017 new nodes.
-> Cutting off of too long edges,
-> Adding patch data for the mesh,
-> Adding of edges related to the orthophoto grid and computation of
their intersections with OSM edges,
Removal of obsolete edges,
Removal of obsolete nodes,
-> Transcription of the updated data to the file ..\Tiles\zOrtho4XP_+52-006\Data+52-006.poly
Remain 38468 edges in total.

Completed in 0.84sec.

Step 2 : Building mesh for tile +52-006 :

-> Loading of elevation data.
-> Start of the mesh algorithm Triangle4XP :

Loading altitudes from DEM file.

Computing curvatures from altitudes.

Constructing Delaunay triangulation by divide-and-conquer method.

Recovering segments in Delaunay triangulation.

Spreading regional attributes.

Adding Steiner points to enforce quality.

Computing altitude and normal maps.

Node file ..\Tiles\zOrtho4XP_+52-006\Data+52-006.1.node written to disk.

Tri file ..\Tiles\zOrtho4XP_+52-006\Data+52-006.1.ele written to disk.


Input vertices: 24640

Input segments: 38468

Input holes: 0

Mesh vertices: 25,223


Mesh triangles: ---> 41,860 <---


Mesh edges: 67082

Mesh exterior boundary edges: 8584

Mesh interior boundary edges: 30046

Mesh subsegments (constrained edges): 38630

-> Loading of the mesh computed by Triangle4XP.
-> Flattening of oceans and seas, smoothing of lakes and rivers (1st pass)
-> Flattening of airports and treatment of patches, smoothing (2nd pass).
-> Writing of the final mesh to the file ..\Tiles\zOrtho4XP_+52-006\Data+52-006.mesh

Completed in 0.87sec.

Step 2.5 : Building Masks for Tile +52-006 :

Constructing binary mask for sea water / ground from mesh file ..\Tiles\zOrtho4XP_+52-006\Data+52-006.mesh
Blur of size masks_width applied to the binary mask...
Purging old masks files if needed.
Spitting tile mask into ZL14 based submasks and skipping black ones.

Completed in 58.74sec.

Step 3 : Building Tile +52-006 :

Start of the texture attribution process...
-> Computing the required pool division
Pool division = 8
Use of an alpha mask.
Use of an alpha mask.
Use of an alpha mask.
Use of an alpha mask.
Use of an alpha mask.
Use of an alpha mask.
Use of an alpha mask.
Use of an alpha mask.
Downloading missing orthophoto 42704_63344_BI17.jpg
Encoding of the DSF file...
Final nbr of points : 30789
Final nbr of cross pool tris: 3404
Size of DEFN atom : 663 bytes.
Size of GEOD atom : 349466 bytes.
Size of CMDS atom : 292982 bytes.
DSF file encoded, total size is : 643233 bytes.
Downloading missing orthophoto 43280_63696_BI17.jpg
Converting orthophoto to build texture
Downloading missing orthophoto 43280_63680_BI17.jpg
Converting orthophoto to build texture
Downloading missing orthophoto 43280_63712_BI17.jpg
Downloading missing orthophoto 43264_63696_BI17.jpg
Converting orthophoto to build texture
Converting orthophoto to build texture
Downloading missing orthophoto 43264_63680_BI17.jpg
Downloading missing orthophoto 43264_63712_BI17.jpg
Converting orthophoto to build texture
Converting orthophoto to build texture
Downloading missing orthophoto 42720_63344_BI17.jpg
Converting orthophoto to build texture
Download of textures completed.
Converting orthophoto to build texture
Waiting for all convert threads to finish.
Conversion of textures completed.

Completed in 27.07sec.

Independent Step : Building of an Overlay DSF from third party data :

-> Making a copy of the original overlay DSF in tmp dir
-> The original DSF is a 7z archive, uncompressing...
-> Converting the copy to text format
Converting ..\tmp\+52-006.dsf from DSF to text as ..\tmp\tmp_dsf.txt

File ..\tmp\+52-006.dsf had 22 ter, 0 obj, 4 pol, 4 net.

Converted ..\tmp\+52-006.dsf to ..\tmp\tmp_dsf.txt

-> Expurging the mesh and the beach polygons from the text DSF
-> Converting back the text DSF to binary format
Converting ..\tmp\tmp_dsf_without_mesh.txt from text to DSF as ..\tmp\tmp_dsf_without_mesh.dsf

Scanning for dimension properties...

Got dimension properties, establishing file writer...

Got entire file, processing and creating DSF.

Vertices: total = 0, strip = 0, fan = 0.

Primitives: total = 0, strip = 0, fan = 0.

Contiguous vertices: 0. Individual vertices: 0

3-d Objs pool starts at: 0

Poly pool depth 2 starts at 0

next pool would be at 1

Total cross-pool primitives: 0. Total range primitives: 0. Total enumerated primitives: 0.

Converted ..\tmp\tmp_dsf_without_mesh.txt to ..\tmp\tmp_dsf_without_mesh.dsf

-> Coping the final overlay DSF in ..\yOrtho4XP_Overlays\Earth nav data\+50-010

Completed in 0.95sec.