Logo of sharetextures

PBR Textures: What They Are and How to Use Them in Game Development?

3 hours ago
PBR Textures: What They Are and How to Use Them in Game Development?

If you have spent any amount of time in the modern 3D graphics, game development, or architectural visualization industries, you have inevitably encountered the acronym PBR. Physically Based Rendering has completely revolutionized how artists and developers create digital materials. Gone are the days of manually painting highlights and shadows directly onto a diffuse map to fake realism. Today, the industry relies on a scientific, standardized approach that ensures materials look incredibly realistic regardless of the lighting environment they are placed in.

Whether you are an aspiring 3D artist aiming to build a stunning portfolio, a technical artist optimizing asset pipelines, or an indie game developer trying to make your first title look AAA in Unreal Engine 5, understanding PBR is absolutely essential. This comprehensive guide will break down exactly what PBR is, explore the vital texture maps that make it work, and provide a deep dive into implementing and optimizing these materials specifically within Unreal Engine.


What is PBR (Physically Based Rendering)?

Physically Based Rendering (PBR) is a methodology for shading and rendering that provides a more accurate representation of how light interacts with surfaces in the real world. Instead of relying on artistic approximations or "eyeballing" how a material should look, PBR relies on mathematical formulas derived from actual physics.

To truly understand PBR, you need to understand two fundamental physical concepts that drive the rendering system:

  • Energy Conservation: In the real world, an object can never reflect more light than it receives. If a surface is highly reflective (like a mirror), it will scatter very little light, meaning its base color will appear darker. Conversely, a rough surface like chalk scatters light in many directions, reducing its direct reflectivity but making its base color more visible. PBR shaders handle this balance automatically, ensuring that materials never break the laws of physics.

  • Microfacet Theory: PBR assumes that every surface, even one that looks perfectly flat to the naked eye, is composed of microscopic bumps and grooves called microfacets. When light hits a smooth surface (where microfacets are aligned), the light reflects in a single direction, creating a sharp, bright highlight. When light hits a rough surface (where microfacets are scattered randomly), the light bounces in multiple directions, resulting in a blurred, dimmer highlight.

Because PBR is grounded in these physical realities, a PBR asset created for a brightly lit daytime scene will look mathematically correct when dragged and dropped into a moody, dimly lit nighttime scene. This universal consistency is exactly why Epic Games built the entirety of Unreal Engine’s rendering pipeline around the PBR workflow.


The Core Components of a PBR Material

A standard PBR material is not a single image file. Instead, it is a collection of specific grayscale and color images, known as "maps," which are layered together within Unreal Engine's Material Editor. Each map dictates a different physical property of the surface. While there are a few variations of the PBR workflow, Unreal Engine champions the Metallic/Roughness workflow.

Here is a detailed breakdown of the essential maps you will use every day.

Albedo (Base Color) Map

The Albedo map, referred to as "Base Color" in Unreal Engine, is the foundational building block of your material. It is an RGB texture that contains strictly the color data of the surface.

The most critical rule of an Albedo map is that it must contain zero lighting information. In older texturing workflows, artists would paint shadows into the crevices of a brick wall or add white highlights to the edges of a metal barrel. In a PBR workflow, doing this breaks the material. Unreal Engine's dynamic lighting and Lumen global illumination will handle all the shadows and highlights. The Albedo map should look completely flat. For dielectrics (non-metals like wood, plastic, or stone), the Albedo represents the surface color. For metals, the Albedo represents the wavelength of light the metal reflects (for instance, gold will have a yellow Albedo, while aluminum will have a light gray Albedo).

Normal Map

While 3D models are composed of polygons, creating a model with enough polygons to represent every tiny scratch, pore, or bump would immediately crash your game. The Normal map is the ingenious solution to this problem.

A Normal map is an RGB texture that uses color channels to tell the game engine's lighting system which way a microscopic surface is facing. The Red channel dictates left/right facing, the Green channel dictates up/down facing, and the Blue channel dictates straight forward. By reading this map, Unreal calculates shadows and highlights as if the surface had millions of microscopic polygons, adding incredible depth and detail to a mathematically flat surface.

Roughness Map

