-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Image links use raw GitHub URLs from the main repository. The source copies of these pages and the figures live under
wiki/anddocs/images/in the main repo.
ue5-vehicle-synth generates synthetic vehicle-keypoint training data inside Unreal Engine 5 and Epic's City Sample, then uses it to extend the vehicle-keypoints model from 14 to 24 keypoints with a sim-to-real recipe.

Full demo video: docs/videos/demo.mp4 - three scenes, each a single vehicle driving normally, then with its 24-point keypoint skeleton, then as a wireframe ghost, across different locations and lighting.
Practical guides (start here if you want to run it):
- Installation - from a clean machine to a working capture environment: UE 5.6, City Sample, the C++ plugin, UnrealMCP, and the Python tooling.
- Generating a Dataset - the full operational workflow: launch, load the module, define a capture grid, run groups, monitor renders, aggregate to COCO.
- Configuration - tune what gets captured: vehicle configs and the 24-point schema, venues, lighting presets, render quality, camera orbits, adding a new vehicle.
-
Training and Evaluation - feed the dataset to
vehicle-keypoints, the kill-switch gate, and how to read the result. - Troubleshooting - every gotcha that cost real time: floating vehicles, the Zen DDC crash, GPU TDR, transient null world, and more.
Background:
- Pipeline - the engineering walkthrough: road detection, keypoint projection, gold-path render, export, and calibration.
Hand-labeling vehicle keypoints is slow and the labels are noisy. A game engine renders the same scene with perfect, free, pixel-exact annotations and unlimited variety. This project wraps that capability in a reusable C++ Unreal plugin (UESynthCapture): it reads the city's real road network, places vehicles on lanes, projects 24 anatomical keypoints with correct occlusion, and renders each pose through Movie Render Queue at gold-path quality. The output is a standard COCO keypoint dataset.
-
Reads the engine's road graph from C++. Unreal does not expose its ZoneGraph lane network to Python, so the plugin adds a
USynthRoadQueryfunction that reads the baked lane storage directly and returns positions plus travel directions. Vehicles are placed on real lanes, aligned to traffic. - Annotation decoupled from rendering. Keypoints, visibility, and bounding boxes are computed in-editor (fast); the photoreal frames are rendered offline through Movie Render Queue (slow, high quality). A keyframed Level Sequence ties the two together pose-for-pose.
- Calibrated projection. The C++ projection math is verified against the actual render so labels land on pixels.
- Honest evaluation. A kill switch gates the work: synthetic pre-training must measurably improve the real-world model, or the approach is reconsidered rather than shipped on faith.
Phase 0 vertical slice. The pipeline is built and validated end to end; the kill-switch evaluation on the CarFusion test set is the current focus.