Howto:Convert objects from X-Plane
|This article or section contains out-of-date information
To convert Microsoft® Flight Simulator scenery objects, first convert them to X-Plane format using FS2XPlane, then follow the method described below.
These scripts were developed on Linux and should work fine on any Unix system including Mac (note to Windows users).
|Note ModelConverterX also seems well suited for this task, having even more features and is probably easier to set up.|
|Note Objects that are uploaded to the FlightGear Scenery Database (and thus official FG scenery) must be released under the GNU GPL license.
Most X-Plane/MSFS scenery does not comply with this license. Therefore, it cannot be included with the official scenery, unless the author granted you permission to release his work under GNU GPL. Basically, it mostly means that it is for your own private use only.
This Howto assumes that you:
- Are able to use the command line to enter basic commands
- Know where FlightGear, its scenery, and its source code are installed
The conversion consists of three steps, all conveniently handled by scripts:
- Convert the actual 3-D objects from .obj to .ac format using blender,
- Extract position of objects (longitude, latitude, altitude, and heading) from .dsf file(s) and write them to FlightGear's .stg file(s),
- Copy the objects and their textures to the respective tile folders.
Installation and setup
Besides a Unix environment, you'll need the following tools:
- Blender (tested with ver. 2.48a-r3)
- XPlane2blender from Jonathan Harris' page, tested with ver. 3.09
- X-Plane scenery tools
- perl helpers from FlightGear's source code:
Optionally (if the scenery to convert contains .dds textures)
- Convert (from ImageMagick)
mkdir -p ~/fgfs/convert/ cd ~/fgfs/convert/ tar xzf /path/to/xplane2fg.tgz
autoimport.py helper to Blender's scripts folder:
cp ~/fgfs/convert/xplane2fg/lib/autoimport.py ~/.blender/scripts
Install X-Plane tools in
Hack the tools
For the first step - importing objects into blender - we use Jonathan Harris' XPlane2Blender import filter. The .ac export filter shipped with Blender does the export. As we will batch convert a large number of objects, both import and export filters need to be 'hacked' as to not stop and wait for user interaction on warnings etc:
XPlaneImport.py in a text editor, change line 466 (of ver. 3.09) to:
self.verbose = 0
Save this file as
ac3d_export.py (part of Blender, located for example in
/usr/share/blender/scripts/) in a text editor, replace line 823:
Blender.Draw.PupMenu('ERROR: no objects selected')
Make sure you keep indention.
Save this file as
Setting up the environment according to your system
The xplane2fg scripts glue together a number of tools. To have the scripts find these tools, you have to adjust the paths in
$HOME/fgfs/convert/xplane2fg/profile according to your system (using a text editor).
Now everything should be set up to actually convert scenery!
First load xplane2fg's environment profile:
Prepare X-Plane scenery
In the following, we assume the X-Plane scenery we want to convert is named EDDN (make sure it contains no spaces!) and lives in
with the following sub folders
Earth nav data objects textures
Those sub folders may have slightly different names. If so, rename them to fit the above scheme. Remember that Unix file names are case sensitive.
X-Plane objects are positioned using AGL, while FlightGear's .stg files expect AMSL. We will use FlightGear to automatically query the elevation at the object's postition. Therefore, the corresponding scenery tile must be installed. Find out on which tile the scenery you want to convert is located. See Howto: Install scenery for details on how to install FlightGear scenery. The most convenient way may be to use TerraSync.
Now run the main conversion script:
cd $HOME/fgfs/convert/ xplane2fg.sh EDDN EDDN.fg
The converted scenery will be written to the path indicated by the second argument,
EDDN.fg. It should not point to FG's actual scenery paths.
After some seconds, this will stop and ask you to run blender. By that time, it should have created an input file for blender named
blender-autoimport-source.py in the current directory.
Now open a second terminal and run blender from that directory.
cd $HOME/fgfs/convert blender
Click file > import > autoimport, it should now convert all objects, this may take a while. When finished, close blender (and the second terminal), and press ↵ Enter in the xplane2fg terminal.
xplane2fg will now fire up FlightGear. Press ↵ Enter when FlightGear is up and running.
The script then queries the elevation for all objects; this might take a while.
During this process, .stg files are written to their respective tile paths under
EDDN.fg. Also, xplane2fg searches for texture files used by the scenery objects, copies them to
EDDN.fg or complains in case they're missing.
When xplane2fg is finished, you should have something like
ls $HOME/fgfs/convert/EDDN.fg/Objects/e000n40/e006n46/ 3056136.stg 3056139.stg Terminal.ac ...
We're almost done!
X-Plane may use .dds textures, which can be converted to .png format. However, following recent discussion on the developers mailing list, FlightGear/OSG can also use .dds textures. Hence, you may also skip this step. I have not tested using .dds textures with FlightGear. Your mileage may vary.
Go to the converted scenery folder
You may want to remove .dds files afterwards to save space:
Integrate the converted files into FlightGear scenery
Finally you have to copy the converted scenery to FlightGear's scenery folder. Make sure to backup the respective scenery folder beforehand.
The .stg files should be appended instead of overwritten should they exist already in FlightGear's Scenery folder; otherwise you'll lose previously defined scenery objects. You may want to use a file manager such as Konqueror, Nautilus, or Midnight Commander for this step, as they tend to ask whether to overwrite or append existing files.
Now you can fire up FlightGear and enjoy the converted scenery!
Temporary files were written to
$HOME/fgfs/convert/tmp. You can remove them now:
rm -rf $HOME/fgfs/convert/tmp
If you want to publish the scenery you need to obtain authorization to do so from the scenery's original authors.
You may use
xplane2fg.sh --prefix EDDN_ EDDN EDDN.fg
to prepend all converted objects with a prefix, e.g., EDDN_objectname.ac
xplane2fg.sh may complain about funny elevations reported by FlightGear:
WARNING: Zero alt for LSGS-grasss-1.ac?
I suspect this happens when a tile is just being loaded in background, as subsequent calls would return correct elevation. However, since we might query objects floating on water, I did not implement automatic retrying (yet). Instead, you should manually query these objects. Start FlightGear
xplane2fg.sh --query-alt LSGS-grasss-1.ac
which would return something like
OBJECT_STATIC LSGS-grasss-1.ac 7.3416857 46.2201743 482.24 357.99 in /e000n40/e007n46/3072521.stg
and correct the respective line in the indicated .stg file.
Note to Windows Users
I developed these scripts on Linux. They are written in bash and make heavy use of GNU utilities (sed, awk, grep etc.). Some helpers require Perl. To run these scripts on Windows, you will need to install cygwin and perl (at least). You will have to fix some further issues yourself; the wine part, for example, is probably not necessary on Windows ;)