PRODUCTION LOG 08
MATERIALS - TILEABLE
In this production log, I will detail the process of creating tileable materials to be used later in Unreal Engine, materials for various models in the scene such as walls, ceiling, floors, metal bars and frames, etc. This step involve using Substance Sampler to generate tileable textures, exporting these textures at a high resolution, importing them into Unreal Engine, and setting up master materials with adjustable parameters.
Substance Sampler
To begin, I used Substance Sampler to create high-quality, tileable textures for various materials within the bunker environment:
Walls and Ceiling - concrete textures to reflect an industrial and secure nature of the bunker.
Metallic structural pieces - with steel textures, slightly worn or rusted look.
For each material, I started with a base material layer and then added different layers such as dirt, dust, erode, rust, or different patterns in order to generate textures that were seamlessly tileable. The process also involved adjusting height, roughness, and ambient occlusion maps to achieve a consistent look across large surfaces.
Below, there are a few examples of some textures sets and material preview generated in Substance Sampler.
Wall Material
Ceiling Material
Workbench Panel/Frame Material
Rust/Paint Material
Rubber Material
Steel Rust Material (variant 1)
Steel Rust Material (variant 2)
Once the textures were finalised, I exported the texture maps at a resolution of 2048x2048 to ensure a balance between quality and performance and that materials look detailed without causing excessive load on the game engine. The exported maps included:
Base Colour
Normal Map
Roughness Map
Metallic Map
Ambient Occlusion Map
Importing Textures and Creating Materials In Unreal Engine
Next, I imported all the textures maps into Unreal Engine, then proceeded to create all materials that I needed for my environment. Within the material editor, I set up various functions and exposed parameters to allow for adjustments later in material instance editor.
Base Iron Material Graph
The material graph above shows a base setup for all the tileable materials that I created in Unreal Engine.
Texture coordinates and parameters:
U-Tiling and V-Tiling (scalar parameters) control the tiling on the U and V axes. The default values are set to 1.0 which means the textures will not be tiled or stretched initially.
Rotation Angle (scalar parameter) allows the rotation of texture coordinates. Default values are set to 0.0, meaning no rotation.
Texture Coordinate is a node that provides the UV coordinates of the mesh and it is the base coordinate system used for mapping textures onto the mesh surfaces.
Custom Rotator node takes in the UV coordinates and the Rotation Angle to rotate the UVs based on the Rotation Angle parameter.
Texture sampling:
Textures Sample nodes sample the Base Colour, Normal, Roughness, Metallic, and Ambient Occlusion maps based on rotated coordinates received from the Custom Rotator node.
Multiply nodes are used to adjust the intensity of the texture maps. For example, the roughness multiplier can increase or decrease the roughness.
Brightness parameter (scalar) allows for brightness adjustment of base map.
Tint parameter (vector) allows for tint adjustment of base colour.
Next, I created material instances from each base material. Material instances have same properties as the main material, but allow for individual adjustments. This approach is efficient, as it reduces the number of base material variations and also allows to create multiple instances based on same material to make scene-specific tweaks.
In each material instance, I adjusted the UV tiling multipliers, tint, and brightness parameters to fine-tune the materials for their specific surface within the environment. This ensured that materials looked as realistic as possible and fit seamlessly.
MATERIALS - EMISSIVE
Apart from the Unreal Engine's built-in lights, I am going to need additional lighting materials and functions. For example, in Hydroponics area I am planning to add a few fluorescent light tubes of various colours, intensity, and brightness. To do this, I decided to create a master emissive material and, based on it, additional material instances.
Creating an emissive material in Unreal Engine is pretty simple and straightforward. The core of this material involves using an emissive colour input which determines the light emitted by the material. I set up the material with the following components:
Base colour - a colour vector parameter to define the light's colour.
Emission intensity - a scalar parameter to control the brightness (emission strength).
Additional nodes were added, such as texture samples to multiply with emissive colour and one for the normal node. These are useful in some cases when you want to add a specific image to models such as a screen.
In material instances, I can control the colour and emission strength to create various light colours to simulate a realistic range of fluorescent lighting, and adjust their intensity to suit specific requirements of different sections within the bunker environment.
LIGHT FUNCTION
Another thing that I wanted to make for this project is a light function that adds various effects to light actors in the engine, such as a flickering effect. To do this, I followed a tutorial provided by Unreal Engine on their documentation website.
I created this simple light function with the following elements:
Time node - which returns the elapsed time since the session (in editor or game mode) began.
Speed - a scalar parameter to adjust the flickering speed.
Sine node - generates a sine wave that oscillates between -1 and 1, making the flickering pattern more natural.
Frac node - fractional part node that takes the input value and clamps it between 0 and 1 range and ensure smooth transition.