My name is Paul Christopher. I am a residential building surveyor by day and a hobbyist 3D modeller by night. Some of you may recognise me from some of the mods I have created for Cities XL and Cities Skylines over the years under the steam name Pauljchris. I was privileged to be asked by Enodo Games to participate in the closed beta of the modding system for The Architect Paris.
This is an overview of how to create a new building (brick design) for the game the Architect Paris (TAP) based upon a real world building or external reference and bring it into the game. It assumes you have a basic knowledge of 3d modelling and 3dsMax in particular as this guide will be using 3dsMax , but any 3d modelling software capable of allocating material IDs to polygons and exporting files in the FBX file format can be used to create the brick models.
First please make sure you have read the official modding guide produced by Enodo games here: Tap.mod.io
3dsMax Project File
Overview of process
The steps required are:
- Obtain from the internet or take photographs of the building you want to bring into the game. A straight on front view of the facade is a good start , plus any oblique views that can show you the approximate depth of extrusions and recesses.
- Plan carefully the height of each storey and the number of individual bricks required for your design such that you have a design template to work from before you begin modelling.
- Model each brick of each storey as an individual 3d object and texture it using only the texture array provided by the developers by way of a custom 3dsmax multi-material. Name each 3d brick object strictly adhering to the naming convention specified in the official modding guide.
- Export the individual bricks from 3dsMax as FBX files using the Batch exporter provided by the developer.
- Run the python script file style_organizer.py provided by the developers in the directory where you exported the FBX files to. This will automatically create the required folder structure to allow your mod to be read by the game provided you have named your bricks correctly.
- Import your newly created mod folder into the mod manager and preview it to test compatibility with the various grammars and view the textures in the game engine.
- Repeat steps 3-6 until you are happy with how your design looks in the game and that there are no missing bricks or gaps in your design.
- Create 4 LODS for each of your individual FBX brick models except for any filling bricks (_H and _V) which only require 1 LOD each.
- Reset Xform , link LODS 1-3 to LOD0 as parent for each individual brick and repeat steps 4-6.
- Create 3 icon png images to the exact sizes specified by the developers to display your mod within the game and save them in the root directory of your mod folder.
- Save out your mod using the mod manager which will create a TAP file and place it locally in your /documents/Enodo Games/The Architect Paris/Mods folder.
- Load the game and make sure your custom design appears select-able in the Drawing Board.
- When completely happy with your design, upload your creation to the Mod.io platform using the option within the mod manager. Create a preview with a brief description and some in game screenshots to show off your design at its best.
1 - Designing from Reference
For this guide I have decided to work from the reference image below and try to get as close as I can within the constraints of the game. I chose this because it is quite a simple design with repeating parts and the materials used can be reasonably approximated within the texture array provided by the developers. Note that it will not be possible to match the reference textures exactly, you will need get creative and find the best match within the fixed texture array to use on your model.
2 - Planning the height of each set of storey bricks
So, looking at the above reference, and remembering that I can only make brick models for the FIRST STOREY (ground floor), STOREY (all middle floors) and LAST STOREY (top floor) I decide on this Storey division for my model:
The storey bricks will be repeated the number of times specified by the player so I only have to provide brick models for 1 row.
3 - Start modelling the facade in 3dsMax
So now having decided on the horizontal division, I next need to consider dividing up each storey vertically to create the individual bricks required by the game engine. Remember each storey grouping can be any height you want but all bricks of each storey group must be the same height and they all must be strictly 3M wide.
Here is what I decide to go for:
So now I know this design can be made with 13 basic bricks plus filling bricks which I will make later on . Furthermore, if you look closely, you can see that many of the bricks will be mirror images so I can cut down the modelling time by creating just the left side bricks, then creating mirror copies for the right side which means only 8 bricks needing to be uniquely modelled. Only 1 brick is needed for the top roof storey because it will be repeated along the entire façade.
Why did I number the middle bricks out of sequence you might ask?
You must think procedurally and imagine your design being applied to variable width facade not just the literal 15m wide design in 3dsmax. The reason is that the brick number is how the game engine interprets the grammars . Refer to the modding official document for an explanation of all the possible grammars that can be applied. So for the checker board grammar for example , the game will display bricks SB1 and SB2 repeatedly but will not show SB3 at all and I want it this way because I want the SB3 brick to appear less often. In the Vertical ordered grammar , provided the facade is at least 15m wide it will display SB1 , SB2 then SB3 so the vertical column will appear on the right side, not an exact copy of the reference but designing bricks for The Architect Paris is about compromises and remembering early on that your design has to be able to cope with a facade width in the game which can vary from 6m wide ( just the AL and AR bricks) to virtually any width that the player chooses to create in the plot editor.
Looking at the reference, I decide the FIRST STOREY (ground floor) will be 4 meters high, the STOREY bricks 3M high and the LAST STOREY (top floor or roof edge) will be only 1M high.
So with a definite plan it is now time to go into 3dsmax and make the bricks to the design we have just described.
- Pay attention to scale. Make sure your 3dsmax scene units are set to meters.
- Set up the 3dsmax multi-material before you do any modelling. You must create a 66 texture multi-material and link each material ID to the correct texture sample provided by Enodo Games.
To save you this trouble of doing this, I have a provided a 3dsmax project file available here 1drv.ms
for you to download with all the texture samples already linked. Copy this folder and sub-folders into your local 3dsmax project folder and open the scene to have a look at the completed file. With this scene opened in max if you click the New all option from the file menu it will remove all my models from the scene but leave the multi-material set up so you can start a fresh design of your own. Alternatively , feel free to modify my design , texture it differently or use it as a basis for your own creation. You also might want to try recreating the models using the steps outlined below to get familiar with the workflow .
So where to start?
There are basically 2 ways to approach the modelling. Either (a) create each individual brick as a separate object in the 3dsmax scene and name it correctly making sure they are all exactly 3M wide or (b) create a 15m wide plane object to cover the 5X3m wide bricks of the whole facade with vertical divisions of 3M, then model the facade as one complete object. Then when you are happy with your design block-out , detach each brick from the facade object remembering to name each brick and setting the pivot correctly as you do so. I will describe the 2nd approach.
Starting layout in 3dsmax following the design template above , I create a plane in the front viewport with dimensions 15M x 8M high and centre it in the x axis because this will make it easier to to use symmetry to cut the modelling time in half.
From this point I detach the plane into 3 separate horizontal objects for each set of bricks so that any modelling I do on one storey will not create unnecessary triangles on the others that I would otherwise have to delete. I delete the unnecessary 2 bricks on the top level.
From here the idea is to describe your design using only vertical and horizontal lines to define texture boundaries and correct proportions but not yet do any extrusions. If you can do this successfully it will give you a strong basis for your LOD3 ( lowest level of detail) and enable you to quickly judge the triangle per brick budget by dividing the total triangles in the scene by the number of bricks to see if you can meet the challenging LOD3 design goal of 10 triangles per brick. It will further inform you whether you can afford any extrusions on your LOD3 or whether you will have to keep everything as a flat plane.
So now I blocked out the design within each storey object and I hope you can see that the position of the main features resembles that of the reference.
You must keep a close eye on the triangle count to preserve performance for all users. it is a good idea to turn on statistics for all view ports and set it to triangles only. Enodo Games have given guidance as to the triangle count for each LOD, but for now just try to model the required shape with as few triangles as possible then look to optimise later on. A target of 100 triangles per brick (LOD1) is good to aim for since if you go for the LOD0 max of 200 you may find it difficult to reduce it enough without losing form.
4- Texturing your block out facade
Now its time to sort out the textures. Since we can only choose from a fixed texture array provided by the developers you need to get creative and find the best match from what is available. The upside of this is that you do not have to create any bump maps, normal maps, transparency maps etc as these have already been made by the developers and will be applied automatically when viewed in the game engine.
Make sure you have applied the multi material to all your objects.
Select all polygons that you want to share the same texture, then set your desired material ID. It is a good idea to do this early so you can see what works best for your composition. Try out as many possibilities as you wish, after a while you will learn which textures from the texture array look best on which parts. For the door and windows, you will have to manually UVMAP the polygons to the desired door and window textures. You should see the design start to take shape in the 3dsmax view port.
When UVunwrapping your model you are not constrained to the UV01 space. It is a good idea however to select all the polygons that use the same texture ID and UVunrap them together so they have the same texel density. This is important because the textures have more details on them than show in the default 3dsMAx viewport so if your faces have different texel densities they may look odd once in the game.
If you need to scale the textures , for example when using some of the brick images and you need them to line up or for them to be a desired size, then use the UVMAP modifier to project the texture on to the model so they all line up properly and scale the UVs to the desired size.
For this design I used:
Texture ID 57 Asphalt for the dark parts
Texture ID 16 ConcreteW for the white areas
Texture ID 33 WoodDark for the dark brown parts
Texture ID 15 WoodPlanks01 for the light brown areas
Texture ID 24 Windows 8x4 with UVmapping for the windows
Texture ID 27 Doors with UVmapping for the doors
Texture ID 51 Details03 with UVMapping for the column pattern
Texture ID 28 Railings02 for the balconies ( not shown here but added later in the process)
Applying a symmetry modifier to all 3 objects allows a better visualisation
Alternative workflow: You can save the 3 whole storey objects for later use, clone them and work up your design to the desired level of detail for LOD0 as a whole storey object , then break up the facade model by detaching the bricks at the LOD0 level using the same process as described below if you prefer to work this way. The following describes creating the bricks at LOD3 level , cloning then modelling straight to LOD0 level and then progressively reducing details to reach LOD2 . However, creating the bricks at LOD3 with minimum detail and progressively adding details to reach LOD0 is also a valid approach. Experiment with both ways and use which ever you find easier. Either way you need to create 4 LODS for each brick of your design.
5 - Splitting your whole facade model into individual bricks
Now its time to divide the facade into individual bricks. Remove the symmetry and delete the right side. I decide to start with the door brick but it does not matter which you do first. Select all the polys of the door brick and detach as a new object , naming it D_01_LOD3 using the naming convention provided in the official modding guide:
Isolate your newly detached object, turn on vertex snapping and move the pivot to the bottom left vertex
Repeat the above steps for each brick in turn, making sure to set the pivot correctly for each newly detached brick. You should end up with 8 separate bricks named as follows:
Once you have these separate bricks, make a clone of each of them but this time name them as LOD0 ie
Now select each LOD0 brick in turn and start extruding outwards and inwards as desired to create as detailed a brick as you wish subject to a limit of 200 triangles per brick ( although in practice 100 is a good target). Every time you extrude a surface , you must apply the correct texture ID and UVunwrap any newly created polygons.
By following this process and adding some details here and there I end up with this :
The reference has a protruding roof which I want to include so the LAL and LAR bricks extend out beyond 3 meters at a 45 degree angle. Unfortunately this means that this design will only properly work on 90 degree corners ( other angles will produce a gap due to current limitations of the game engine at the time of writing) but that is a deliberate design choice I have made and I will need to make players aware of this limitation when I publish the mod on the Mod.io platform. Note that the pivot for these pieces is still at the Y=0 axis and the inner edge is still exactly 3 meters wide although the front edge is wider than this.
The entrance staircase of the reference clearly extends out from the front of the building. If I were to model it like this the stairs would stick out over the pavement when in the game engine so I decide to model the stairs inset to the building instead to avoid this problem.
Here you can see all the pivots for all 8 bricks are in the bottom left position at 0 on the Y axis:
6 - Creating 4 LODS for each brick
Once I am happy with the LOD0 results, clone the bricks once again but this time with a LOD1 suffix. Reduce the details a bit to match the triangle budget for LOD1. Once you are happy with LOD1, clone again the bricks to create LOD2 , again reducing the details still further to try to get as close to the budget as possible.
Ultimately you should end up with 8 x 4 = 32 objects in the scene, with each Brick having 4 LOD models stacked on top of each other. Some people prefer to move the LODS apart in the 3dsmax scene to aid visibility which is of course fine if you prefer to work this way.
Select all the left side bricks and all their LODS and apply a symmetry or mirror modifier. Then detach the mirrored parts to create the missing right side bricks making sure to name them correctly and set the pivot to the bottom left corner of each. You should end up with something like this:
7 - Creating Filling Bricks
These are required because the game allows extrusions and insets of the bricks of the facade in exactly 1 meter increments to provide additional variety but this process will create holes in your design which you must plug using filling bricks.
As a minimum your design must contain at least 2 filling bricks , one for horizontal extrusions B_H and another for vertical extrusions B_V. This is the minimum required for the design to be read by the game engine but this is rarely enough except for the most simple of designs and you will likely need to create more than this.
In this design , because my FIRST STOREY, STOREY and LAST STOREY bricks are of different heights , I will need at least 6 filling bricks , one vertical and one horizontal for each storey group. If all bricks were of uniform height , then only 2 would be required.
To create the vertical filling brick, select 1 brick on the from the first floor set, I use the FB1_01_LOD0. Extrude the entire left edge backwards in the positive y axis by exactly 1 meter. Detach the newly extruded polygons into a new object , and name it FB_V. UVmap and allocate the desired material ID to the newly created polygons as you did before with the other bricks:
Note that filling bricks do not require any LODS. By creating it this way , you will also ensure that the newly created brick shares a pivot with the storey brick and this is exactly what you want to ensure the filling brick appears in exactly the right place in 3d space relative to the storey brick.
Now do the same thing but in the horizontal plane, extrude the top edge of the FB brick back 1 meter in the Y axis, detach the extruded polys as a new object and name it FB_H. Note that the pivot of the horizontal filling brick still keeps the same pivot location, i.e. the bottom left of the parent brick. This will ensure it appears at exactly the right height relative to the storey brick in the game engine.
If you look closely you can see this design has extrusions extending in the positive y axis . If you want the holes to be closed properly in the game engine , then you must add these extrusions to the standard 1 meter offset as you see above so that the side of the forward protrusion is also included within the vertical filling brick.
Because the door brick has a slightly further protrusion, I make another D_V brick. I also make filling bricks in the same way for all 3 sets of storey bricks. Here are all the Filling bricks I made for this design shown in isolation with their respective pivots:
I have found a good way to work out what you need is to make the design with only the basic filling bricks and then export the set to preview in the mod manager. There you can try out the various grammars with your design and observe where all the holes appear. Then you can come back into 3dsmax and make some more custom filling bricks as required to close all the gaps for all the grammars you wish to enable the player to be able to use for your design.
8 - Export Your Design to Preview it in the Mod Manager
So if you followed this process precisely , you would now have a complete brick set with LODS ready to export. However, it is possible to export your brick set with only 1 LOD created to test out how it reacts to all the grammars and this is recommended in case you wish to further edit your models, add more or less details etc before spending time creating all the LODS. To do this select all the bricks and filling bricks in the 3dsmax scene and run the Batch exporter 3dsmax plug in provided by the Enodo Games.
This will export all your bricks as individual FBX files to a local folder on your drive specified by you.
The next step is to copy the python script style_organizer.py provided by Enodo Games into this directory and run it.
After a few seconds , the correct file structure for your mod with all its subfolders will be created for you. If a folder called Error is created , it means you have not named your bricks correctly or missed out the filling bricks so you just need to go back into 3dsmax, correct the errors, re export and run the python script again until no error folder is present.
if all working correctly , it should appear like this:
9 - Iterating your design
If you decide to make any changes to your mod within 3dsmax, you will need to repeat the steps above to be able to see the changes you have made. You will probably need to do this multiple times while iterating your design unless you are a 3d genius and make it perfectly the first time :)
Proceed to open the mod manager by following the installation procedure for Unity as described in the official documentation. Once installed , Run unity and it will ask for a project location:
Point it to the Modding Tool folder located on your local machine:
Once the Unity project is open, you should see a 3d Viewport with a tab at the top called Enodo Games.
Click on this tab to open the Mod Manager.
From the initial screen , chose the import mods option.
After a few moments , your mod will be loaded . Then select the Preview button which will enable you to see your creation in a unity 3d view port. There are a few options to play with, but the main thing is to be able to test out what the various grammars and extrusions do to your model and how the design reacts to larger and smaller versions. You can preview a triangular version and a number of other presets, it is worth going through all of them to see how your design reacts. You can also add extrusions here as well , and this is what will help you see where any additional filling bricks may be required.