Roll and pitch, measured from the pixels Read more
SimForge

Building digital twins and simulation engines that power the next generation of intelligent systems.

Products

  • Agentic Showcase
  • SimForge Worlds
  • Helios Engine
  • Recast
  • Scenario Creator
  • SimForge Gym
  • SIMLOG-25k
  • Certification & standards

Open release

  • Announcement
  • Get the CLI
  • Docs
  • Discord

Company

  • FAQ
  • Newsroom
  • Brand kit

Legal

  • Terms of Service

© 2026 SimForge. All rights reserved.

Privacy PolicyTerms of Service
SimForge
    • Agentic ShowcasePrompts to give your coding agent
    • SimForge Studio BetaBuild and run scenarios in your browser
    • SimForge WorldsReal places: HD maps and digital twins
    • Helios EngineClosed-loop sensor rendering
    • Recast BetaReal drives as editable scenarios
    • Scenario Creator BetaPlace cars on a real block and press play
    • SimForge GymTrain driving policies: RL today, SFT next
    • SIMLOG-25kReal-world scenarios to run closed loop
  • News
  • CLI
Sign inOpen Studio Beta

Products

  • Agentic Showcase
  • SimForge Studio Beta
  • SimForge Worlds
  • Helios Engine
  • Recast Beta
  • Scenario Creator Beta
  • SimForge Gym
  • SIMLOG-25k

Company

  • News
  • CLI
  • Docs
  • FAQ
News

Roll and pitch, measured from the pixels

SimForgeOct 26, 2026

  1. The body leans out of the turn
  2. Measured from the pixels
  3. The nose dives, the tail squats
  4. Same frames, every run
  5. What we do not claim
  6. What this buys you
A white Lincoln MKZ on a Richmond Field Station road, front three-quarter view late in a left turn; beside it the figure 1.7° of body roll, 1.6° measured from the rendered frames, and two rear views: rigid replay and physics.

On our research path, full-car dynamics moves a rigged Lincoln MKZ in Helios Engine. We measured its body roll and pitch back from the rendered pixels; on a plain test pad they match the physics to within 0.2°. Synthetic vehicle parameters.

Replay a car along a recorded path in a renderer and it slides around the corner like a cutout on rails. The path is right. The body never leans, the nose never dips under braking, and the wheels never move on their springs. A planner reading poses does not care. A camera-based driving model does, because body motion is part of what it sees on the road: the horizon tilts in a turn and drops when the car brakes.

So we connected a full-car dynamics model to Helios Engine, our renderer, and drove a Lincoln MKZ through three standard manoeuvres on a straight road at Richmond Field Station, one of our SimForge map scenes, on one NVIDIA RTX A6000. Then we checked the result the hard way. We did not trust the numbers we fed the renderer. We measured the body's angles back out of the frames it drew.

  • Roll 1.7° by the end of a 15 m/s left turn, braking dive peaking at 1.4°, launch squat peaking at 1.3°.
  • Measured from the rendered pixels on a plain test pad, the angles match the physics to within 0.2°; on the Richmond Field Station renders, within 0.34°.
  • Synthetic vehicle parameters, one GPU, three manoeuvres, research path.

The body leans out of the turn

Richmond Field Station, rear view at half speed, on an empty road. The car stays in its lane as it turns: its wheels end at least 0.4 m inside the centre line. Watch the tail-lamp line tilt down to the right as the turn builds, while the inset, a rigid replay of the same path, stays level. The readout is the physics state for each frame: roll reaches 1.7° at the end of the clip and is still building.

At 15 m/s the steering steps to 2.4° and the car turns left. Weight moves to the outside. By the end of the clip the outer front suspension has compressed 21 mm, the inner one has extended 22 mm, the outer front tyre carries 1.1 kN more than the inner one (4.9 against 3.8 kN), and the body has rolled 1.7° toward the outside of the turn. The inset beside it is the control: the same path with no body motion at all.

1.7°Roll after 2.6 s of a 15 m/s left turn, still building
1.4°Peak nose dive under 3.4 m/s² braking, settling near 1°
1.3°Peak squat on launch, settling at 0.9°
0.2°Largest gap between the pixels and the physics on the test pad (0.34° on the map)

Measured from the pixels

Feeding numbers into a renderer proves little on its own. A wrong rotation order, a pivot in the wrong place or a dropped offset all produce a car that moves, just not the way the physics says. So we rendered every manoeuvre twice from the identical camera pose: once with the full dynamics, and once as a rigid replay of the same path. Any difference between the two frames comes from the car body alone. We then rotated each rigid frame until it best matched the physics frame, searching ±4° in 0.1° steps on a crop of the car body, and read off the angle.

