This is a 3D model of the building, 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.
- FBX (most commonly used)
- OBJ (doesn't support vertex colors)
Pivot / Origin
The pivot point or origin represents the center point on the ground of the lot. It's usually represented using a red/green/blue axis gizmo.
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 painting in 3ds Max.
- 128 means 3D snow will not be generated
- 0 means no snow will be visible at all
Example UV mapping using visible horizontal tiling on the bottom.
Triangle counts of some vanilla buildings.
The absolute limit for a mesh is 65536 vertices.
Comparison between main and LOD meshes for a large and small building.
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 using baking.
UV mapping for LOD mesh using automatic mapping in 3ds Max. No overlap and contained within the main tile - good for baking.
These determine the color and material properties of your building.
Example diffuse texture for a warehouse.
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.
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.
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.
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.
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.
Example illumination map showing both gradients.
192-128 inverted (bottom)
Buildings can have two different types of illumination - diffuse contribution illumination in the 0-120 range, which is almost never used, and random night window illumination in the 128-255 range, which is what most buildings use.
For randomly illuminated night windows 192 is the neutral color for non-illuminated parts. Then there are two gradients: 192-128 (inverted) and 192-255.
Create a black and white illumination texture and use a levels adjustment to set the output colors so that black becomes 192 and white becomes 128 for one set of windows, and black becomes 192 and white becomes 255 for the other set.
0-120 is always turned on illumination based on the diffuse. It's not recommended to mix the two different types of illumination on one texture as it can create aliasing problems.
If you don't import an illumination map, it will default to no illumination.
Example specular map showing high values for windows and very low values for the rest.
Transitions between different specular values produce artifacts on the normal map and vice versa, even if a normal map is not imported.
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.
Example normal map showing flat windows.
Problem: normal maps appear incorrectly if the asset importer mesh rotation feature is used.
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.
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.
High specularity and normal map don't work well together because of the compression, so you might want to paint over your windows and other shiny parts with a solid color before generating a normal map, or paint over these parts 128,128,255 on the final normal map.
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.
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.
Texture sizes of various vanilla buildings. (Not to scale) See resolution in top right corner of preview window.
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.
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.
Powers of 2 is a standard practice in 3D graphics, which means sizes such as 256x256, 256x128, 128x64, 64x64 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.
Source files of an example building ready for import.
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
Files ready for import.
You should place the mesh and texture files in the import folder located here:
The AppData folder is hidden by default, you can access it by pressing Windows + R and typing in appdata.
There is a "load existing props and decorations" toggle on the bottom left, this will load props and networks like roads/tracks/paths from your chosen template as well, useful when you need to reimport an already imported asset but don't want to place those things again.
The template you choose will determine many things about your building:
- AI and corresponding stats (school with students, fire station with fire trucks etc.)
- milestone at which it is unlocked
- UI category
- item class (UI sub-category)
- general settings (flatten terrain, use color variations etc.)
- shader, material properties (color variations)
Importing a mesh in asset importer.
For growables, the lot also includes an optional yard area for props.
For growables, the size is limited to 4x4.
For other buildings, max sizes are 16x8, 15x9, 14x11, 13x12, 12x13, 11x14, 9x15 and 8x16.
- use color variations (may require save/load for toggle to take effect)
- availability (ingame, map editor etc.)
- circular lot (used for vanilla wind turbine, water tower)
- expand front yard (puts optional yard for props in front instead of back)
- flatten full area (makes sure the terrain is flat up to the lot edges)
- flatten terrain (tries to flatten terrain in a softer way)
Based on which AI the building has, it can have different stats like electricity consumption, worker amount, police car count for a police station etc.
You can change the 4 color variations, and also floor parameters which are used for the fake interior for 100% specular windows.
Vanilla train station pedestrian paths (magenta) connecting roadside to platform.
Props & Trees
You can place props such as benches, lights and antennas.
If you place a prop on the ground, it will follow the terrain if the building is placed on uneven terrain. But if you place it on the building, it becomes fixed height, so it will always be at that height relative to the building.
The clip brush is uneven and unreliable.
- Pavement (map theme texture)
- Gravel (map theme texture)
- Ruined (map theme texture)
- Field (map theme color)
- Clip (hole in the ground)
These are invisible props which have functionality such as building entry points, parking spaces or smoke particle effects.
Once a sub building has been added, you can change its position precisely.
This is useful for multi-function buildings or adding a part using a different shader.
The fixed height option makes sure the sub building stays the same height even on uneven terrain.
Sub buildings don't grow on growables, they are only visible if the growable is plopped manually.
If you just imported a building for it to be used as a sub building, you need to reload the game for it to be properly loaded and available as a sub building.
You can add additional meshes as sub meshes, which appear only when specific conditions are met, for example the vanilla landfill uses multiple sub meshes to display how filled up it is.
Flags are required and forbidden conditions, which determine when the sub mesh shows up.
ModTools scene explorer and console.
- AI - Asset AI Changer by Snow_Cat & cerebellum
If you want a functionless decorative building, DecorationBuildingAI is a good choice.
But if you want your building to be sinkable into the ground without lowering terrain, use BuildingAI, however a side effect is it won't get wet in the rain, or snowy on winter maps.
- UI category - Asset UI Category Changer by Snow_Cat
- Item Class (UI sub-category) - Asset ItemClass Changer by Snow_Cat
- UIPriority (determines item order in menu) - Asset UI Priority Changer by Snow_Cat or script
It's recommended to pick a high number, use the first few numbers as a "signature" and only change the last few numbers of it for each item like here.
Comparison between Default (left), NoBase (middle) and Fence (right) building shaders.
On winter maps, snow doesn't appear on the NoBase shader.
Scripts for commonly used building shaders:
- Default extends the base mesh into the ground and applies the map theme building base texture to it.
- NoBase doesn't replace underground texture with building base texture.
The base mesh may still be visible, it's generated on import for edges closer than 5cm to 0 (ground). Side-effect is increased reflectivity for high specularity areas.
- Fence conforms to the terrain. (used for vanilla cemetary and japanese garden)
- Floating waves in water. (used for Mass Transit DLC boat museum steam boat)
This determines how your asset must be placed:
- OnWater (also disables water collision)
- OnGround (can't be placed on water)
- OnSurface (same as OnGround but can be placed on water)
- OnTerrain (same as OnSurface but in water, not on it)
It can be changed with ModTools scene explorer Ctrl+E by going to Tool Controller > ToolController > m_editPrefabInfo > m_placementMode.
This is used only for growables to make them grow only on corners:
- Straight (default)
It can be changed with ModTools scene explorer Ctrl+E and going to Tool Controller > ToolController > m_editPrefabInfo > m_zoningMode.
Save asset window.
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:
- 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.
- 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.
The AppData folder is hidden by default, you can access it by pressing Windows+R and typing in appdata.
Share button in content manager.
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 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.
On the Steam Workshop page for your asset, you can:
- add it to a collection
- add images and videos
- add contributors and links
- add required items and DLC
- change visibility to friends only or private
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.
Comparison between local (top) and workshop published (bottom) prefab names shown in ModTools.
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