Vehicle Asset Creation

Mesh

Main Mesh

This is a 3D model of the vehicle, which will be visible when the camera is close to it.

It's created using 3D modeling software such as Blender, 3ds Max, Maya or SketchUp.
The actual mesh file contains vertices (their coordinates, UV mapping, normals, and colors) and triangles.

Continuously connected parts of the mesh (called elements) which are closer than 5cm to 0 (ground) will be automatically detected as wheels. This is not relevant for ships, monorails, cable cars.

Model Complexity

It's recommended to stay within reasonable triangle counts based on the size and detail of your model. You may look at examples of vanilla vehicles or assets by other creators for reference.

The absolute limit for a mesh is 65536 vertices.

Triangle counts of some vanilla vehicles

Triangle counts of some vanilla vehicles.

You can use Mesh Info by SamsamTS to check triangle counts of assets.

LOD Mesh

LOD stands for level of detail. This is the mesh visible from a distance. It must be as simple as possible.

If you don't provide an LOD mesh, the game will try to generate one automatically, which may have visual issues, so it's highly recommended to make a custom LOD mesh.

Comparison between main and LOD meshes for the vanilla police car

Comparison between main and LOD meshes for the vanilla police car.

UV Mapping

For the main mesh, you are allowed to UV map outside the 0-1 area (main tile), so you can tile the entire texture multiple times on a single face.

Example UV mapping using visible horizontal tiling on the bottom

Example UV mapping using visible horizontal tiling on the bottom.

LOD

For the LOD mesh, the UV mapping must be within the 0-1 area (main tile) of the UV map, no tiling is allowed. This is because ingame all the LOD textures are combined into a single texture called an atlas, so having incorrect uv mapping will end up putting the texture of some other random vehicle on your LOD.

UV mapping for LOD mesh using automatic mapping in 3ds Max

UV mapping for LOD mesh using automatic mapping in 3ds Max. No overlap and contained within the main tile - good for baking.

Pivot / Origin

The pivot point or origin represents the center point on the ground, on which the vehicle will drive. It's usually represented using a red/green/blue axis gizmo.

Transform

Make sure you are exporting a single object, which doesn't have any rotation or scale.
This can be done using "apply rotation & scale" in Blender , or "reset xform" in 3ds Max , and exporting only the selected object.

Vertex Paint

Vertex colors are automatically generated to determine wheels, which will spin based on the shader of the vehicle.

Formats

Textures

These determine the color and material properties of your vehicle.

Resolution

All imported main textures must be the same resolution.

Powers of 2 is a standard practice in 3D graphics, which means resolutions such as 1024x1024, 1024x512, 256x512, 2048x128 etc. It is recommended to stick to this standard, otherwise, your texture may be corrupted by compression, which may be more visible at longer distances or grazing angles. The smallest allowed resolution is 32x32.

Triangle counts of some vanilla vehicles

Texture sizes of various vanilla assets. See the resolution in the top right corner of the preview window.

Make sure texture quality is set to high in the game's graphics settings. otherwise, your imported textures will be downscaled to a lower resolution.

LOD Textures

If you don't provide LOD textures, the game will try to bake them using the UV mapping your LOD mesh has, and that may cause visual issues, so it's recommended that you create your own LOD textures using baking.

Diffuse

The main color and texture of your asset.

It will look very bright, contrasty, and saturated in the game, so make sure to reduce the saturation and limit the brightest parts to a medium/light gray below 140 RGB.

If you don't import a diffuse map, it will default to white.

Example diffuse texture for a vehicle

Example diffuse texture for a vehicle.

Color guidelines

Color guidelines.

Alpha

Transparency, white means opaque or visible, black means transparent or invisible. Gray values may affect how it looks from a distance or at an angle.

Semi-transparency is not supported, you need to use the rotors shader for that.

If you don't import an alpha map, it will default to fully opaque or fully visible.

Example alpha texture for some railings and metal beams

Example alpha texture for some railings and metal beams.

Example alpha texture for some railings and metal beams

Using lighter values for the invisible parts will decrease the chance of small details like railings disappearing completely.

Color

Determines which parts will be affected by color variations. White means fully affected and black means not at all.

