Unreal Engine 4 Materials
This page contains materials that I developed in Unreal Engine 4. The materials that are used in the game project will have a labeled game logo at the top corner of the heading.
This material is used in FrostRunner. The reason I made this master material is to get flexible material that allow fast iteration. After our team chose "brutalism" and "decay" as our theme, I spent some time to research and create a master material that can visualize different styles of decay for concrete. This material is used throughout the level to create concrete with damage, crack and dirt. It helps simplify the texturing process of art assets because I exposed parameters that control how the textures appear on the material. This means that the existing textures can be reused in many ways to create a new looking material so the number of textures we need for the game becomes minimal. In fact, if we need any materials other than concrete, we can still create instance from this master material because it allows input texture as well as the alpha mask that control the pattern of the decay.
This material requires two input albedo and one alpha texture that are procedure. Two albedo textures are used to fill in black and white part of the alpha mask. The black section is the main texture of the object, and the white section is the decay part. The decay pattern can be easily changed by changing the input mask and this saved us time because a grayscale/black and white mask is faster to create than a full color detailed texture. The material also takes UV tiling inputs which control the scales of the three input textures and allows input tint color that controls the final tone of the material. Other than this, artists can control the amount of decay they want to appear on the material by adjusting the opacity of the mask or change the projection vector that controls the fading of the decay pattern. I also exposed the metallic and roughness value in case we need to use this material on something else that is not concrete.
Another function I have in this material is allowing snow to appear on top of the surface and inside the mask. The opacity of snow and the fading amount can be adjusted as well.
Another function I have in this material is allowing snow to appear on top of the surface and inside the mask. The opacity of snow and the fading amount can be adjusted as well.

The main reason I used this method for the gameplay space environment instead of relying on vertex painting is because our game has so many levels. There would be too much workload for the artists if we have to paint every dirt and crack by hand. Also, in the production, things always get moved around. If any change is made to the level or mesh, it'll be harder to fix if we use vertex painting. Unlike vertex painting, the decay material is based on the vertex normal and the bounding box of the object. Even if there's any change, the material will account that change into how it appears on objects. The textures are also procedure so this guarantees that the material can work with any shape. When I made this material, I tried to make it as flexible as possible, so it doesn’t limit the creativity of the artists.
Our game has this warm energy material that is used in many objects in the game such as rings, end gates, crystals, moving platforms, and the character's arm. I created this material by feeding noise node into the BlackBody node to get warm temperature color. It was inspired by the explosion material made by Alan Willard (https://www.youtube.com/watch?v=enx6ShyKUL8).
As the material is used so often, I put it into a material function and exposed some parameters so that it can be passed on to other artists. The parameters that I exposed are the noise tiling scale of the warm energy pattern, the animation rate, the tint color and the glow intensity. This allows other artists to adjust the material as needed because different setting works better on different objects. For example, the noise texture is smaller on the character’s arm than the ring because the warm energy area is smaller. The animation rate of the warm energy on the arm is also faster because it only appears in a short moment, unlike the ring that’s always on the screen. When calling this material function, the artists can also combine the warm energy material with alpha mask by using lerp which makes the warm energy appears only on specific pattern.
As the material is used so often, I put it into a material function and exposed some parameters so that it can be passed on to other artists. The parameters that I exposed are the noise tiling scale of the warm energy pattern, the animation rate, the tint color and the glow intensity. This allows other artists to adjust the material as needed because different setting works better on different objects. For example, the noise texture is smaller on the character’s arm than the ring because the warm energy area is smaller. The animation rate of the warm energy on the arm is also faster because it only appears in a short moment, unlike the ring that’s always on the screen. When calling this material function, the artists can also combine the warm energy material with alpha mask by using lerp which makes the warm energy appears only on specific pattern.
Examples of a material that call this warm energy material function
An end gate beam material is designed to use with the end gate beam that is made of a very tall half cylinder mesh. This material is a transparent panning glowing material with a LinearGradient node that fade out the top of the object. Even though this material is only used for the end gate and does not really require an instance material, I find it easier to tweak values in the instance material editor because I can see the result in real time. It helped me get the best result from adjusting the color, the glow intensity and opacity of the material.
For the platform material, I used the world coordinate reference to tile the procedure platform texture that I created in Substance designer. The platforms were made in square, triangle and hexagon and in the levels, they are rotated in different directions. This makes it very hard to arrange the mesh’s UV layout to get the texture tileable. My job was to make the texture on the platform tile up and appear in the same direction, so I came up with a solution of using the world coordinate. Even though this made the material cost more instructions than normal, it's easier for the platform placement and suitable for how much resource we have. Since we have many levels, this method made LDs and artists' job easier when we arranged platforms in the levels.
When setting up the material, I exposed two parameters. One is the rotation of the texture and the other one is the texture tiling size. We want the platform texture direction to point out from the start gate, but not every start gate point to the same direction. When rotating objects that use material with the world coordinate reference, the texture will not rotate. This is good for tiling but cause a problem when we want the texture to follow specific direction. To solve this problem, I added a CustomRotator node that can change the rotation of the texture coordinate and this allows texture to be rotated even with a world coordinate reference.
I created the textures and material for the ice in the gameplay space. This material is made by using multiple bump offsets on textures to create a parallax effect on the surface. The material was modified from the ice material made by Taizyd Korambayil (https://80.lv/articles/developing-artistic-ice-in-unreal-engine-4/). The original material has very nice layers of parallax effect and translucent shading that made the ice looks pretty in every angle. However, our game is fast paced which makes the players unable to see most of the detail. So I minimized the material by taking out some exposing parameters that we don't use and removed the opacity and translucent control. I also changed the material to an opaque subsurface to reduce the shader instructions.

I set up two channels in the ice material for vertex painting. The first channel is for snow. I used the same snow texture as the one in the decay material but added the glitter by feeding noise texture into the emissive.
The second channel of vertex painting is the platform texture which also has world coordinate tiling like the platform material. This channel is to help the transition between platform and ice look smoother. The reason I put the platform vertex paint function in the ice material instead of putting ice vertex paint in the platform material is because the ice material is more complex. It is more reasonable for a simple function to be recalled in a complex function. |
![]() |