Material and Shader Terminology

In graphics programming there are a lot of terms and definitions that need to be understood, even when working at a high level of abstraction. This learning curve is steepened by the fact that different game engines can have different implementations and interpretations of the underlying technology and will often use these terms in subtly different ways.

This page is a glossary of common shader development terminology, explained in plain English with minimal assumed knowledge. It is intended to be used as a companion guide to help explain concepts found in other shader development articles/tutorials.

Some quick context

Most of my experience with materials and shaders has been part of my work as a technical and visual effects artist, bouncing between Unreal Engine and Unity. Although I will do my best to make these terms as engine-agnostic as possible, my approach will necessarily be through the lens of this experience.

Just something to keep in mind!

Table of Contents

What is a Shader?

A shader is a series of instructions and inputs that dictate a rendered object’s appearance. This includes, but isn’t limited to, the object’s color, translucency, shape, position, and how light reacts to its surface.

A range of different types of variable can be defined within a shader. Some of the more common include scalar variables (a single float value), vectors (collections of up to 4 float values which can be interpreted as color information, position, direction, and more), and texture maps.

By declaring Properties within their shader, developers can allow others to set their own values to change how the shader will render the final surface. This is an important component of the creation of Materials, which are explained in more detail below.

The top lines of a newly created Surface Shader in Unity 2021.1. You can see that in the Properties section four variables are being declared.

Depending on the graphics API your game engine of choice is using, shaders are most commonly developed in one of two languages: HLSL for DirectX, or GLSL with OpenGL. When you package/build your game project your HLSL/GLSL shaders will be compiled to support the specific platforms you have chosen. Depending on your target hardware this can get a little complicated, but most commercial game engines will handle this process for you.

Both Unity and Unreal provide node-based visual programming editors through which you can create and edit shaders. These tools will abstract the code-writing aspect of shader development behind a node graph which can make the process much easier to understand. Behind the scenes the engine will be taking those nodes and using them to generate the shader code.

Shader Graph, Unity’s solution for node-based shader development.

In Unreal Engine new shaders are created at the same time as materials, and the terms are sometimes (and incorrectly) used interchangeably. This is because the frontend of the Unreal Material Editor merges the two together, and will save out a node-based version of an HLSL shader and a material that can be applied to objects in the game world as a single asset.

For more information on this distinction check out my Seven Tricks to Speed Up Shader Compilation in Unreal Engine article.

Shader development is a wonderful rabbit hole. If you’d like to learn more about creating shaders using visual programming in either Unreal or Unity I highly recommend checking out Ben Cloward’s new Shader Graph Basics series on YouTube. He’ll take you through the entire process in both engines.

If you’re more interested in the nuts and bolts of HLSL, take a look at the Book of Shaders by Patricio Gonzalez Vivo and Jen Lowe. It’s still a work in progress, but it’s a great place to start.

What is a Material?

A Material is an asset that, when combined with a shader and a selection of input values, can be applied to an object to change the properties of its surface. Unlike shaders, materials can be created and modified at runtime.

One significant point of difference between Unity and Unreal is that in the latter, materials and shaders are created at the same time. This means that in Unreal a Material cannot be edited outside of the Material Editor except through the creation of Material Instances.

To put it another way: In practical terms Unity Materials and Unreal Material Instances are analogous and serve the same function.

A Material in Unity (left) compared to an identical Material Instance in Unreal.

What is a Master Material?

A Master Material is a term I have found most commonly used within the Unreal Engine community to describe a particularly versatile material/shader combination that utilizes a host of configurable parameters intended to support a wide range of possible surfaces.

Five different Material Instances that use different configurations of the same Master Material.

A Master Material may have many dozens of configurable options, often gated with switches so the engine does not need to compile branches of the shader that the particular instance of the Material doesn’t require.

In Unity the default Standard shader could be considered a ‘Master Material’, although the language can get a little confusing here. I’ve noticed Unity developers tend not to use the term ‘Master’ as much, as it means something else in the Shader Graph.

For more information on the creation and application of Master Materials, check out my article on The Anatomy of an Unreal Engine Master Material, which looks at a practical example step-by-step.

Watch this space!

I hope this page has helped contextualize some of the common terms I use in my articles here on techarthub. As the site continues to grow I hope to come back with relevant updates as more resources are made available.

Sometimes its hard to know what information is important to include in these articles, so if I’ve left you confused or with further questions please don’t hesitate to reach out. I’d like this resource to be as useful as possible, and if I’ve not explained something well enough I’d really like to know!

You can reach me here on techarthub, or find me in the community Discord Server.

Thanks a lot for reading, and good luck with your projects!

I am a technical artist from Adelaide, Australia. I created techarthub to share my knowledge and love for this industry. I hope you feel it too!

Welcome to techarthub

Hey there, I’m Nick!

Within these digital walls you’ll find a collection of guides and tutorials on a range of topics, as well as the assets, projects, and other resources I’ve created over the years.

Thank you so much for taking the time to look through my work.

I hope you find what you’re looking for!

Join the Community

Join the techarthub Discord Server, a community of technical art enthusiasts just trying to figure it all out together.

If you would like to support the creation of more techarthub content please consider becoming a Patron.

More from techarthub
A practical guide to Unity's units of measurement, why they are important, and how you can alter them to suit your project's needs.
Creating a player-facing framerate display only requires a Widget Blueprint and a little math.
In your technical animation arsenal there are few weapons more powerful than Anim Notifies.
This guide will explore the ins and outs Unity’s coordinate system, and show why understanding its eccentricities is so important.

Related Posts

An exploration of three different ways to create a hexagonal sphere in Maya.
The X, Y, and Z of how Maya places objects in 3D space, with some useful charts along the way.
When creating a new Unreal Engine project, one of the first decisions you’ll need to make is between using either Blueprint or C++ as your foundation.
Scroll to Top