The Roughness map is arguably the most important map for defining the "feel" and character of a material. It is a grayscale image that dictates how rough or smooth a surface is, operating directly on the microfacet theory mentioned earlier.

In a Roughness map, the values range from 0 to 1 (or black to white). A pure black value (0) means the surface is perfectly smooth, like wet glass or a clean mirror, resulting in sharp, focused reflections. A pure white value (1) means the surface is incredibly rough, like dry dirt or unfinished concrete, resulting in dull, scattered reflections. By painting variations of gray into this map, artists can tell stories—adding smudges to a glass window, wet spots to a pavement, or worn edges to a painted metal tool.

Metallic Map

The Metallic map acts as a mask that tells the shader whether a part of the material is metal or non-metal (dielectric). Like the Roughness map, it is a grayscale image.

In the physical world, things are generally either metal or they are not. Therefore, your Metallic map should mostly consist of pure black (for non-metals like wood, plastic, and dirt) and pure white (for raw, exposed metals like steel or iron). Gray values are rarely used, except to represent transitions, such as a thin layer of dust sitting on top of a metal surface, or rust beginning to eat away at iron.

Ambient Occlusion (AO) and Displacement Maps

While Albedo, Normal, Roughness, and Metallic are the core four, two other maps are frequently used to push realism further.

  • Ambient Occlusion (AO): A grayscale map that calculates soft, self-shadowing in the deep crevices of a model where ambient light struggles to reach. It adds subtle weight and grounding to the object.

  • Displacement (Height) Map: A grayscale map used for actual geometric displacement. In Unreal Engine 5, this is heavily utilized in conjunction with Nanite to physically push the vertices of the 3D model outward based on the white values in the map, creating true, incredibly detailed 3D silhouettes without the traditional performance costs.

PBR Workflows: Metallic/Roughness vs. Specular/Glossiness

While Unreal Engine uses the Metallic/Roughness workflow by default due to its simplicity and memory efficiency, an alternative exists: the Specular/Glossiness workflow. Both achieve physically accurate results, but they process data differently.



FeatureMetallic / Roughness Workflow (Unreal Standard)Specular / Glossiness Workflow (Alternative)
Base Color MapAlbedo (Metals have color, non-metals have color)Diffuse (Metals are pure black, non-metals have color)
Reflection MapMetallic (Black/White mask for metals)Specular (RGB map defining reflection color and intensity)
Micro-surface MapRoughness (White = Rough, Black = Smooth)Glossiness (White = Smooth, Black = Rough - inverted)
ProsSimpler to author, uses less texture memory, standard in UE.Allows direct control over dielectric reflectance.
ConsLess control over specific non-metal reflection values.Harder to author correctly, breaks energy conservation if misused, uses more memory.


Mastering PBR Implementation in Unreal Engine

Having high-quality textures is only half the battle. Knowing how to implement and optimize them within Unreal Engine is what separates amateurs from professionals. Unreal uses a highly visual, node-based Material Editor that makes implementing PBR textures incredibly intuitive, but there are strict rules you must follow.

The Standard Node Setup

If you are importing individual texture files, setting up a basic material takes only a few minutes:

  1. Import: Drag your textures (Albedo, Normal, Roughness, Metallic, AO) into your Content Browser.

  2. The sRGB Rule (Crucial): Double-click your Roughness, Metallic, and AO maps to open their texture settings. Uncheck the "sRGB" box. These maps contain linear mathematical data, not color data. Leaving sRGB checked will cause Unreal Engine to apply a gamma curve to the math, resulting in materials that look incorrectly shiny or excessively matte. The Albedo map must keep sRGB checked, as it contains visual color data.

  3. Material Graph: Create a new Material and open the Material Graph.

  4. Connections: Drag your textures into the graph.

    • Connect the RGB output of the Albedo map to the Base Color pin.

    • Connect the RGB output of the Normal map to the Normal pin.

    • Connect the Red channel (or RGB, as it is grayscale) of the Roughness map to the Roughness pin.

    • Connect the Red channel of the Metallic map to the Metallic pin.

    • Connect the Red channel of the AO map to the Ambient Occlusion pin.

  5. Apply the material to your mesh, and it will react perfectly to Unreal's lighting.

