How to create and optimize complex materials in Unreal Engine 5?

Hello Unreal community!
I’m working on a project where I need to create custom materials for different surfaces, including metal, glass, and fabrics. I’ve been experimenting with the Material Editor, but I’m running into a few challenges when it comes to creating realistic-looking and performance-friendly materials.

Here’s what I’ve done so far:

I’ve used base color, normal, roughness, and metallic maps to create some basic materials.
I’ve experimented with the Material Instance system to make dynamic changes.
I’ve added some simple effects like emissive and opacity for glass materials.

However, I have a few questions:

  1. How do you achieve photorealism without sacrificing performance?
    For example, how can I make materials like metal or glass look realistic without using too many expensive nodes?
  2. What are the best practices for creating translucent materials like glass or water?
    I’ve noticed performance drops when using translucent materials — are there any specific optimizations for this?
  3. When should I use Material Functions?**
    I’ve seen people use Material Functions to simplify their graphs, but I’m not sure when they are necessary and how to properly set them up.

I’d appreciate any tips or suggestions, especially on how to balance visual quality and performance when working with complex materials. Thanks in advance!

1 Like

You can have great photo realism with just the basic setup ( color normal rough etc ).

You will always run into trouble with translucency, because its more complex to compute at runtime. Glass in front of glass is very bad.

If you want to make water, the ‘single layer water’ shader mode might be good for you. If you don’t need to swim in it, but just need to look into it, its great.

As a guide, just take a look at how much the changes you make to certain materials make to the frame time ( shader complexity view is also useful ALT-8 ). If things slow down a lot, try removing nodes to see what’s causing the problem.

Material instances don’t really add to the cost, they’re just a easy way of manipulating parameters.

Material functions are just for convenience, and aren’t a way of optimizing.