Cases

From real problems to working results.

Cases/UE Projects

Driving simulation

A driving training project combining three-screen display, session recording, results and scene replay.

  • Simulation control
  • Driver training
  • Multi-screen display
  • Recording & replay
Get in touch

Cover

Back
This page's table of contents

Project overview

This Unreal Engine project supports driving practice and simulated examinations. Three screens present the driving environment while the application captures controls and vehicle state. Results, time series and scene replays provide different ways to review a session.

The project needed consistent lighting and exposure across the screens, together with records that explain the driver’s actions and session outcome. My work covered rendering adjustments, driving data collection, results and UE replay management.

AreaScope
UseDriving practice, simulated examinations and session review
DisplayThree screens with multiple views
EngineRelevant source changes for UE 5.3 / 5.3.2
RecordsProcess JSON, results JSON and UE Network Replay
My contributionRendering fixes, process and results data, replay integration

Features I worked on

Lighting and exposure across three screens

I addressed missing Lumen global illumination and inconsistent automatic exposure in the three-screen setup. The changes involved engine view limits, view data associations and the LocalPlayer view construction path.

This work required changes to specific engine versions; it was not a general project setting that could be enabled without modifying source.

Driving data collection

A WorldSubsystem coordinates continuous collection. Steering, brake, throttle, speed, head orientation, position and direction are stored in channels with timestamps. Position is converted from UE centimetres to metres at the recording boundary.

Continuous values and discrete states have different representations. Steering, brake and speed become curves, while gear and indicator changes become events with a time and value. This supports both trend review and inspection of individual actions.

Results and queries

Session results are stored separately, including result labels, turning and starting counts, completion time, reaction time and date, with record filtering. Results answer outcome queries; process data describes the actions behind them.

Scene recording and replay management

I integrated UE Network Replay and wrapped recording, playback, enumeration, renaming and deletion for use by the application interface. Scene playback uses the engine’s replay system. The process curves are not a custom engine for reconstructing the entire scene.

Challenges and implementation

Supporting a third view in the rendering path

Adding a third screen affected more than the final image. Relevant UE 5.3 code used a fixed maximum view count, which affected GI when the project exceeded that limit.

I traced the related source paths, changed the applicable maximum from two views to three and documented seven modification locations. The associated data paths needed to support the additional view together, rather than changing only the display entry point. The detailed source references are linked below.

Sharing exposure data between LocalPlayers

Independent automatic exposure could produce noticeably different brightness across screens showing the same driving environment.

For the UE 5.3.2 view construction path, I used a custom LocalPlayer to assign Secondary StereoPass to the relevant non-primary views, associating exposure calculations with the same view data. This solution depends on that engine version and view arrangement; other versions require source review.

Keeping results, process curves and scene replays distinct

Each record serves a different review task. Results describe completion and action counts; curves show how controls and vehicle values changed; scene replays let the user watch the session again. A single format would obscure what each record can represent.

I kept these records separate so that statistics, process analysis and replay management can use the appropriate data. Similar fields from the same session are not treated as interchangeable records.

Variable sampling and background saves

Collection follows Tick, so it cannot assume a fixed sampling frequency. Samples retain their time coordinates and are processed in batches. The threshold of 3,000 samples is a buffer threshold, not a fixed time interval. Curves are fitted and simplified per channel and read using their actual timestamps.

Serialization and file writes run in the background. A lock coordinates writes to the same path, and a completion callback can return to the game thread. This separates file work from collection and distinguishes starting a save from finishing it.

Results and scope

The project combines three-screen display adjustments, process collection, results queries and engine replay management. Lighting and exposure are handled on the display side; curves, events, results and scene recordings support different review tasks.

Curve simplification uses an error threshold in the time-value plane, which does not imply the same physical accuracy for every channel. The current collection caller also does not wait for background saves when exiting. Reliable retention of the final batch requires coordination between session shutdown and completion notifications.

The rendering changes apply to the engine versions used at the time. Other versions need their corresponding source checked. Which actors and states a replay reproduces depends on the project’s replication and Replay configuration.