The road editor is a tool in Asset Editor used to modify and create roads.
This page is currently work in progress and might be missing some information. Please append it with any information, tips, or solutions to common problems you think might be relevant, and clarify any bits as you see fit.
The road modding tool can be used to customize many of the game’s “net”-objects, including roads, train/tram/monorail tracks, canals, quays etc. Since almost all properties of game’s net-objects can be edited, the number of variables can seem confusing, some of them only make sense in certain situations, and all configurations aren’t guaranteed to work. Editable properties are explained here, and you can always refer to how things are set up in the templates. All nets will be referred to as roads here.
Roads usually consist of 5 elevations. Basic refers to the ground level elevation, Elevated is the elevated version used when having a few steps of elevation, Bridge refers to higher elevations, Slope is the part leading from ground level to Tunnel, and Tunnel is the underground version of the road. Every elevation is edited independently and can contain multiple different models used in different situations. You can choose the elevation you want to edit from road editor main panel’s tabs.
3D models used by these elevations are divided into segments and nodes. Segments are used normally on continuous roads, and nodes are used in intersections, on transitions between different road types, and twisted into the endings of roads. Segments and nodes also contain conditions on when to use which, and multiple models can be used on the same time such as a base segment for a tram, the tram tracks, and electric wires going over the tram track. Both segment and node models are simply straight road stubs, and the game takes care of bending and matching them. Tunnel elevation usually doesn’t require any additional modeling. Segment and node models don’t necessarily have to be just roads, and can be anything that you want to scale and bend along with the road.
Lanes contain information about lane’s position, accepted vehicle types, properties such as speed limits, and propping. Lanes don’t necessarily need to allow anything to use them, and can be set up as plain containers for propping or middle platform etc. Lane props also contain additional properties for a prop and conditions on when the prop is used.
Roads are usually modeled as straight 64 units long and 16-32 units wide road stubs. Any width and length can be used and set up in Half-Width and Segment Length fields in Properties menu, although widths lesser than 8 are known to cause issues. It’s important to have the model sliced in grid-like layout and in the middle parallel to its length to have free vertices the game can move around. Make sure that the mesh is aligned parallel to z-axis length-wise and to center the mesh to scene origin. If your road has pavement make it 0.3 units high to match built-in roads and set the pavement’s level to 0 in y-axis so that the road is slightly sunken.
On your node model, make sure there is only 1 edge on each side of the centerline between the sidewalks (pavement) at the end of the node or it will not snap into place properly (this is especially important with the transition between yours and other roads - having too many edges on the side of the road connected to other roads can cause holes in the terrain - using an edited mesh and Transition/Junction node flags can help fix this issue).
The textures used by roads are
- diffuse (_d, RGB)
- normal (_n, RGB)
- specular (_s, grayscale)
- alpha (_a, grayscale)
- pavement map (_p, grayscale)
- road map (_r, grayscale)
White areas in pavement and road maps are used to automatically generate texturing that is uniform from road type to another. Diffuse usually only contains some road markings and details, and can be blended into the road and pavement textures by adding some gray to corresponding areas in these mappings. On elevated versions, the diffuse is also used for areas such as the bottom of the bridge, and on slope the texturing for the tunnel opening. Alpha is used for grassy areas when using the Basic shader, and transparency on other shaders. Nodes are usually heavily stretched and bent so avoid using diffuse details in those and instead use automatic texturing by road and pavement maps.
As the mesh is stretched the UV-mappings “scroll” along the V-axis to avoid stretching the texels. Magenta vertex color (255, 0, 255) can be used to disable stretching the UV-mapping for bits where this is undesirable, for instance in fence posts. It’s usually a good idea to split the textures horizontally and add statically mapped UV-islands on their own side. Note that .obj-files don’t store vertex coloring, so you'll have to export your model as .fbx to use any vertex colors.
There are four different shaders to choose from. Basic is usually used on ground level roads, and can be used to mix terrain textures to the model’s pavement mapped area (pavement, gravel, or ruining, set in properties) or alpha mapped areas (grass). Shadows are also optimized for ground level.
Rail and Bridge shaders work quite similarly to each other, but can differ a bit on their look. Rail always produces gravel and Bridge produces pavement on pavement-mapped areas.
The wire shader doesn’t use any textures, and models using it will sway in the wind. The amount of sway can be set per vertex on the blue channel of the vertex color (0 for no sway, 255 for full), and the phase of the sway can be controlled with the red channel.
Here are listed all the different editable fields of the roads.
- Half Width: half the width of the road. Having different width on the road’s base mesh can cause clipping or z-fighting around the road. Used to smoothly match road’s sides with other road types and many other things.
- Pavement Width: width of the pavement of the road. Used to smoothly match pavements between different road types. Pavement should be 0.3 units high in the mesh to match built in roads.
- Segment Length: length of a segment, usually 64. Wrong sized mesh can result in clipping or z-fighting between the segment meshes when they are tiled.
- Min Height / Max Height: the vertical bounds of the road. Used for collision detection for water when Block Water is checked, and to prevent building other nets too low above the road.
- Max Slope: maximum angle of a slope that the road can be built on.
- Max Build Angle: Maximum angle at which the road can connect to another.
- Max Turn Angle: Maximum angle of the road until a node is used instead of segment. Can be overridden by checking Enable Bending Nodes.
- Min Corner Offset: amount to offset (or “smoothen”) corners towards the inside of the turn. Large numbers (> 40) can mess up collision detection and make the road hard to build.
- Build Height: vertical offset of the road from base line
- Surface Level: level of the road’s surface. Used by vehicles and citizens to move at the correct height. Individual lanes can also be offset from this with their property Vertical Offset.
- Create Pavement / Gravel / Ruining: Which terrain texture is used on pavement-mapped areas. Used by Basic shader when Lower Terrain is unchecked. Bridge shader always generates pavement and Rail shader always generates gravel.
- Flatten Terrain: flatten terrain around the road
- Lower Terrain: lower the terrain to the bottom of the mesh.
- Clip Terrain: Clip the terrain under the road. Use if your road is on ground level or slightly sunken. Uses Half Width to determine the width of clipped area.
- Follow Terrain: Follow the terrain level. Usually unchecked for elevated and bridge to have straight bridges instead of slightly wobbling along terrain level.
- Flat Junctions: Force junctions to be flat.
- Clip segment ends: Use smartly bent nodes in junctions instead of straight overlapping segments. Usually only unchecked for wall ruins.
- Twist Segment Ends: –
- Straight segment ends: don’t bend segment ends in sharply angled junctions.
- Enable bending segments: automatically bend a segment when trying to build it in too sharp angle from another road
- Enable bending nodes: –
- Can Cross Lanes: uncheck to disable crossing the oncoming traffic’s lanes, for instance when the road has a middle platform.
- Can Collide: Check the road for collisions. Usually left checked.
- Block Water: checked in canals, quays and flood walls. Uses Min Height and Max Height to determine vertical bounds of the blocking area, and Half Width for horizontal.
- Auto Remove: automatically remove the road if something is built over it (requires checking Can Collide). Usually only used in some beautification nets, such as pedestrian paths and wall ruins.
- Connect Group: restrict connecting the road to other road types of the chosen group.
There might also be other fields depending on the template type.
- Position: horizontal position of the lane along the width of the road, from the middle point of the road.
- Width: width of the lane.
- Vertical Offset: vertical position of the lane from the road’s Surface Level.
- Stop Offset: position where a vehicle can pull up to stop, calculated from lane’s Position.
- Speed Limit: for vehicles usually from 0.8 (two lane road) to 2 (highway). Usually 0.25 for pedestrian lanes.
- Direction: forward for right hand lanes, backward for left. Will be automatically flipped if using left-hand traffic.
- Lane Type: General type of the road. Leave to None if the lane isn’t meant to be used, for example if you want the lane simply to be container for props or to represent the middle platform such as in 4 lane roads. Any types that aren’t listed here are meant for internal use and might not work in custom roads.
- Vehicle: lane is used by vehicles. You can choose allowed vehicle types in Vehicle Types field.
- Pedestrian: allow only pedestrians
- Parking: lane is used for parking
- CargoVehicle: allow vehicles that move cargo
- TransportVehicle: allow public transport
- EvacuationTransport: allow evacuation vehicles.
- Vehicle Type: allowed vehicle types if Lane Type is set to Vehicle.
- Stop Type: Vehicle types that can use this lane for stopping.
- Allow Connect: –
- Use Terrain Height: override vertical offset and surface level with terrain height
- Center Platform: is the lane used as center platform
- Elevated: –
Lane Prop Properties
- Flags: conditions required for the prop to be used. Refer to templates.
- Color Mode: –
- Position: prop’s position from the lane’s middle point, it has three values. First value says the desired position sideways from the road axis, the second value says height from the terrain surface, the third value says offset along the road axis.
- Angle: angle of the prop
- Segment Offset: –
- Repeat Distance: how often to repeat the prop
- Min Length: –
- Corner Angle: –
- Probability: Probability of the prop showing
- Backward/Forward Required/Forbidden: conditions required for this segment model to be rendered. For example if you don’t want this segment to be rendered when the next segment of placed road is collapsed, check the Collapsed flag in Forward Forbidden. Check how templates use these to get general idea of how they work.
- Disable Bend Nodes: Check to disable the segment from being used in sharp angles (Max Turn Angle in road’s Properties menu)
- Road Color: color applied to road mapped areas
- Shader: shader the segment model uses
- Model: click to import model
- Flags: conditions required for this node model to be shown. Refer to templates.
- Connect Group: which connect groups to use this node with
- Direct Connect: Allows a node to connect in a straight line between segments rather than spreading to cover the area between segments. For example, rails need direct connect to connect directly between rail segments whereas a road node should have it off for roadway junctions which spread and take up an area.