Tree
Asset
Creation

Mesh

Main Mesh

This is a 3D model of the tree, 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.

Formats

Pivot / Origin

The pivot point or origin represents the center point on the ground, where the tree will be plopped. 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

For trees, vertex colors are automatically generated on import, they determine how much the tree will sway in the wind, you can reduce or disable this effect by running this script in the ModTools F7 console.

UV Mapping

Example UV mapping using visible horizontal tiling on the bottom.

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.

Model Complexity

Triangle counts of a couple vanilla trees.

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 trees or assets by other creators for reference.

The absolute limit for a mesh is 65536 vertices.

Textures

Main Textures

These determine the color and material properties of your tree.

Diffuse (_d)

Example diffuse texture for a conveyor prop.

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 150 RGB.

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

Alpha (_a)

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.

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.

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

Color (_c)

Determines which parts are leaves or branches/bark.

The leaves should be black and the rest should be white.

This allows for leaf brightness variation for each tree, snow on winter maps, and better looking normals for 2 sided faces.

If you don't import a color map, it will default to white, which means the normals for leaves will look weird and there won't be any snow on winter maps.

Normal (_n)

Example normal map for a plant.

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

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.

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

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 bit, because a 16 bit image can't be imported.

Resolution

Textures of a couple vanilla trees.

All imported main textures must be the same resolution.

Powers of 2 is a standard practice in 3D graphics, which means sizes such as 1024x1024, 1024x512, 256x512, 2048x128 etc. It is recommended to stick to this standard, but the most important thing is that your width and height must be divisible by 32, otherwise your texture will be corrupted by compression. You can also use a very small size like 32x16 or 16x16 if necessary.

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

Trees don't require an LOD, it's generated automatically ingame using a render texture and billboarding, and updates every time the camera is rotated.

Import

Naming

The mesh can have any name, but it's not recommended to use spaces or underscores.

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.

Import Folder

Files ready for import.

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

C:\Users\Username\AppData\Local\Colossal Order\Cities_Skylines\Addons\Import

The AppData folder is hidden by default, you can access it by pressing Windows + R and typing in appdata.

Template

The template you choose will determine some things about your tree:

Import

Importing a mesh in asset importer.

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.

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 either don't use the rotation and make sure the mesh is rotated properly before import, or if you need to use the mesh rotation feature - use the ModTools console F7 to run this script, which will recalculate the tangents.
If you get an unsupported color error, one of your textures might be a 16 bit file, you need to change it to 8 bit, in Photoshop: Image > Mode > 8 Bits.
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

Material properties

You can toggle snow on winter maps.

Editor Advanced

ModTools scene explorer and console.

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

Wind Sway

You can use a script to recalculate vertex colors to either limit, disable, or change wind sway to a different type:

Variations

Tree variations menu in the asset editor.

You can add multiple tree assets to your tree as variations using a probability value. The probability is a percentage out of 100, but the main tree has no probability so it gets whatever is left over, so if you have two variations with a 25% probability each, the main tree will get a 50% probability. The variations will be embedded into the main tree, but also show up as seperate props in the menu.

Run this script using the ModTools console F7 to set the variation amount, and also calculate equal probability automatically.

Save

Filename

Save asset window.

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

Asset Name

The asset name visible ingame, the name people should search for.

Snapshot, Thumbnail, Tooltip

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

  1. 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 seperately when publishing.

  2. 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

CRP files in the local assets folder.

Once the asset is saved, the .crp file will appear in the local assets folder:
C:\Users\Username\AppData\Local\Colossal Order\Cities_Skylines\Addons\Assets

The AppData folder is hidden by default, you can access it by pressing Windows+R and typing in appdata.

Publish

Share button in content manager.

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.

Title and Description

You can change these on the Steam Workshop later.

Steam Preview Image and Content Folder

Publish window 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.

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

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

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