Optimization: Channel Packing (ORM Maps)

In professional game development, using three separate grayscale texture files for AO, Roughness, and Metallic is considered incredibly wasteful for texture memory and draw calls. Because they are all grayscale images, they only use one channel of data each.

Unreal Engine developers heavily rely on Channel Packing, commonly referred to as an ORM Map (Occlusion, Roughness, Metallic) or RMA Map (Roughness, Metallic, Ambient Occlusion). You take a single RGB texture file and pack the grayscale maps into its individual color channels using software like Photoshop or Substance Painter:

  • Red Channel: Ambient Occlusion

  • Green Channel: Roughness

  • Blue Channel: Metallic

How to set this up in Unreal Engine:

  1. Import your single ORM texture.

  2. Uncheck the "sRGB" box in the texture settings (since none of it is color data).

  3. In your Material Graph, bring in the ORM Texture Sample.

  4. Connect the R pin to Ambient Occlusion.

  5. Connect the G pin to Roughness.

  6. Connect the B pin to Metallic.

You have just reduced three texture calls down to one, massively improving your game's performance while maintaining the exact same visual quality!

Master Materials and Material Instances

Another Unreal Engine-specific best practice is to stop creating a brand new Material for every single prop in your game. Compiling materials is computationally heavy.

Instead, create one Master Material. In this Master Material, instead of plugging specific textures in, convert your Texture Samples into Parameters (Right-click a node -> Convert to Parameter) and name them (e.g., "Albedo_Texture", "Normal_Texture").

Once saved, you can right-click this Master Material in your Content Browser and select Create Material Instance. An Instance does not require compilation. It simply gives you a lightweight properties panel where you can drag and drop your new PBR textures into the slots you created. This allows you to have 1,000 different props utilizing 1,000 different PBR texture sets, while the engine only has to calculate the shader logic once.

Why ShareTextures is Your Go-To Source for PBR Materials

Creating highly accurate, seamless PBR materials from scratch is a time-consuming process that requires advanced procedural generation skills. For most artists and developers, the most efficient workflow is to utilize high-quality, pre-made assets.

This is where ShareTextures becomes an invaluable tool in your Unreal Engine pipeline. We provide a massive library of meticulously crafted, seamless PBR materials ready to be dropped directly into your project. Our Online Unreal Engine Material Library plugin connects ShareTextures Library to the Unreal Engine environment easly. 
Whether you are building a medieval fantasy RPG and need the perfect PBR medieval wood and stone textures, or you are developing a sci-fi shooter and require intricate metal and flooring materials, our library is designed to save you countless hours of production time. By exploring our diverse collection of free PBR materials, you can guarantee that your Unreal Engine environments remain physically accurate, cohesive, and visually breathtaking.


External Resources for Deep Dives

If you want to push your technical understanding of the mathematics and physics behind PBR shading even further, we highly recommend exploring these definitive resources:


Frequently Asked Questions (FAQ)

What is the difference between sRGB and Linear color space in Unreal Engine? sRGB is a gamma curve applied to images so they look correct to the human eye on a monitor; it is used for color data like Albedo maps. Linear space removes this curve, representing raw mathematical data. Grayscale PBR masks (Roughness, Metallic, AO, Height) must be set to linear (sRGB unchecked) in Unreal, otherwise, the engine will apply a color curve to your math, resulting in incorrect material behavior.

Can I use high-resolution 4K/8K PBR textures in Unreal Engine 5? Yes, Unreal Engine 5 handles high-resolution textures exceptionally well, especially with Virtual Texturing enabled. However, resolution should still depend on camera proximity. A hero prop might need 4K, but a background prop is perfectly fine at 1K. To optimize memory, always utilize ORM channel packing regardless of your texture resolution.

How do I adjust the intensity of my Normal map in Unreal Engine? You can control Normal map intensity directly in the Material graph without editing the image file. Bring in your Normal Texture Sample, and connect it to a "FlattenNormal" node. You can then plug a Scalar Parameter into the "Flatness" pin of that node. A value of 0 is the default intensity, while a value of 1 completely flattens the normal map. Negative values will increase the intensity of the bump.

Keep in touch:)