The JSBSim model: folders, files and the structural frame

The aircraft’s flight dynamics is computed by JSBSim. The model is not an Unreal asset: it is a set of files on disk that JSBSim reads directly, bypassing the asset system.

1. Where the model lives

JSBSim starts from the Resources root of the FlightPhysics plugin and looks for the model in the aircraft folder:

  • Plugins/FlightPhysics/Resources/ ← the JSBSim root
  • Plugins/FlightPhysics/Resources/aircraft/ ← aircraft models go here
  • Plugins/FlightPhysics/Resources/engine/ ← engine definitions (shared)
  • Plugins/FlightPhysics/Resources/systems/ ← systems files

In a built game the same path applies, inside the game folder:

<Game>/Plugins/FlightPhysics/Resources/aircraft/<ModelName>/

2. The naming rule: three names match

The JSBSimConfigName string == the folder name == the main model file name (without .xml)

3. One folder per flight mode

Every flight mode corresponds to its own model– its own fully assembled folder: the modes differ in aerodynamics, control files and engine sets.

Flight modeModelModel folder
VTOL<Name>VTOLResources/aircraft/<Name>VTOL/
Ground<Name>GroundResources/aircraft/<Name>Ground/
Plane<Name>Resources/aircraft/<Name>/

4. What ties the model to the aircraft

Two entities in the aircraft’s interface contract (DA_Aircraft):

EntityWhat it defines
JSBSimConfigName on a flight modewhich model to load in that mode
StructuralFrameOriginwhere the model’s nose is – how JSBSim coordinates map onto the mesh

JSBSimConfigName is filled in per mode: the VTOL mode gets the VTOL model folder name, Ground gets the ground model folder name, Plane gets the cruise model folder name.

5. The structural frame and StructuralFrameOrigin

The structural frame is the coordinate system in which JSBSim describes the aircraft’s geometry:

  1. Its origin is the aircraft’s nose. Not the center of gravity, not the centre of the model.
  2. Its X axis points backwards, towards the tail. Its Z axis points up, as in UE.

In this frame the model files hold the center of gravity (mass_balance), the aerodynamic point (AERORP), the visual point (VRP), the eye point (EYEPOINT) and the landing gear struts.

StructuralFrameOrigin is the aircraft’s nose point in UE actor local coordinates, in centimetres. It converts structural frame coordinates into mesh coordinates:

[JSBSim structural point]  ->  [X inverted: structural X points to the tail]  ->  [+ StructuralFrameOrigin, cm]
      (nose = origin)                 (in UE X points forward)                    (UE actor local)
SituationWhat to set
The model’s nose coincides with the actor root (the root component is the mesh itself)StructuralFrameOrigin = (0, 0, 0) – the default
The mesh is offset: the root is not at the nose (nose lower, higher, behind)put the nose point in actor local space, in cm

This is a point in actor local space, not a size and not the center of gravity: the center of gravity comes from the model files (mass_balance) and must never be written into this field.

StructuralFrameOrigin is the pivot for the center of gravity, the aerodynamic points, the eye point, the collision points and the aircraft’s final world placement. Symptoms of a wrong value:

What you see in gameCause
the aircraft flies “half a fuselage behind” its modela wrong nose point along X
wheels sunk into the ground or hanging above ita wrong nose point along Z

6. Model orientation: nose along the X axis

The aircraft mesh must be oriented nose along the actor’s X axis. JSBSim defines the aircraft’s orientation in the world itself, and that orientation maps onto the actor directly: wherever the mesh’s nose points, that is the flight direction the game assumes. Put the mesh sideways or backwards and the aerodynamic surfaces, gear contact points and center of gravity end up beside the geometry.

7 Installing the model into the game

The model XML is read from disk as ordinary files and is not an asset: it never enters the mod’s pak and is never copied anywhere by itself.

Put it into the real game folder by hand – next to the installed mod:Copy

<Kit>/Plugins/FlightPhysics/Resources/aircraft/<Name>/  ->  <Game>/Plugins/FlightPhysics/Resources/aircraft/<Name>/

You place the model files there yourself, just as you place the built mod into the game.

8. Verify

What you seeCauseWhat to do
the log says JSBSim: Error loading model '<Name>'no aircraft/<Name>/<Name>.xml, or the names divergedcheck the three names and the folder contents
PrepareJSBSim: FAILthe model failed to loadfix model loading (the log lines above)
in VTOL the aircraft neither hovers nor lifts off verticallythat mode points at a cruise modelcreate a separate model folder for VTOL
the aircraft flies but drifts away from the meshStructuralFrameOrigin does not match the real noseset the nose point
the aircraft turns as if flying sidewaysthe mesh is not oriented nose along the X axisrotate the mesh
the model was not picked up after editing the filesthe model is read when the mode is loadedrestart the game or respawn the aircraft

9. Checklist

  • The model lives in Plugins/FlightPhysics/Resources/aircraft/<Name>/.
  • The JSBSimConfigName string, the folder name and the master file name match.
  • Every flight mode has its own folder with the full file set.
  • All six files are present and the file="..." references point at files lying next to the master.
  • The engine definitions referenced by Propulsion.xml exist in Resources/engine/.
  • StructuralFrameOrigin sets the real nose point in actor local space.
  • The mesh in the blueprint is oriented nose along the X axis.
  • The model files are placed into the real game folder

Scroll to Top