The diffuse will get multiplied by the color variation, that means the resulting color will look darker than the original diffuse.

For emergency vehicles (police, ambulance, firetruck) this determines where the siren is. The sirens are marked white, and everything else is black.

If you don't import a color map, it will default to full color, but the "use color variations" setting must be enabled for the colors to appear.

Illumination

Default Vehicle

For the default vehicle shader (used by cars, trucks, bicycles, scooters, buses, trams), this defines headlights and turn signals. The turn signals are 0 (black) the headlights and taillights are 255 (white), everything else is 128 (medium gray).

Example illumination map for a vehicle

Example illumination map for a vehicle.

Train

For the train shader, this defines always-on lights (headlights/taillights) and lights which are only on at night (windows). The always-on lights are 255 (white) and the night lights are 0 (black), everything else is 128 (medium gray).

Example illumination map for a vehicle

Example illumination map for a train.

Ship

For the ship shader (used by ships, monorails, cable cars), this defines lights which are only on at night (windows). The randomly changing night lights are brighter or darker than 128. If they are much darker or brighter than 128 - they will never go dark. Everything else is 128 (medium gray).

Aircraft

For the aircraft shader (used by helicopters, blimps, planes), this defines lights which are only on at night (windows) and always-on diffuse contribution illumination. The window lights are above 128 and the diffuse contribution illumination is below 128. Everything else is 128 (medium gray).

If you don't import an illumination map, it will default to black.

Specular

Reflectivity, white values will become "windows" where the fake interior floor will be visible. It's possible to control this fake floor using a script .

The specular highlight from the sun is very big and bright, so you might want to use very low (0-10%) specularity for surfaces facing upwards, like roofs.

If you don't import a specular map, it will default to no specularity.

Transitions between different specular values produce artifacts on the normal map and vice versa

Transitions between different specular values produce artifacts on the normal map and vice versa, even if a normal map is not imported.

Normal

Also sometimes called a bump map, adds fake depth or form by affecting how the lighting appears.

This can be made from the diffuse or a height map (brighter colors will look extruded out more) using a normal map generator online , a photoshop plugin like xNormal , or standalone software such as CrazyBump .

The normal map generator should be set to +X +Y, which means no color channel inversions are required. Read more in the normal map article .

High specularity and normal map don't work well together because of the compression, so you might want to paint over shiny parts with a solid color before generating a normal map or paint over these parts 128,128,255 on the final normal map.

If you don't import a normal map, it will default to a flat normal map - no bump.

Example normal map for rocks

Example normal map for rocks.

Example normal map problem

Problem: normal maps appear incorrectly if the asset importer mesh rotation feature is used.

Image shows the same flat normal map on faces with different UV rotation/flip

Problem: default normal map value is 0.5, which isn't possible by using 127(left) or 128(right). Image shows the same flat normal map on faces with different UV rotation/flip.

Format

Use a lossless format like .PNG.

The game supports other formats as well, but there is no reason to use another one, it doesn't matter how much your texture is compressed or even if it's completely solid or complicated, the game will convert it to a DXT format, so the final size won't be affected by anything other than resolution.

Make sure the texture is 8 bits/channel because a 16 bits/channel image can't be imported. Do not use the "Smaller File (8-bit)" feature in the Photoshop Export As window, as that creates an indexed color image, not an 8 bits/channel one.

Import

Example Asset

Source files of an example vehicle ready for import.

Download

Naming

The mesh can have any name, but it's not recommended to use spaces or underscores, as the name for the lod mesh name will be meshname_lod.

The textures must have the same name as the mesh, but with the texture type identifier after it, so the result will be names like meshname_d.png and meshname_lod_d.png

Import Folder

You should place the mesh and texture files in the import folder located here:

%LocalAppData%\Colossal Order\Cities_Skylines\Addons\Import

The AppData folder is hidden by default, you can access it by copying and pasting the path into the file explorer, or pressing Windows + R and typing in appdata.

Files ready for import

Files ready for import.

Template

The template you choose will determine many things about your building:

All of those things can be changed later in the editor itself or using ModTools or other mods.

Import

After you choose your mesh, depending on how it was exported, you might need to set the correct scale and rotation, scale 100 and rotating 3 times around X-axis are common necessities.

