3D Building Creation Tutorial
The goal of this documentation is to provide all the tools needed to create a building from A to Z in Arma Reforger.
- Prerequisites
- 3D Creation
- UV creation in blender
- Creating Texture Masks in Substance Painter
- Import and modification in Enfusion Tool
- Prefab Building Creation
- LODs making to improve performance
Prerequisites
- Blender version 4.2
- Enfusion tool addon enabled
- Substance Painter or Armor Paint
- Substance Painter export file
- OPTIONAL: UV_PACKER_MASTER
- OPTIONAL: LOD MAKER
3D Creation
A - Creating the Hierarchy
Start by creating your working hierarchy, right-click → New Collection.
What do these collections mean?
- LOD: Contains all the LODs of the object you want to create.
- Light Portals: Contains window and door portals, as well as the BSP_n mesh.
- Volumetric Boxes: Contains the volumes of the building’s probe volume.
- Memory Points: Contains all the portal locations.
- Colliders: Contains colliders for object hardness in Arma.
- Occluders: Contains the building’s occluders, which help the player avoid loading objects beyond the wall.
B - Creating the LOD Mesh
This part will mainly be done in Blender, with an import into the Reforger tool at the end.
- Creating the 3D model
For building creation, there aren’t necessarily any difficulties; just remember that walls and floors are cubes with one visible face and one invisible face. This setup is essential to prevent collisions and in-game issues.
Example:
I’ve created a wall for the building’s frame by subdividing the edges of the foundation cube. As you can see, one side is split into three faces. Upon closer inspection, there are two faces overlapping inside (one visible and one invisible). THIS IS NOT GOOD.
To delete if, select the face -> suppr -> deletefe face
after, you can create interior wall
- Adding Materials for MultiMat
After creating the interior walls, apply a material (an emat in Reforger), allowing up to 7 textures per material. Apply materials from the bottom up, floor by floor.
To Create a Material: Go to Material → + → name it logically, likeYOUR_OBJECT_NAME_INT_or_EXT_n.
To Apply a Material: Select face(s) → Material → check the desired material → Assign. - Adding Door and Window Frames
In order to create thsi you will need to get the right dimensions here the wiki from reforger:
Measurement | Small Window | Large Window |
|---|---|---|
Min distance from the floor | 169 cm | 99 cm |
Common dimensions
Height | ||||||
|---|---|---|---|---|---|---|
47 | 72 | 118 | 142 | 182* | ||
Width | 70 | 70 × 47 | 70 × 72 | - | 70 × 142 | 70 × 182 |
90 | - | 90 × 72 | - | 90 × 142 | 90 × 182 | |
110 | - | - | 110 × 118 | 110 × 142 | - | |
130 | - | 130 × 72 | - | 130 × 142 | 130 × 182 | |
170 | - | 170 × 72 | - | 170 × 142 | 170 × 182 | |
195 | - | 195 × 72 | 195 × 142 | 195 × 182 | - | |
* recommended ceiling height: 330 cm
Some other uncommon formats exist, such as e.g 260×230 for the air control tower.
It’s better to create cutouts for doors and windows by defining their dimensions precisely. Two techniques:
- Boolean Modifier: Create a cube with the dimensions, place it, then select the primary LOD → Modifier → Boolean → select the cube and apply. This method is fast but can cause complex edge and BSP issues.
- Subdivision Technique: For clean frames, subdivide edges to create door/window frames, keeping the edges as simple as possible.
Creating the Box Volume
Select all interior building faces, duplicate them, and form a cube with visible exterior faces. Do this floor by floor before adding the roof.
- Steps: In Edit Mode → Shift + D → Esc → P → Selection. Rename this mesh
BOXVOL_n, move it to Volumetric Boxes, remove its material, and apply dummyvolume. Simplify the shape by removing unnecessary edges and points.
Creating Sockets for Portals
In the Memory Points collection, add an empty point.
- Socket Naming Conventions:
- Place sockets at the center of door and window frames. Once positioned, click Enfusion Tool → Generate Portals. Check the positioning and materials of the generated portals.
PRO TIPS:
- Sometimes, portals are misaligned, and you can adjust them manually.
- Make sure to place the red faces on the outside.
- Some materials may not generate correctly if the frame dimensions are off, so it’s essential to refer to the available portal that matches the frame size.
- Use only one type of portal for single doors, double windows, etc.
Finally, the created portals have names like `PRT_DOOR_GARAGE_A_EM_` ending with “_”. Generate a GUID with the Enfusion tool to place it at the end of the material name: go to *Utilities* → *Generate GUID*.
Creating the BSP
BSPs help attenuate sound within the building. Duplicate the LOD, remove excess details, rename it BSP_n, and place it in Light Portals with dummyvolume applied.
BSP Validation: Go to Enfusion Tool → Mesh Topology → Check “Non-Planar Faces,” “Non-Convex Geometry,” “Non-Manifold Edges” → Create Validator (Temporary BSPs appear in Invalid_Topology).
PRO TIPS:
- 0 non-manifold edges and non-planar faces.
- Non-convex edges are acceptable.
LOD Verification
Once all your frames, box volumes, portals, and BSP are correctly set:
- Check between walls to ensure there are no overlapping faces.
- Ensure each face has a maximum of four edges.
- Verify that all faces are oriented in the correct direction.
- Make sure each face has the correct material assigned.
- Confirm that the bottom faces are deleted.
- Dissolve unnecessary edges and reduce the number of points as much as possible.
Pro tips: This order applies to a single-story building; if additional floors are added, the BSP and box volume setup will differ.
Apply Weighted Normal
Arma doesn't like objects that are too sharp, so just go to your LOD --> modify --> Normals --> Weighted Normal.Then click on “keep sharp” and apply this to your LOD.
Creating Multiple LODs
Use a mod for LOD separation if desired. Select LOD0 → LODs Maker → Make Lod Object.
Creating Colliders
Duplicate your LOD0 mesh in Object Mode (Shift + D). Rename it UTM_LOD0, try to add an DECIMATE effect on it to reduce a bit some detail in order to make lighter collider (blue wrench)
go to Enfusion Tool → Colliders Setup to set:
Creating an Occluder
Create a cube, place it against a solid wall, apply dummyvolume, and rename it OCC_n. Select Sort Object.
You will need to do this operation only on the face that are closed (non windows and door)
Export, Import, and 3D Testing
Only once all steps are completed, you can export your building: go to File → Export → FBX → Check Custom Properties. Open the Enfusion tool and import it!
PRO TIPS:
- Keep the directory structure consistent between assets and prefabs, for example, ASSETS → Template in assets should match PREFAB → Template in prefabs.
Once imported, select the XOB and adjust the following properties:
- General → Source File → Select your FBX
- Check Generate BSP & Export Opaque Leave
- Uncheck Merge Tri Meshes if you have multiple colliders
- Click Import
PRO TIPS:
- You’ll see the texture emats, dummyvolume, and portals.
- After importing the emats, update the portal emats:
UV creation in blender
This process will start in Blender, then move to Substance Painter, and finally Enfusion Tool.
I recommend using textures at 4096 or even 8192 resolution for higher quality and precision in Substance. In the Reforger tool, you can later downscale textures to 2048 if needed.
UV Creation in Blender
- Separate Faces by Material for Easier UV Creation
Select LOD0 → Edit Mode → select all faces → P “by material”. - Adding Seams
Seams help control how textures are applied to objects. For instance, with a cube, if unfolded, you have six faces. Without seams, the texture will apply uniformly. With seams on all edges, the cube splits into six squares.PRO TIP: In this example, I selected everything and created seams, but I don’t want interior wall seams (e.g., under windows). So, select those specific edges → right-click → Clear Seam. - Creating UVs
UVs unfold the 3D model (e.g., a cube with six faces). Start by renaming the UV map for both materials (which remain separate).- For better visibility, go to each material, click the yellow circle next to Base Color → Image Texture → New → Generate Type → Color Grid.
- Click UV Editing (top menu) → New (4096x4096) → Color Grid. A colored grid will appear on the left.
A colored grid has appeared on the left.
Now, when I select all faces in Edit Mode for a single material, I get a completely broken UV layout.
You can also use UVPackmaster3:Do the same things for each material
- For better visibility, go to each material, click the yellow circle next to Base Color → Image Texture → New → Generate Type → Color Grid.
- Verification
Once UVs are set, return to Layout and verify that the grid squares aren’t stretched. - Export
Before exporting, select all materials and join them to the same LOD with Ctrl + D. Export the FBX with only LOD0.
Creating Texture Masks in Substance Painter
- Import and Setup
In Substance Painter, go to New → PBR - Metallic Roughness Alpha-blend model → select your FBX → set resolution to 4096.
(you can use the export preference from bohemia: https://github.com/BohemiaInteractive/Arma-Reforger-Misc/tree/main/Art/Substance%20Export%20Profiles) OR you can use my preset export https://drive.google.com/file/d/1f9OWzuCv8zRdU5heMJhle_m5PEqSlm6z/view?usp=drive_link - Put the export preset on Documents\Adobe\Adobe Substance 3D Painter\assets\export-presets
You’ll see two views: the 3D view on the left and the 2D view on the right. At the top right, you’ll find your two materials.
Before starting, set up the Substance project:
- Select a material → Texture Set Settings → Bake Mesh Maps.
- Set the resolution to 4096.
- Check Use Low Poly Mesh.
- Set Antialiasing to x4.
- Choose Match by Mesh Name.
- Bake the selected textures.
Repeat these steps for each material.
- Add User Channels: Add channels for user0, user1, user2, user3, and user4.
- Delete Default Layer: In the Layers panel, delete the default layer.
- Create Folders:
- Create a folder named Mask and add three fill layers. Assign each a black mask and rename them R, G, and B.
- Create another folder named VFX and add two fill layers with black masks, renaming them Rvfx and Gvfx.
- Set User Properties:
- For each layer, go to Properties - Fill and deselect unused user channels.
- Assign channels: R=user0, G=user1, B=user2, Rvfx=user3, Gvfx=user4.
- Create Two Empty Layers: Place them below the existing fill layers.
- For the export mask, set user0, user1, and user2.
- For the export VFX, set user3 and user4.
This setup should be complete and ready for texturing.
- Object texturing
As mentioned above, a multimat can include:
- One global texture
- Three texture masks
- Two VFX masks
This setup totals six textures. Here, I won’t use Substance Painter's textures, as I’ll apply the vanilla game textures instead. However, the concept remains the same. In this template example, I’ll apply as many details as possible to the faces.
Here, in each layer, I’ve added a base color corresponding to the mask colors, with different colors for the floor, walls, ceiling, and tags on the VFX masks.
c - Export
Once finished, go to File → Export Textures.
Select an output directory → choose the output template “MY PRESET REFORGER.”or "Arma reforger BCR"
If you select one of the materials (e.g., `CUBE_EXT_01`), you can choose to export specific textures—here, only the VFX and global_mask.
Click *Export* to complete the process.
Import and modification in Enfusion Tool
a - Import
Once imported, select the XOB file and modify the following properties:
- Go to General → Source File → select your FBX file.
- Check Generate BSP, Export Opaque Leave & Export skinning
- Click Import to finalize the import.
b- Modificaiont of the Emat
Go to the emat concerning -> change class -> MatPBRMulti
c - Import your texture masks:
- Place the global mask in the Mask Map.
- Place the VFX mask in the VFW Map.
Prefab Building Creation
a - Prefab Création
Open a custom world, drag and drop your XOB on your view port.
Take your generic entity en drag and drop on your ressource browser and give it a name like building_base
b - Add Component
Edit your prefab and on object properpy :
- Right clic on Generic entity--> change class --> SCR_destructibleBuildingEntity
- Check Relative Y and verify when "is building" was check
- Add RplComponent, Hierarchy, WorldSubsceneComponent
- Add RigidBody and check "Static" and "Model Geometry"
- Save and your building is RIGHT
- Add Occluder
- Add Persistence and uncheck "Register Loaded"
- Add an SCR_DestructibleComponent on ArmaReforger/Prefab/Stuctures/Core/Destruction and add your building_ruin on prefab_ruin section of this component
c - Add probeVolume
The volume probe allows you to have darkened buildings. To add more, simply search for “probe” and add it directly as a child in the building tree.
d - Add furniture
An empty building is fine, but a building full of supplies is better! Following the nomenclature, there's the empty “building_base” with a prefab inside, usually called “building_furniture”.
To do this, open a custom world, drop the prefab into the viewport, then add a genericentity in the viewport's tree at coordinates 0.0.0.
Then all the objects you place in the viewport must be put in the genericentity like this.
Then select the generic entity, move it to your building's resource browser and give it the name building_furniture.
Duplicate your batiment_base and give it the name of the building --> edit it
Finally, move the building_furniture into the building tree, as the generic entity was at coordinates 0.0.0, the furnitures will be in the same place where you placed them.
LODs making to improve performance
As every 3D model importing in a game it's supper important to have multiple Level Of Detail to be improve performance:
here the explainaition for it: https://wiki.nabla.sh/books/general-info-tips-for-the-workbench/page/what-are-lods-and-why-should-i-add-them