Skip to main content
FreeTrack 2.0 Enhanced is the most widely supported head tracking protocol, compatible with hundreds of games and simulators. It uses shared memory to communicate tracking data and includes both FreeTrack and TrackIR (NPClient) interfaces.

How It Works

The FreeTrack protocol works by:
  1. Creating a shared memory region (FreeTrackSharedMem) that games can read from
  2. Writing 6DOF tracking data (X, Y, Z position and pitch, yaw, roll) to this memory
  3. Registering DLL paths in Windows registry for games to discover
  4. Optionally running a dummy TrackIR process for games that require it

Data Format

Tracking data is transmitted with the following conversions:
  • Position: Centimeters to millimeters (× 10)
  • Rotation: Degrees to radians (× π/180)
  • Coordinate system:
    • Yaw is negated
    • Pitch has special handling near 90° to prevent “bumps” in games like Falcon BMS

Compatible Games

Over 800 games and simulators support FreeTrack, including:

Flight Simulators

  • Microsoft Flight Simulator 2020
  • DCS World
  • IL-2 Sturmovik: Battle of Stalingrad
  • Rise of Flight
  • War Thunder
  • Falcon BMS
  • X-Plane (via plugin)

Space Games

  • Elite: Dangerous
  • Star Citizen
  • EVE: Valkyrie
  • Everspace 2
  • Star Wars: Squadrons
  • No Man’s Sky

Racing Simulators

  • Assetto Corsa / Assetto Corsa Competizione
  • Project CARS 2
  • rFactor / rFactor 2
  • iRacing
  • Automobilista 2
  • DiRT Rally series
  • F1 2021

Military Simulators

  • ArmA 3
  • ArmA Reforger
  • Squad
  • Insurgency: Sandstorm
  • Escape from Tarkov
  • DayZ

Other Games

  • Euro Truck Simulator 2
  • American Truck Simulator
  • BeamNG.drive
  • Microsoft Train Simulator
  • Subnautica
For a complete list of supported games, see the OpenTrack supported games database or the CSV file included with OpenTrack.

Setup Instructions

1

Select FreeTrack protocol

In OpenTrack, go to the Output dropdown and select “freetrack 2.0 Enhanced”.
2

Configure protocol options

Click the settings button next to the Output dropdown to open FreeTrack configuration.Available options:
  • Used interfaces: Choose which interfaces to enable
    • Both FreeTrack and TIR (recommended)
    • FreeTrack only
    • TrackIR/NPClient only
  • Library location: Where to install the client DLLs
    • Default: OpenTrack installation directory
    • Custom: Specify a custom path
  • Ephemeral location: Libraries are removed when OpenTrack closes
3

Choose interface mode

Both (Recommended): Enables both FreeTrack and TrackIR interfaces for maximum compatibility.FreeTrack only: Use if you only need FreeTrack support.TrackIR only: Use for games that specifically require NPClient.dll.
4

Start tracking

Click Start in OpenTrack. The protocol will:
  • Create the shared memory region
  • Register DLL paths in Windows registry
  • Start a dummy TrackIR process if needed
  • Begin transmitting tracking data
5

Launch your game

Start your game and enable head tracking in its settings. Most games will automatically detect the FreeTrack interface.

Registry Configuration

FreeTrack registers DLL locations in Windows registry:
HKEY_CURRENT_USER\Software\Freetrack\FreetrackClient
  Path = "C:\\Program Files\\opentrack\\..."

HKEY_CURRENT_USER\Software\NaturalPoint\NATURALPOINT\NPClient Location
  Path = "C:\\Program Files\\opentrack\\..."

DLL Files

  • freetrackclient.dll - 32-bit FreeTrack interface
  • freetrackclient64.dll - 64-bit FreeTrack interface
  • NPClient.dll - 32-bit TrackIR interface
  • NPClient64.dll - 64-bit TrackIR interface

Custom DLL Location

You can specify a custom location for the tracking DLLs:
1

Enable custom location

In FreeTrack settings, check “Use custom library location”.
2

Select directory

Click Browse and choose a directory. OpenTrack will copy the necessary DLLs to this location.
3

Registry update

The Windows registry will be updated to point games to your custom location.
If you use a custom location, ensure:
  • The directory exists and is writable
  • Your antivirus doesn’t block the DLLs
  • Games have permission to access the location

Troubleshooting

Game doesn’t detect tracking

  1. Check if game is supported: Verify your game is in the compatibility list
  2. Run as administrator: Some games require elevated privileges
  3. Verify DLL registration: Check registry entries are present
  4. Try both interfaces: Enable “Both FreeTrack and TIR” mode
  5. Restart the game: Some games only check for tracking on startup

Tracking is jittery or laggy

  • Reduce filter latency in OpenTrack mapping settings
  • Check if your input device has sufficient framerate
  • Disable unnecessary background processes

Game crashes on startup

  • Try running OpenTrack as administrator
  • Disable antivirus temporarily
  • Use ephemeral library location mode
  • Check game-specific compatibility notes

Falcon BMS specific

Falcon BMS has a known issue where pitch values near 90° cause view “bumps”. OpenTrack automatically limits pitch to 89.86° to prevent this.

Technical Details

Shared Memory Structure

OpenTrack creates a shared memory region named FreeTrackSharedMem with this structure:
struct FTData {
    float X, Y, Z;        // Position in mm
    float Yaw, Pitch, Roll;  // Rotation in radians
    float RawX, RawY, RawZ;  // Raw unfiltered position
    float RawYaw, RawPitch, RawRoll;  // Raw unfiltered rotation
    uint32_t DataID;      // Frame counter
    uint32_t CamWidth, CamHeight;  // Virtual camera size
    // ... point tracking data
};

struct FTHeap {
    FTData data;
    int32_t GameID;       // Game identifier
    int32_t GameID2;      // Confirmed game ID
    unsigned char table[8];  // Game-specific data
};

Coordinate Transformations

From OpenTrack internal format to FreeTrack:
// Position (cm to mm)
data.X = headpose[TX] * 10
data.Y = headpose[TY] * 10  
data.Z = headpose[TZ] * 10

// Rotation (degrees to radians)
data.Yaw = -headpose[Yaw] */180)
data.Pitch = -headpose[Pitch] */180)  // with 90° limiting
data.Roll = headpose[Roll] */180)

Game Detection

OpenTrack can detect which game is using the tracking interface and display its name. This is done through the GameID field in shared memory, which maps to game names in the CSV database.
The FreeTrack protocol uses atomic operations (InterlockedExchange) for thread-safe memory access, ensuring smooth operation even when games read data at different rates.