Importing a mesh in asset importer

Importing a mesh in asset importer.

Using the mesh rotation feature will result in broken mesh tangents - that means the normal maps will appear incorrectly or not at all on some parts. To fix this, don't use the rotation feature and make sure the mesh is rotated properly before import. If you need to use the mesh rotation feature - use the Mesh Import Rotation Tangents Fix mod to fix it.

If you get an unsupported color error, one of your textures might be a 16 bits/channel file, you need to change it to 8 bits/channel, in Photoshop: Image > Mode > 8 Bits/Channel.

If the mesh preview doesn't display or you can't continue, you may have a problem with it such as multiple mesh objects, other entities like dummies, cameras, lights, or layers in the exported file.

Editor

General Properties

Lights

You can change the positions of light effects.

Trailers

You can add other vehicles as trailers which are attached to your vehicle, this is used for cargo trailers, train/tram cars.

Material properties

You can change the 4 color variations.

Sub-meshes

You can add additional meshes as sub-meshes, which appear only when certain conditions are met, for example - the vanilla bus has a left hand traffic sub-mesh, and the forestry trailer has a loaded trailer sub-mesh.

Train trailers can display different sub-meshes based on the cargo type they are carrying using this mod .

Sub-mesh Flags

Flags are required and forbidden conditions, which determine when the sub-mesh shows up, and also when the main mesh is hidden.

There are many flags and their use is not always obvious so their descriptions might be incomplete or not relevant in all cases.

By default, not all sub-mesh flags (conditions) are visible, use the sub-mesh Flags mod to show all flags in the asset editor UI.

Parked

Restricts the sub-mesh to only appear when the vehicle is parked.

Created

Active for all non-parked vehicles.

Deleted

Unknown.

Spawned

Likely active for all spawned vehicles.

Inverted

Active for vehicle trailers which have been inverted based on the invert probability of the trailer. Usually used for randomly inverted train passenger cars and the last trailer of a train - the inverted train engine.

TransferToTarget

Unknown. Usually active for vehicles going to a target, such as trucks exporting, importing, returning to facility, or trains going to the next station.

TransferToSource

Unknown. Usually active for garbage trucks collecting garbage.

Emergency1

Likely used for firetrucks. Also used for blimps to display different ads.

Emergency2

Active for police cars responding to an emergency. Likely also used for ambulances and firetrucks. Also used for blimps to display different ads.

WaitingPath

Unknown. Likely active while the vehicle is waiting for its path to be calculated.

Stopped

Active for train engines stopped at a station, taxis stopped to pick up a passenger, and emergency vehicles which have arrived at the emergency.

Leaving

Active for train engines which are about to leave, but haven't started moving yet.

Arriving

Active for train engines arriving to a stop before they are fully stopped. Also active for taxis carrying a passenger.

Reversed

Active for a train or monorail engine which is going backwards.

TakingOff

Active for planes which are in the process of taking off. Also required for the left pole of a trolleybus.

Flying

Active for planes which are flying in the air.

Landing

Active for planes which are in the process of landing. Also required for the right pole of a trolleybus.

WaitingSpace

Unknown.

WaitingCargo

Unknown.

GoingBack

Active for vehicles which are going back to where they came from - such as garbage tracks returning to their facility or trucks which have imported their goods and are leaving the map.

WaitingTarget

Unknown. Likely active while a vehicle waits for where to go next.

Importing

Active for vehicles which are for importing goods, even when they are returning to facility.

Exporting

Active for vehicles which are for exporting goods, even when they are returning to facility.

Parking

Active for vehicles which are in the process of parking.

CustomName

Active for vehicles which the played has renamed.

OnGravel

Active when a vehicle is driving on a network which activates this flag, such as a gravel road.

WaitingLoading

Active for cargo trains which are being loaded with cargo.

Congestion

Unknown, may be related to vehicles despawning when stuck in traffic.

DummyTraffic

Active for vehicles which are "background traffic" driving from and to map outside connections.

Underground

Active when a vehicle is driving on a network which activates this flag, such as tunnels.

Transition

Active when a vehicle is driving on a network which activates this flag, such as slopes.

InsideBuilding

