Create custom flight simulator scenery with the right SDK, accurate source data, exclusions, packaging, testing and fixes for common errors.
For flight simulators generally, including Microsoft Flight Simulator 2020 and 2024, X-Plane, FSX and Prepar3D, create custom scenery by choosing one target and layer, using its PC editor or SDK, placing accurately georeferenced data and optimised assets, adding exclusions, then compiling, packaging and testing the result separately from other add-ons.
What type of custom scenery are you making?
Start with one clearly defined scenery layer because an airport, landmark and terrain mesh use different source data and build tools.
- Airport scenery: runways, taxiways, aprons, parking positions, lighting, signs, buildings, ground markings and operational taxi networks.
- Landmarks: individual buildings, bridges, towers, ports and other accurately positioned 3D objects.
- Aerial or orthophoto scenery: licensed, georeferenced ground imagery divided into suitable tiles and resolutions.
- Terrain mesh: elevation data that forms hills, valleys, coastlines and airport ground contours. A ground image does not change elevation.
- Overlays: roads, vegetation, buildings and object placements drawn above terrain or imagery.
Airport projects often combine several of these layers, but build the runway and terrain foundation before modelling terminals. For aerial projects, our explanation of georeferencing, image tiles, elevation and scenery priority covers the issues that cause shifted imagery and visible tile seams.
Which scenery editor and SDK should you use?
Use an editor, exporter and compiler made for the exact simulator family and major version you intend to support.
Our comparison of airport editors, SDK components and modelling tools can help you choose a compatible toolchain before starting the project.
| Target simulator | Typical authoring method | Output and main gotcha |
|---|---|---|
| Microsoft Flight Simulator 2020 or 2024 | Use Developer Mode, the matching SDK project system and Scenery Editor. Our PC setup for Developer Mode, projects and package builds explains the initial configuration. | Build a package and test the compiled copy through the PC installation's Community folder. Do not assume that a package tested only in MSFS 2020 will behave identically in MSFS 2024, or vice versa. |
| X-Plane | WorldEditor, usually called WED, handles airports, taxi networks and object placement. Custom models require an exporter supported by the target X-Plane version. | Export the package into Custom Scenery. Check scenery_packs.ini; airports and overlays normally need to sit above competing mesh packages. |
| FSX | Use the FSX SDK and its appropriate airport, placement, model or terrain compiler. The detailed FSX asset, BGL and packaging workflow covers these older tools. | Compile scenery into .bgl files and install it through a supported scenery folder and library entry. FSX source projects are not MSFS packages. |
| Prepar3D | Use the SDK and compiler belonging to the Prepar3D generation being targeted. | Deploy through the supported scenery-library or add-on method. Mixing compilers from different Prepar3D generations can produce build errors or missing features. |
Normal scenery authoring and direct package testing require a PC. Microsoft Flight Simulator 2024 also runs on Xbox Series X|S, PlayStation 5 and PS5 Pro, while MSFS 2020 remains a PC and Xbox product, but those console editions do not provide the PC's editable SDK project and Community-folder workflow.
Do you need to write or make code for custom scenery?
Most scenery does not require programming code because visual editors generate placements, airport records and package definitions for you.
You may still encounter XML, JSON or simulator-specific text files. These normally describe package metadata, object placement or dependencies rather than executable behaviour. FSX developers sometimes edit placement XML directly, while modern editors usually create equivalent data through their interface.
Actual programming is needed only for features such as custom interactive systems, specialised animations or simulator-specific logic. It is not required for a basic airport, landmark, orthophoto layer or terrain package, and code copied from another simulator family will not make its scenery format compatible.
How do you build custom flight simulator scenery step by step?
A reliable scenery project is built from the ground layer upwards, with source files kept separate from compiled test files.
- Define one target. Record the simulator, major version, location, airport identifier where applicable and exact coverage area. One set of source assets can sometimes be adapted, but one compiled package cannot serve every simulator.
- Collect lawful reference data. Gather coordinates, runway dimensions, elevations and photographs from sources that permit your intended use. Check coordinate order, hemisphere signs, units and datum before placing anything. A runway number is not a sufficiently precise heading reference.
- Create a clean project structure. Separate editable models, textures, references, package sources, build output and the installed test copy. Never modify stock simulator files directly.
- Build the foundation. For an airport, place runway endpoints, taxiways, aprons and elevation controls first. For terrain, align imagery and elevation tiles before adding roads, vegetation or buildings.
- Add operational airport data. Visual pavement alone does not give AI aircraft or ATC a usable route. Connect taxi paths, runway starts, parking positions and hold points using the target editor's airport network tools.
- Create optimised assets. Model at real-world scale, set origins and pivots deliberately, fix reversed normals, map textures correctly and use materials supported by the simulator. Add level-of-detail models where supported and avoid collision geometry on objects that never need it.
- Control stock scenery. Add the narrowest exclusions needed to remove replaced buildings, vegetation or airport elements. Large exclusions can erase neighbouring scenery; missing exclusions create doubled terminals, trees through aprons and overlapping runways.
- Validate and build. Use the target simulator's exporter or compiler and resolve validation errors. Read the build log for missing textures, malformed paths, unsupported materials and assets that were not copied into the package.
- Install the built release. Remove the previous test copy before installing the new build. Test the compiled or exported package, not the live source project, because development tools can mask missing release files.
How do you make sure custom scenery works?
Test the package by itself after a full simulator restart, then add potentially conflicting scenery back one package at a time.
- Inspect the airport or object from ground level and from every normal arrival direction.
- Check daytime, darkness and several viewing distances for lighting, texture and level-of-detail faults.
- Taxi across joins between aprons, runways and surrounding terrain to find bumps, trenches and incorrect surface types.
- Test AI or ATC routing if the project changes parking positions, runway starts or taxi networks.
- Confirm that deleting the package restores the stock scenery without leaving modified default files behind.
- Repeat the test with nearby airports, global overlays, mesh and orthophoto packages enabled individually.
A mistake we see constantly is testing only with a full add-on collection enabled. That makes it difficult to tell whether the new package is broken or another package is drawing the same airport, terrain tile or object.
Why does custom scenery not appear or look correct?
When scenery fails, check installation structure, build output and conflicts before rebuilding every model.
| Symptom | Likely cause | Practical fix |
|---|---|---|
| Nothing appears | The source project was installed instead of the built package, the folder is nested too deeply, the scenery is disabled, or the coordinates are wrong. | Check the package root, simulator log and build log. Confirm latitude, longitude and hemisphere signs using a simple test object. |
| Two airports or buildings overlap | Stock scenery or another add-on is still drawing the same feature. | Test the package alone, identify the conflict and use narrowly targeted exclusions. Do not erase an entire surrounding area to hide one building. |
| Objects float or sink | The model origin is misplaced, altitude is interpreted incorrectly, or a mesh package has changed the ground level. | Check the object's origin and whether placement uses ground-relative or mean-sea-level altitude. Retest without other mesh. |
| Cliffs, spikes or trenches appear | Elevation sources disagree, an airport flatten conflicts with mesh, or adjacent tiles do not meet cleanly. | Inspect elevation boundaries and disable competing terrain packages. Use flattening only where the target simulator requires it. |
| Textures are missing, blurred or replaced by warning colours | A texture was not exported, its path or capitalisation differs, or its material is unsupported. | Verify every release texture against the model references and package output. Test on a clean installation rather than relying on cached development files. |
| AI aircraft ignore taxiways | The visible pavement lacks a connected operational network, suitable parking links or runway starts. | Validate path connections, hold points, parking types and runway links in the airport editor. |
| Frame rate falls near the scenery | Too many draw calls, unique materials, high-resolution textures, lights, polygons or collision surfaces are loaded. | Combine sensible materials, remove unseen geometry, introduce level-of-detail models and limit collision to surfaces that need it. |
Can you redistribute imagery, models and stock objects?
You may redistribute an asset only when its licence permits the intended modification and distribution.
Publicly viewable map imagery and downloadable 3D models are not automatically cleared for use in a scenery archive. Keep the licence and any required attribution with the project, and exclude unlicensed reference images from the release.
Referencing a stock library object through the simulator's supported library system is different from extracting and redistributing that object. If a third-party library is required, declare it as a dependency rather than silently copying its files.
How should finished scenery be packaged?
Release only the simulator-ready package, documentation and permitted dependencies needed by the end user.
- Use a unique, stable package identifier and avoid renaming it between minor releases.
- State the supported simulator, major version, covered location and any known conflicts.
- Include concise installation, load-order and removal instructions appropriate to that simulator.
- List required libraries or base packages rather than assuming the user already has them.
- Remove source models, unlicensed references, caches, logs and temporary compiler output.
- Install the final archive on a clean test setup. A release can work from the development project yet fail after packaging because one texture or library reference was omitted.