Skip to content

Support the UE 5.8 City Sample and PCG based city generation in the UE5 branch #9852

Description

@M-Colley

Title: Support the UE 5.8 City Sample and PCG based city generation in the UE5 branch

Is your feature request related to a problem? Please describe.

The UE5 branch of CARLA ships a small set of hand authored towns. Environment variety is therefore a hard limit for perception training sets and for driving simulator studies, where most work is collected in Town 10. Epic released an updated City Sample on 27 August 2026 that removes the main obstacle to generating new urban environments inside the editor. The new levels are built entirely in engine with the Procedural Content Generation framework, and the project ships the CitySamplePCG plugin, PCG Primitive subgraphs for roads, buildings, forests and parks, shape grammar definition assets for buildings and roads, PCG Assembly data assets, Nanite Foliage and Megaplants. The listing is at https://www.fab.com/listings/4898e707-7855-404b-af0e-a505ee690e68 and the announcement is at https://www.unrealengine.com/en-US/blog (City Sample update, 27 August 2026).

This content requires Unreal Engine 5.8. CARLA's UE5 branch builds against a fork of Unreal Engine 5.5, so the sample cannot be opened in the CARLA editor and none of the PCG primitives are available. The engine upgrade is already tracked in #9516. The existing procedural path in CARLA is the Digital Twins tool, which is limited to OpenStreetMap geometry and depends on Houdini for building generation. A PCG based path would remove the external dependency and give parametric control over road layout, block structure, building profiles and vegetation from within the editor.

Describe the solution you'd like

The request is a supported workflow that turns a PCG generated level into a fully functional CARLA map. The following items are ordered by dependency.

  1. Engine upgrade to Unreal Engine 5.8. PCG Primitives, Nanite Foliage, Megaplants and the Unreal MCP server are 5.8 features. This blocks everything below and extends Upgrade Carla's UnrealEngine 5 fork to 5.6+ #9516.

  2. OpenDRIVE binding. CARLA derives lane topology, waypoints, junctions and traffic manager behaviour from the .xodr file. PCG road splines carry no OpenDRIVE semantics, so a PCG city loaded as geometry alone gives no routing, no waypoint API and no traffic manager. Two directions are possible. In the first, an .xodr is the authoritative input and a PCG node reads it through CARLA's existing OpenDRIVE parser and emits road centrelines, lane boundaries, junctions and sidewalks as PCG splines and point sets that the city graphs consume. In the second, road splines authored in PCG are exported to OpenDRIVE 1.4. The first direction is cheaper to implement, keeps the client API contract unchanged, and guarantees that geometry and logical road network agree. I would prioritise it.

  3. Semantic and instance segmentation tags for PCG spawned geometry. PCG spawns through instanced static mesh components. CARLA assigns semantic tags per actor and per mesh. A per instance semantic tag attribute needs to propagate from the PCG graph into the instanced components so that the semantic and instance segmentation sensors label PCG buildings, vegetation and street furniture correctly. Without this, PCG geometry is invisible to the segmentation ground truth and the maps are unusable for perception work.

  4. CARLA actors emitted from PCG. Traffic lights, traffic signs and street lights should be spawned as CARLA actors bound to the corresponding OpenDRIVE junction and road ID, so that world.get_traffic_lights() and signal state control work on generated maps.

  5. Pedestrian navigation. Sidewalk output from PCG should feed the Recast navigation mesh build so that walker spawning works without a manual .bin export step.

  6. Reproducibility metadata. The PCG seed, graph asset version and plugin version should be written into the map metadata and exposed through the Python API. A generated map can then be shared as a graph, a seed and an .xodr. These files are small and version controllable, which makes an environment used in a published experiment reproducible by third parties. Shipping a packaged level is not a workable substitute here because of file size and licence terms.

  7. World Partition and Large Map interaction. The City Sample levels rely on World Partition streaming. Its interaction with CARLA's Large Map tile system and with sensor determinism in synchronous mode needs to be specified and tested.

Licence constraint

City Sample content is distributed under Epic's licence terms, and the Fab listing states that usage with AI is not permitted. CARLA specific assets are CC BY and CARLA specific code is MIT. Vendoring City Sample assets into the CARLA repository is therefore out of the question. The deliverable should be CARLA's own PCG graphs plus an import and tagging path, with the City Sample treated as an optional user supplied dependency and used as a reference implementation. Users then obtain the sample from Fab themselves under Epic's terms.

Describe alternatives you've considered

  • Digital Twins with OpenStreetMap input. This produces valid OpenDRIVE but depends on Houdini for buildings, offers little control over block and facade variation, and is not available in the UE5 branch in the same form.
  • RoadRunner. It produces OpenDRIVE and geometry, and it carries a commercial licence that many academic groups cannot fund.
  • Manual .fbx and .xodr import per map. This requires authoring each environment by hand and provides no parametric variation.
  • Backporting City Sample content to Unreal Engine 5.5. The PCG Primitives plugin and Nanite Foliage are 5.8 features, so the backport fails at the plugin level rather than at the asset level.

Acceptance criteria for a first milestone

  • A PCG generated level loads in the UE5 branch of CARLA and the server starts.
  • world.get_map().to_opendrive() returns a valid OpenDRIVE description of the generated road network.
  • The traffic manager spawns and routes vehicles on the generated network without manual waypoint fixes.
  • Semantic and instance segmentation sensors label PCG spawned buildings and vegetation.
  • Walkers spawn and navigate the generated sidewalks.
  • Regenerating the map from the recorded seed and graph version produces an identical level.

Additional context

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions