PH LABS

Capability / Simulation & worlds · flight dynamics, Unreal Engine

Mach 3,on the record.

We built a flight simulator in Unreal Engine in which every force on the aircraft comes from a flight-dynamics model, and every number in that model can be traced to a published source.

Fig. 06 — Flight model on the record

The declassified SR-71 flight manual, NASA technical papers, an FAA type certificate data sheet. Every value in a flight model is labelled published, derived, measured or gap.

01 — What it does

A simulator that answers to the record.

A flight simulator built on Unreal Engine 5, the JSBSim flight-dynamics library and Cesium's real-world terrain. Aircraft are packages in a folder: a flight model, systems, a cockpit and sounds. A new aircraft is loaded without changing the engine code.

02 — The problem it solves

Looks right is not flies right.

A simulator that looks right and flies wrong teaches the wrong thing. Most game-engine "flight" is an animation with a physics nudge. Here the flight model is separate, built from published numbers, and checked against them, so what you see on the dials is what the model computed.

03 — What we have built

Three aircraft, one framework.

The framework
Working prototype
Three aircraft packages on one framework: the DC-9-30, the SR-71A, and a 737 from the JSBSim library used to prove a third aircraft loads with no engine code changes.
DC-9-30
No ready flight model existed, so we built one from published data: the FAA type certificate data sheet, accident investigation reports and a NASA report, with every estimate marked. Electrical, hydraulic, fuel, pressurisation, flight controls, autopilot, lights and auxiliary power; failures; a cold start. 115 cockpit controls, all bound. Its evidence table has 62 rows: 7 pass against a published figure, 28 calibrated or met expectation, 24 informational and 3 recorded deviations. It flies from Charlotte.
SR-71A
A flight model generated from the declassified flight manual and NASA technical papers. Inlet unstart with its roll and yaw, and the restart. Sixteen live cockpit dials, a moving map, a ground-mapping radar view, a night sky, and 33 synthesised sound voices. Status: in progress.
Flight recorder
A flight recorder that writes every flight, five samples a second: about 1,700 recorded flights so far.
Commits
66 commits between 8 and 12 November 2026.
04 — What can be customised

Your aircraft, your procedures.

The aircraft or vehicle (a new package: its data, systems, cockpit). The systems and failures to train on. The places to fly. The instruments and recording.

05 — How it is delivered

A desktop simulator, shown here.

As a desktop simulator for your hardware. The simulator itself stays separate from this website: it is shown here, not run here.

06 — Demonstrations

The model against the record.

Four pictures captured from the running simulator in November 2026.

SR-71A · Unreal Engine 5
An SR-71A on the runway seen from behind, both afterburners lit with blue flames.
SR-71A on the take-off roll with both afterburners lit. Open at full size
SR-71A · Unreal Engine 5
An SR-71A seen from a chase camera high above the Earth, afterburners lit, the horizon curved.
Chase view at Mach 3.0 and 75,900 ft. The figures are the simulator's own readout for this frame. Open at full size
SR-71A · Unreal Engine 5
The pilot's instrument panel of the SR-71A: the control stick in front of rows of round dials.
The pilot's panel. Sixteen of its dials are driven live by the flight model. Open at full size
SR-71A · Unreal Engine 5
A green radar picture of terrain and a coastline with two range rings, the aircraft symbol and a route line to KSFO.
The ground-mapping radar display at a range of 160 nautical miles, with a route to San Francisco. It is drawn by eye from the terrain, not a model of a real radar set. Open at full size

The aircraft and cockpit are third-party 3D models. The flight model, the systems, the behaviour of the dials, the afterburner flames, the displays and the sound are ours. Terrain: Google Photorealistic 3D Tiles through Cesium.

Thrust per engine at sea level, full afterburner (flight manual chart)
SpeedPublishedModel
At rest25,470 lb25,463 lb
100 kt27,500 lb27,494 lb
200 kt29,750 lb29,742 lb
04812160.951.001.051.101.151.20MachThousand lbModelPublished
Thrust left over in a level acceleration at 30,000 ft, in thousand pounds. Around Mach 1 the model is on the strong side by 0.2 to 1.3 thousand pounds.
Thrust left over in a level acceleration at 30,000 ft, thousand lb (NASA flight data)
Mach0.950.981.001.051.101.151.20
Published14.013.57.56.57.07.88.8
Model14.413.78.27.17.88.810.1
1.01.41.82.22.63.003691215MinutesMach4.05.68.010.514.6ModelPublished
Climb at full afterburner from Mach 0.75 at 25,000 ft. Line: our model, a scripted run of 14 November 2026. Circles: NASA flight data. To Mach 2.6 the model is within a quarter of a minute; it reaches Mach 3.0 at 12.8 minutes and 62,400 ft, sooner and lower than the published 14.6 minutes and 70,000 ft.
Climb at full afterburner from Mach 0.75 at 25,000 ft, minutes to reach each Mach number (NASA flight data)
Mach1.41.82.22.6
Published4.05.68.010.5
Model4.15.88.110.5
Thrust left over at the published Mach 3.2 ceiling (should be none)
CeilingWeightLeft over
78,500 ft114,700 lb347 lb of 18,291
80,500 ft103,600 lb466 lb of 16,655
82,500 ft93,400 lb593 lb of 15,169
85,500 ft80,300 lb676 lb of 13,193

Where the model differs from the record we show the difference: around Mach 1 it is on the strong side, and beyond Mach 2.6 it reaches Mach 3.0 sooner and lower than the published climb.

Interactive worlds

AI characters in a real-time city.

The second kind of world we build is one you share with an AI character. Everything below is a private pilot on our own network unless its label says otherwise.

An Unreal Engine 5 city
Working prototype
A real-time city with traffic and crowds, built on Epic's City Sample, plus an evening square, rendered on our own workstation.
A companion with a body
Working prototype
Our own Unreal Engine plugins give a companion made on the web a body in that city. She appears only after her identity is confirmed, walks up to the player, follows, and faces the player when she speaks. Same personality, memory and voice as on the web. How companions work
Her voice inside the world
Working prototype
Speech generated on our GPU server is sent into Unreal as sound over the game stream and played inside the world; her mouth moves with it. Unreal reports about twenty times a second what she is doing, so an interruption stops her at once.
Streamed to a browser
Working prototype
The city is streamed into an ordinary web page behind sign-in, with keyboard and mouse driving the player. One viewer, on our own network.
A resident you can talk to
Working prototype
A second AI character lives in the city. You speak to him by microphone inside the game; he answers aloud, follows on foot and rides in the car.
The world reports back
Built and tested
Twice a second Unreal tells the companion's service where she is, how fast she is moving and who is near, as observations.
Characters that act on the world
Built and tested
Not yet demonstrated. The character's AI can ask the world to do things through three tools, each confirmed by a receipt from Unreal.
A room in the browser
Live
Behind sign-in on the CreatorsHub demo. An original three.js penthouse with six camera views and five lighting moods.

Ryu, the body a companion is given in this city, is pictured on the companions page. None of this is a public or multi-user service yet, and none of it is reachable from outside our own network.

07 — Start a project

Have a simulation in mind?

Start a project

Limits

What it is not.

It is a working prototype, not a certified training device. It has no shared cockpit, no remote streaming and no hardware controls yet. Not modelled yet on the SR-71: inlet spike and door positions, skin temperature, fuel sequencing.