Usually just procedural mesh component does the trick.
But it depends.
For instance, I wouldn’t want a road to be generated at runtime unless the game called for it to be changed at runtime.
So you have several approaches to the problem:
- A road kit with fixed and instance capable pieces
- A spline that makes a road out of meshes which you then “bake”.
- a mix of the 2? You can combine instances to custom turns of the spline that are then baked to meshes in order to improve performance a bit.
Generally speaking use anything but the engine.
A GIS program with vector shapes can define the road points much better - and from real world data.
You make an exporter that takes those points into unreal to use as a spline (because you will still need that spline for gameplay).
You also export to a DCC like Blender or Houdini where you do/set up the actual modeling work.
If you take enough care during the modeling process you end up able to import and use instances of the same object for most of the road /within reason.
Eventually, you may need to subdivide the engine’s spline to add car lanes, or similar options.
Havent really found a “no touch” way to do this yet, as when you move splines around the curves often need adjusting…