1.6° / 1.71°Roll at t 2.6 s in the turn: pixels / physics
0.0° / 0°Roll at t 0.7 s, before the turn (control): pixels / physics
1.1° / 1.24°Nose-up pitch at t 0.33 s on launch: pixels / physics
1.1° / 1.23°Nose-down pitch at t 1.0 s under braking: pixels / physics

These four measurements come from the same physics rendered on a plain test pad, where the background does not compete with the car. Roll comes from the rear view and pitch from the side view. Every sign is right and every angle agrees to within 0.2°; the remaining gaps are consistent with perspective, which an image rotation does not model. The control frame, before the car turns, measures 0.0° on the 0.1° search grid. On the Richmond Field Station renders the same search gives 1.6° of roll, 1.1° of braking pitch and 0.0° for the control, but 0.9° for the launch pitch. We attribute that 0.34° shortfall to the busier background, which our method note predicts biases the fit toward zero.

We also checked the parts directly. Each wheel of the car model sits within 0.17 mm of where the physics puts it in either scene, the body within 3.8 µm, and on the flat test pad every tyre touches the ground to within 0.78 mm. Each wheel takes its own spin, steer and suspension travel exactly as the physics computes them, with no hidden correction, and an invalid update is refused whole.

We wrote down a predicted range for each manoeuvre before rendering. Every direction came out right, and the braking deceleration landed on its prediction: 3.41 against 3.39 m/s². Two magnitudes missed: steady squat by 11% and mean dive by 21%. We report them rather than tune them away.

The nose dives, the tail squats

Richmond Field Station, side view at half speed, rigid replay in the inset. Watch the gap between the front tyre and the wheel arch close as the nose dips, peaking at 1.4°. One second in, the front suspension is 28 mm compressed and the rear 28 mm extended; the body rebounds when the brakes release.

Braking from 20 m/s at 3.4 m/s² pitches the nose down, peaking at 1.4° and settling near 1°. One second in, the front tyres carry 4.9 kN each and the rear tyres 2.8 kN. Launching from rest does the opposite: the nose lifts 1.3° at its peak and settles at 0.9°, and the rear suspension sits 21 mm compressed once the body settles after two small bounces.

Richmond Field Station, side view at half speed. Watch the rear sit down as the car pulls away: the nose lift peaks at 1.3° in the first half second, then settles. The inset is the front wheel at 120 fps; at 30 fps a fast wheel appears to stand still.

Same frames, every run

We render from a cached physics run, one manoeuvre per GPU session, from a single recorded build. When we rebuilt from a later commit and rendered the test-pad set again on the same GPU, all 1,577 frames came out byte for byte the same, and the Richmond Field Station renders reuse those exact physics samples. A render stopped halfway and resumed matched an unbroken one frame for frame. It is the same standard we hold the closed loop to, described in our post on deterministic simulation.

1,577 / 1,577Frames byte-identical between two builds, two commits apart, on one GPU
24 / 24Frames identical after a stop and resume
0.17 mmLargest gap between a rendered wheel and the physics, either scene
0.0°Roll measured before the turn, the control frame

What we do not claim

  • Synthetic vehicle. The mass, inertia, springs, dampers and tyres are synthetic values built around the MKZ's geometry. They are not a calibrated Lincoln MKZ.
  • One softened tyre constant. We raised the tyre model's slip regularisation from 0.5 to 5.0 m/s so the physics could take steps large enough for multi-second clips. It softens the tyres at every speed, which is why the slip readout in the launch clip is far larger than a real tyre's. The body attitudes depend on the force balance rather than on slip, and are barely affected above about 3 m/s.
  • A turn that has not settled. The step-steer clip ends at 2.6 s, while roll and lateral acceleration are still rising.
  • A research path. These dynamics run in our test harness. They are not yet a setting for the ego vehicle in a closed-loop run, and we make no real-time claim for them.
  • One car, three manoeuvres, one straight road. The physics treats the road as a plane, so we placed each manoeuvre in the right-hand lane of a Richmond Field Station road where the real surface under the tyres stays within 0.6 mm of that plane, and checked every tyre against the real road surface on every frame (within 4.4 mm). That road slopes about 0.08°, and the attitudes in the clips are relative to it, not to level. The model accepts any vehicle described by its parameters, and the renderer can pose any rigged car in our catalog; only one parameter set exists today.

What this buys you

  • Camera frames that move like the car. Body roll, dive and squat reach the sensors, so a camera-based model sees the horizon tilt and drop the way it does on the road.
  • A renderer you can audit. The vehicle attitude in a frame can be measured back from the pixels and compared with the physics state.
  • Evidence that repeats. The same code draws the same frames, so a strange frame can be reproduced and inspected rather than explained away.

Next we plan to make full-car dynamics a choice for the ego vehicle in closed-loop runs, fit the parameters to measured vehicle data, and add more cars and manoeuvres. To see these renders with one of your own vehicles or scenarios, write to contact@simforge.ai.