This tutorial walks through creating a flexible fluted glass material in Unreal Engine 5 using normal maps to simulate light distortion. Instead of modeling grooves directly into the glass, you’ll use a normal map to refract light, producing realistic fluted, ribbed, or patterned glass with excellent performance.
Step 1 – Create the Normal Map
*Before starting, under the Edit Menu, open Editor Preferences and search for Substrate
Make sure to turn off the Substrate materials options
The normal map is responsible for distorting the image seen through the glass
Step 2 – Create the Material
Right-click in the Content Browser and create a new material – giving it a proper name
Double-click on it to open it in the Material Editor
The mesh itself affects the final result
If your window mesh has real thickness, use the material normally
If your glass is a single polygon plane – like my mesh – you need to enable the Two Sided option in the Details panel of the material
Without it, the glass disappears when viewed from the back
Be aware that two-sided materials invert the normal map on the opposite side
Step 3 – Material Settings
Select the main material node
Change the Blend Mode to Translucent
Under Translucency, for the Lighting Mode, change this to Surface Translucency Volume
This restores the following inputs:
- Specular
- Roughness
- Metallic
- Normal
Under the Refraction section, change the Refraction Method to Index of Refraction which gives you an input for Refraction
Step 4 – Create Basic Glass Parameters
Base Glass
Create a Vector 3 Parameter by holding down the 3-key and left-clicking in the graph
Leave the color as the default black and connect it to the Base Color
Specular
Add a Scalar Parameter by holding down the S-key and left-clicking
Rename the Parameter to Specular and change the Default Value to 0.5
Connect the Parameter to Specular input
Roughness
Add a Scalar Parameter by holding down the S-key and left-clicking
Rename the Parameter to Roughness and leave the Default Value at 0
Connect the Parameter to Roughness input
Opacity
Add a Scalar Parameter by holding down the S-key and left-clicking
Rename the Parameter to Opacity and change the Default Value to 0.3
Connect the Parameter to Opacity input
Box select these nodes and use the C-key to group them
Title the Comment Base Glass
Step 5 – Add the Normal Map
Drag one of your Normal Map Textures into the Material Editor
Right-click on the node and convert it into a Parameter named NormalMap
This allows different glass styles to use the same master material
Add a Comment and rename it NormalMap
Connect the Normal Map to the Normal input
Step 6 – Add UV Controls
To make the material reusable, expose tiling and rotation
Tiling
Right-click and search for the Texture Coordinate node [texcoord]
Add a Scalar Parameter by holding down the S-key and left-clicking
Rename the Parameter to Tiling and change the Default Value to 1
Hold down the M-key and left-click to add a Multiply node
Connect the Texture Coordinate and Scalar nodes to the Multiply node
Rotation
Right-click and search for Custom Rotator
Connect the Multiply node to the UVs input
Hold down the 1-key and left-click to add a Constant Vector node
Set the Default Value to 1
Connect it to the Rotation Center input
Add a Scalar Parameter by holding down the S-key and left-clicking
Rename the Parameter to RotationAngle
Since the Rotation Angle of the Custom Rotator is limited to 0-1, hold down the D-key and left-click to add a Divide node
Connect the Rotation Angle to the A-input of the Divide node and change the B-input to 360 (for 360-degrees)
Connect this result into the Rotation Angle input
Select these nodes and add a Comment and rename it UV
Connect the Custom Rotator to the UVs input of the Normal Map
Now the texture can be rotated by simply entering degrees
Step 7 – Add Normal Intensity
Being able to control the strength of the grooves makes the material much more flexible
Add a Scalar Parameter by holding down the S-key and left-clicking
Rename the Parameter to NormalIntensity
Change the Default Value to 1
Hold down the M-key and left-click to add a Multiply node
Connect the Red Channel of the Normal Map to the A-input of the Multiply node
Connect the Normal Intensity to the B-input of the Multiply node
This will represent the X-Axis
Use CTRL + D to duplicate the Multiply node
Connect the Green Channel of the Normal Map to the A-input of the Multiply node
Connect the Normal Intensity to the B-input of the Multiply node
This will represent the Y-Axis
Right-click and search for an Append Vector node
Connect the Red Channel Multiply node to the A-input
Connect the Green Channel Multiply node to the B-input
Use CTRL + D to duplicate the Append Vector node
Connect the first Append Vector node to the A-input
Connect the Blue Channel (Z-Axis) to the B-input
This will reassemble the channels and make sure everything is appearing correctly
Connect the second Append Vector node to the Normal input
Select these nodes and add a Comment and rename it Normal Intensity
Apply and Save the material
Step 8 – Create a Material Instance
Back in the Level, right-click on the Material and create a Material Instance
Drag the Material Instance onto your glass static mesh
Double-click to open the Material Instance
Now you can change the Parameters we set up earlier in the Master Material
Step 9 – Build the Refraction Network
When light travels from one medium to another, such as air into glass, it bends
This bending is called refraction
The amount of bending is controlled by the material’s Index of Refraction (IOR)
To reproduce that behavior, use a Fresnel
Hold down the 1-key to add a Constant Vector and change the Default Value to 1
Hold down the S-key to add a Scalar Parameter and rename it to IOR
Change the Default Value to 1.52 (this is the standard IOR of glass)
Right-click and search for the Fresnel node
Hold down the S-key to add a Scalar Parameter and rename it to FresnelFalloff
Change the Default Value to 5 and connect it to the Exponent input of the Fresnel node
Hold down the L-key and Left-click to add a Lerp node – this will allow you to blend the Fresnel nodes
Connect the Constant Vector to the A-input
Connect the IOR to the B-input
Connect the Fresnel to the Alpha-input
Select these nodes and add a Comment and rename it IOR
Connect the Lerp node to the Refraction input
Apply and Save the material
If you open the Material Instance you will notice you have two more Parameter Values
Step 10 – Create Different Glass Styles
Since the master material is driven entirely by the normal map, you can quickly create new styles by swapping textures
Conclusion By combining a tiled normal map with physically based refraction and Fresnel blending, you’ve created a highly reusable fluted glass shader that can produce a wide variety of decorative glass effects. Exposing parameters such as tiling, rotation, normal intensity, IOR, opacity, and Fresnel falloff allows artists to create everything from subtle ribbed glazing to heavily distorted privacy glass using a single master material and lightweight normal textures.