Unknown, related to bicycles.

LeftHandDrive

Active for all vehicles when playing on a left hand traffic maps.

Editor Advanced

Various things can be changed with the use of ModTools scene explorer Ctrl+E or running scripts in the console F7, or specific mods.

Many vehicle settings can be changed using Extended Asset Editor by Acc3ss Violation

ModTools scene explorer and console

ModTools scene explorer and console.

Speed, Suspension & More

See more advanced speed and suspension related properties in the ModTools article .

AI

AI defines what kind of vehicle it is and how it behaves. It can be changed using Asset AI Changer by Snow_Cat & cerebellum .

Item Class

Contains information about what type of vehicle it is. It can be changed using Asset ItemClass Changer by Snow_Cat .

Floor

You can use this script to change the parameters of the fake floor which is visible in fully specular windows.

Sub-meshes

Trailer Sub-mesh

When loading a trailer template, the sub-mesh UI doesn't show up. To fix this, open the scene explorer, go to Tool Controller > ToolController > m_editPrefabInfo > m_placementStyle and set it to automatic, save and load the asset, the sub-mesh UI should show up. Once you add the sub-mesh, change m_placementStyle back to procedural and save your asset.

Sub-mesh Flags

The flags for the main mesh and sub-meshes are oversimplified in the UI. The main mesh conditions are actually just like for any sub-mesh, and the regular flags and parked flags are separate fields. You can change them using this script .

Save

Filename

The filename input is on the bottom left, this is what the actual file will be called. It's not recommended to use spaces, dots, or special symbols.

Save asset window

Save asset window.

Asset Name

The asset name visible ingame.

Images

There are 2 different folders you can open by clicking the folder icons:

Snapshot

On the snapshot image, bottom right corner. Use this one to replace the snapshot, you can replace it with a 1x1 px image to save on the asset file size. This image will only be visible in the content manager. It will also default as the Steam preview image, but you can change that separately when publishing.

Thumbnail & Tooltip

Below thumbnail, on the right side. Use this one to change the thumbnail (109x100) and tooltip (492x147) of your asset.
Once you change the main thumbnail, the hover/active states will update automatically.

Local Assets Folder

Once the asset is saved, the .crp file will appear in the local assets folder:

%LocalAppData%\Colossal Order\Cities_Skylines\Addons\Assets

The AppData folder is hidden by default, you can access it by copying and pasting the path into the file explorer, or pressing Windows+R and typing in appdata.

CRP files in the local assets folder

CRP files in the local assets folder.

Publish

Once you have saved the asset and reloaded the game, you can publish the asset.

Go to the content manager > assets and find your asset, then click share.

Share button in content manager

Share button in content manager.

Title and Description

You can change these on the Steam Workshop later.

Steam Preview Image and Content Folder

There is a folder icon again on the snapshot image, bottom right corner. Here you can change the Steam preview image, which is the thumbnail visible on steam. The largest size the image will be visible is 437x437 (on the front page) but it will get upscaled to 512x512 by Steam so that's the size you should use.

There is also the content folder, which is where the actual asset file is. You can paste multiple .crp files here if you would like to upload a pack of assets.

Publish window and content folder

Publish window and content folder.

Steam Workshop

On the Steam Workshop page for your asset, you can:

Update

To update your own item, you must subscribe to it first, then it will show up in the content manager. It won't be the same as a local asset, as it will show an "update" button.

When you click update, click the folder icon, and now you can change the Steam preview image and put your new asset in the content folder. If updating a pack, remember to put all the assets inside the content folder.

You can also add more assets to make it a bigger pack.

Make sure your updated assets are saved with exactly the same name as before, otherwise, it will disappear from your subscribers' saves, as the game uses the internal prefab name to refer to it. In the case of networks (roads, tracks etc.) it may completely break a save.

Prefab Name

This is not something you can change.

It's the hidden internal name used to refer to your asset in savefiles.

It's the reason why a local asset is not the same as a workshop published asset.

For local assets: filename.Asset Name_Data
For published workshop assets: SteamID.Asset Name_Data

Publish window and content folder

Comparison between local (top) and workshop published (bottom) prefab names shown in ModTools.

Relevant Videos