QtMeshEditor β Vehicle Part Segmentation
A point-cloud part-segmentation network (PointNet++-style) that labels each
point of a vehicle mesh (car / truck / plane / helicopter) as
vehicle_body, wheel, window, wing, or rotor (propeller), exported
to ONNX for local inference via ONNX Runtime.
One of the category-specialised segmentation models built for
QtMeshEditor (epic #818,
Track B2) β a free, open-source 3D mesh & animation editor. The app
auto-detects the mesh category with a companion
point-cloud classifier
and dispatches to this model for vehicles; siblings:
body,
vegetation,
building.
Aggregate download source used by the app:
QtMeshEditor-models
(segment/meshseg_vehicle.onnx).
Model
- Input: a sampled point cloud
float32 [1, N, 3](normalised to a centred unit box; +Y up, vehicle nose facing +Z). - Output: per-point class logits over 6 channels
(
unknown, vehicle_body, wheel, window, wing, rotor); argmax β label, scattered back to mesh vertices/faces by nearest sampled point. - Architecture: shared per-point MLP + two kNN local-aggregation blocks
(in-graph
cdist+topk, ONNX-exportable) + a global max-pooled feature; ~0.78 MB. Trained at the app's inference sample size (4096 points).
Training data & license
Trained from scratch, 100% on procedurally generated synthetic vehicles we own (no third-party data at all): parametric cars/trucks (body + cabin + proud window panes + 4β6 wheels), planes (fuselage, main/tail wings, vertical fin, optional nose prop + landing gear + canopy), and helicopters (body + tail boom, main/tail rotors, skids, canopy) β labels are exact by construction. Weights released under CC-BY-4.0; please credit QtMeshEditor.
Evaluation
- Held-out synthetic validation accuracy: 92.8% (per-point, unknown masked; v1.1's harder detached-part-augmented data β v1.0 scored 93.5% on the easier all-attached set). Real-world CC0 vehicle packs are the planned next data slice (mined via submesh/material-name labels β "Wheel_FL", "glass", β¦).
Reproducing
scripts/export-meshseg-onnx.py --category vehicle in the QtMeshEditor repo
(one-time, offline; the app never runs Python). Strategy + roadmap:
docs/MESH_SEGMENTATION_STRATEGY.md.
Versions
- v1.1.0 (current) β detached-part robustness: wheel/part clusters are
randomly offset during training (real exports often ship wheels as
separate nodes below the hull β the verified real-world failure case), so
detached wheels still label as
wheel. - v1.0.0 β initial synthetic-only release (#818 Track B2).