Skip to main content

🎨 Materials and Lighting Basics

Materials and lighting work together to create the visual appearance of your 3D world. Materials define how surfaces look—their color, shininess, texture—while lighting reveals those properties and creates mood. In this lesson, you'll learn the fundamentals of Unreal's Physically Based Rendering (PBR) material system and how to set up basic lighting for realistic and stylized scenes.

🎯 Learning Objectives

By the end of this lesson, you will be able to:

  • Explain what Physically Based Rendering (PBR) is and why Unreal uses it
  • Create and edit materials in the Material Editor
  • Understand the core PBR material inputs: Base Color, Metallic, Roughness, Normal
  • Work with textures and texture samplers
  • Create Material Instances for efficient variations
  • Place and configure light types: Directional, Point, Spot, and Rect Lights
  • Understand light mobility: Static, Stationary, and Movable
  • Build lighting and troubleshoot common issues
  • Create basic lighting setups for different moods and times of day

Estimated Time: 75-90 minutes

Prerequisites: Lesson 2.4 - Static Meshes and Assets

📑 In This Lesson

What Are Materials?

Imagine you have a perfectly modeled 3D chair—every edge, curve, and detail is geometrically accurate. But when you look at it in your level, it's just a flat gray shape. Without materials, there's no wood grain, no leather texture, no shine on the metal legs. Materials are what transform gray geometry into believable surfaces.

📖 Definition

Material: A set of instructions (a shader program) that tells the rendering engine how a surface should interact with light. Materials define color, texture, reflectivity, roughness, transparency, and other visual properties. They're the "skin" you put on 3D geometry to make it look like wood, metal, cloth, plastic, or any other real or imagined substance.

Materials Are Visual Programs

In Unreal Engine, materials are created using a node-based visual scripting system. Instead of writing code, you connect blocks (nodes) together to define how light interacts with the surface. Think of it like a flowchart where data flows from left to right:

  • Input nodes: Textures, constants, parameters
  • Math nodes: Add, multiply, blend operations
  • Output node: The final material result with properties like color and roughness

Figure: Material data flows from input nodes (left) through processing nodes to the output node (right).

Why Materials Matter

Materials are responsible for almost everything you see in a game:

  • Realism: A wooden table looks wooden because its material simulates wood grain, subtle color variation, and the way light scatters on rough wood surfaces
  • Performance: Well-optimized materials render quickly; complex materials can tank framerate
  • Consistency: Materials ensure all wood in your game looks consistently "woody," all metal looks metallic
  • Art direction: Materials define the visual style—realistic, stylized, cartoon, sci-fi, fantasy
  • Special effects: Water ripples, glowing force fields, holographic displays—all materials

Materials vs. Textures

A common beginner confusion: What's the difference between a material and a texture?

Aspect Texture Material
What is it? An image file (PNG, JPG, TGA) A shader program (node graph)
Function Provides data (colors, patterns, details) Defines how surface interacts with light
Usage Input to materials Applied to 3D meshes
Example A photo of brick wall Brick material using the photo + roughness + normal maps
Can exist alone? Yes—just sits in Content Browser Yes—but needs to be applied to geometry to be visible

Think of it this way: Textures are the ingredients (flour, sugar, eggs). Materials are the recipe that combines ingredients to make a cake. You apply the cake (material) to your 3D mesh.

💡 Real-World Analogy

Imagine painting a wall in your house. The paint itself is like a material—it has properties like color, shininess (matte vs. glossy), and how it reflects light. But you might mix in additives like texture compound to give it a rough surface, or metallic flakes for sparkle. Those additives are like textures—data inputs that modify the material's final appearance. The wall you're painting is the 3D mesh.

Physically Based Rendering (PBR) Fundamentals

Unreal Engine uses a rendering technique called Physically Based Rendering (PBR). Understanding PBR is essential to creating convincing materials.

📖 Definition

Physically Based Rendering (PBR): A rendering approach that simulates how light interacts with surfaces based on real-world physics. Instead of artistic "faking," PBR materials use physically accurate properties like energy conservation, Fresnel effects, and microfacet theory. This creates realistic, consistent results under different lighting conditions.

Why PBR?

Before PBR, game artists manually "faked" how materials looked under different lighting. A shiny metal sword might look great in one scene but terrible in another because the shading wasn't based on physics. PBR solves this:

  • Consistency: Materials look correct under any lighting condition
  • Realism: Follows real-world light physics
  • Artist-friendly: Intuitive parameters (roughness, metallic) instead of obscure shader values
  • Industry standard: PBR workflows are used across games, film, and visualization

The Core PBR Material Inputs

Every PBR material in Unreal is built from a few key inputs. Understanding these is crucial:

PBR Material Inputs Base Color The inherent color of the surface (Albedo) Metallic 0 = Non-metal 1 = Pure metal (Binary choice) Roughness 0 = Smooth/Mirror 1 = Rough/Matte (Microsurface) Specular Fresnel strength (Usually 0.5) (Rarely changed) Normal Surface detail via normal map (Fake geometry) Emissive Self-illumination (Glowing surfaces) (Optional) Opacity Transparency 0 = Invisible (For translucent) Ambient Occ. Crevice darkening (Baked shadows) (Optional) Usage Priority Essential: Base Color, Metallic, Roughness Important: Normal (for detail) Situational: Emissive, Opacity, AO, Specular 💡 Most materials need only Base Color, Metallic, Roughness, and Normal

Figure: The key PBR material input channels and their purposes.

1. Base Color (Albedo)

Base Color is the inherent color of the surface—what it looks like under pure white light with no shadows or reflections. It's also called "Albedo."

  • For non-metals: This is the actual color (red paint, green grass, brown wood)
  • For metals: This becomes the reflection color (gold reflects yellow/orange, copper reflects orange/brown)
  • Input: RGB color (0-1 range for each channel, or texture)

⚠️ Common Mistake: Base Color Too Dark or Too Bright

In PBR, Base Color values should typically be in the 50-240 range (out of 255). Pure black (0, 0, 0) or pure white (255, 255, 255) are physically incorrect for almost all real-world materials. Most surfaces reflect 4-90% of light. Exception: Emissive surfaces can be any brightness.

2. Metallic

Metallic is a binary choice: Is this surface a metal or not?

  • 0 (Non-metal): Plastic, wood, cloth, stone, organic materials—most things
  • 1 (Metal): Iron, copper, gold, silver, aluminum, chrome
  • In between: Rarely used—maybe for oxidized metal (0.8), or metal dust on surface (0.2)

In the real world, things are either conductors (metals) or insulators (everything else). PBR respects this by treating Metallic as mostly binary.

3. Roughness

Roughness defines the microsurface—how smooth or rough the surface is at a tiny scale.

  • 0 (Smooth): Perfect mirror—sharp, clear reflections
  • 0.1-0.3: Glossy—shiny plastic, polished metal, wet surfaces
  • 0.4-0.6: Semi-gloss—painted walls, satin fabric
  • 0.7-0.9: Matte—unfinished wood, rough stone, fabric
  • 1.0 (Rough): Completely diffuse—clay, chalk, heavily weathered surfaces

Roughness is one of the most important properties—it dramatically affects how materials look. A shiny surface catches the eye; a matte surface recedes.

Figure: The same sphere at different roughness values shows how surface finish affects reflections.

4. Normal

Normal maps add surface detail without adding geometry. They "trick" the lighting calculation into thinking the surface has bumps, scratches, grooves, and texture.

  • Input: A special texture (typically blue/purple-ish) that encodes surface normal directions
  • Effect: Makes flat surfaces appear to have depth and detail
  • When to use: Almost always—it's how you add bricks to a wall, grain to wood, stitching to fabric

Normal maps are created in 3D modeling software (baked from high-poly models) or generated from height maps.

5. Emissive

Emissive makes surfaces glow—they emit light rather than just reflect it.

  • Input: Color (RGB) with intensity
  • Use cases: Neon signs, LED displays, glowing crystals, lava, lightsabers
  • Note: Emissive doesn't actually cast light on other objects unless you enable specific settings (bloom, light propagation)

Other Inputs (Less Common)

Specular: Controls Fresnel reflections (edge reflections). Usually left at default (0.5). Only change for special cases like wet surfaces (0.6-0.7) or certain plastics.

Opacity: For transparent/translucent materials (glass, water, ghosts). Requires changing material blend mode from "Opaque" to "Translucent" or "Masked."

Ambient Occlusion (AO): Pre-calculated shadows in crevices. Often baked into textures. Adds subtle darkening where surfaces meet.

PBR Best Practices

  1. Start simple: Begin with Base Color, Metallic, and Roughness
  2. Reference reality: Look at real-world materials—wood is never 100% rough, metal is never perfectly smooth
  3. Vary roughness: Real surfaces have variation—add subtle roughness noise/texture
  4. Metallic is binary: Use 0 or 1 for 99% of materials
  5. Test in different lighting: PBR's strength is consistency—verify your material looks good in daylight, night, indoor, outdoor

The Material Editor

The Material Editor is where you create and edit materials using Unreal's node-based visual scripting system. Think of it as a canvas where you wire together nodes to define how a surface should look.

Opening the Material Editor

  1. In Content Browser, find a material asset (or create one: right-click → Material)
  2. Double-click the material
  3. The Material Editor opens in a new window

Material Editor Interface

Material Editor - M_Wood_Oak Save Apply Stats Preview PALETTE ▾ Inputs Texture Sample Constant Parameter ▾ Math Add Multiply Lerp ▾ Utility Comment Reroute Texture Sample RGB Constant 0.5 Multiply A B Material Output Base Color Metallic Roughness Normal Emissive PREVIEW DETAILS Material Domain Surface Blend Mode Opaque Shading Model Default Lit Stats Instructions: 142 Samplers: 3 ← Node palette (drag to add) Main node graph (wire nodes together) → Preview + settings →

Figure: The Material Editor interface with palette, node graph canvas, and preview panel.

Key Areas of the Material Editor

1. Node Palette (Left)

The palette contains all available nodes organized by category:

  • Texture: Texture Sample nodes for importing textures
  • Constants: Fixed values (numbers, colors)
  • Parameters: Values that can be changed in Material Instances
  • Math: Add, Multiply, Divide, Lerp (blend), etc.
  • Utility: Comments, reroute nodes, switches

To add a node: Drag from palette, or right-click in canvas and search.

2. Node Graph Canvas (Center)

This is where you build your material. The workflow:

  1. Add nodes from the palette or by right-clicking
  2. Connect nodes by dragging from output pins (right side) to input pins (left side)
  3. Wire to output—everything eventually connects to the Material Output node
  4. Compile—Unreal processes your node graph into a shader

Navigation:

  • Pan: Middle-mouse drag, or right-click drag
  • Zoom: Mouse wheel
  • Select: Click nodes, drag selection box
  • Move nodes: Click and drag

3. Preview Panel (Right)

Shows a real-time preview of your material on a 3D shape (sphere, cube, plane, or custom mesh). As you edit nodes, the preview updates.

You can rotate the preview object (click and drag) and change lighting to see how your material responds.

4. Details Panel (Bottom Right)

Shows properties of the selected node or the material itself:

  • Material Domain: Surface, Deferred Decal, Light Function, etc.
  • Blend Mode: Opaque, Masked, Translucent, Additive
  • Shading Model: Default Lit, Unlit, Subsurface, Clear Coat, etc.
  • Two Sided: Whether backfaces are visible

Understanding Node Pins

Nodes have input pins (left side) and output pins (right side). Pins are color-coded by data type:

Color Data Type Example
● Green Float (single number) Roughness value (0.5)
● Blue Vector3 (three numbers) RGB color (0.8, 0.4, 0.2)
● Purple Vector4 (four numbers) RGBA with alpha
● Orange Texture Object The texture asset itself
● Red Boolean True/False switches

You can connect mismatched types—Unreal converts automatically (e.g., connecting a Vector3 to a Float uses the first component).

✅ Pro Tip: Right-Click Everywhere

The Material Editor's right-click context menu is incredibly powerful. Right-click in empty space to add nodes (search for any node by name). Right-click on a pin to quickly add common math operations or promote values to parameters. Right-click on nodes to convert constants to parameters, add comments, or duplicate. Mastering right-click will 10x your speed.

Creating Your First Material

Let's create a simple material from scratch to understand the workflow. We'll make a basic colored, glossy plastic material.

Step 1: Create a New Material

  1. In Content Browser, navigate to a folder (e.g., Content/MyProject/Materials/)
  2. Right-click in empty space → Material
  3. Name it M_PlasticRed
  4. Double-click to open in Material Editor

Step 2: Set Base Color

  1. Right-click in the node graph
  2. Type "constant 3" and select Constant3Vector (this creates an RGB color)
  3. Place the node somewhere left of the Material Output node
  4. Double-click the Constant3Vector node
  5. In the color picker, choose a red color (e.g., R=0.8, G=0.1, B=0.1)
  6. Drag from the output pin of your color node to the Base Color input on Material Output

You should see the preview sphere turn red!

Step 3: Set Metallic

  1. Right-click in graph, type "constant" and select Constant (single number)
  2. Place it below your color node
  3. Click the node, in Details panel set its value to 0 (plastic is non-metal)
  4. Connect it to the Metallic input on Material Output

Step 4: Set Roughness

  1. Add another Constant node
  2. Set its value to 0.2 (glossy plastic)
  3. Connect to Roughness input

Now your material should look like shiny red plastic!

Step 5: Save and Apply

  1. Click Save button (or Ctrl+S)
  2. Click Apply to compile the material
  3. Close the Material Editor
  4. Drag M_PlasticRed from Content Browser onto a mesh in your level
  5. The mesh should now appear as red plastic!

💡 Quick Material Creation Summary

The basic workflow for any material:

  1. Create Base Color (usually Constant3Vector or Texture Sample)
  2. Set Metallic (0 for non-metal, 1 for metal)
  3. Set Roughness (0 = shiny, 1 = matte)
  4. Optionally add Normal map for detail
  5. Save, apply, and test in level

That's it! These three properties (Base Color, Metallic, Roughness) create 90% of all materials.

Experiment: Make Variations

Try modifying your material:

  • Change color: Double-click the Constant3Vector, pick a different color
  • Make it matte: Change Roughness to 0.8
  • Make it metal: Change Metallic to 1.0—now it's red chrome!
  • Add variety: Right-click → "Multiply", multiply Base Color by another color to darken or tint

Working with Textures

While constant values are great for learning, real materials use textures—images that provide detailed color, roughness variation, and surface detail. Let's enhance our material with textures.

Texture Types in PBR

A typical PBR material uses several texture maps, each serving a different purpose:

Texture Map Connects To Content Example
Diffuse/Albedo Base Color Surface colors (no shadows or highlights) Wood grain color, brick tones
Normal Map Normal Surface bumps encoded in RGB (bluish-purple) Brick mortar grooves, wood grain ridges
Roughness Map Roughness Grayscale (black=smooth, white=rough) Worn metal edges, polished wood centers
Metallic Map Metallic Grayscale (black=non-metal, white=metal) Metal bolts on wooden surface
AO Map Ambient Occlusion Grayscale (shadows in crevices) Darkening where surfaces meet
Emissive Map Emissive RGB color (glowing areas) LED lights on a panel, glowing runes

Importing Textures

  1. Get texture files (PNG, JPG, TGA, EXR)
  2. In Content Browser, navigate to Content/MyProject/Textures/
  3. Drag texture files from Windows Explorer into Content Browser
  4. They import as Texture assets (automatically)

💡 Free PBR Textures

Great sources for free, high-quality PBR texture sets:

  • Quixel Megascans: Free with Unreal Engine (Bridge app)
  • Poly Haven: polyhaven.com - CC0 public domain
  • AmbientCG: ambientcg.com - Free textures
  • Texture Haven: texturehaven.com - High quality

Look for texture sets that include Albedo, Normal, Roughness, and optionally AO maps.

Using Textures in Materials

To add a texture to your material:

  1. Open your material in Material Editor
  2. Hold T key and left-click in the graph—this creates a Texture Sample node
  3. With the node selected, look at Details panel
  4. Click the dropdown next to "Texture"
  5. Select your imported texture
  6. Connect the RGB output to Base Color (or appropriate input)

Texture Sample outputs:

  • RGB: The full color (use for Base Color)
  • R, G, B, A: Individual channels (useful for packing multiple grayscale maps into one texture)

Texture Coordinates and Tiling

By default, textures map using UV Channel 0 (created in your 3D software). But you can control how textures tile and scale:

To add texture tiling:

  1. Right-click → search "Texture Coordinate"
  2. This node outputs UV coordinates
  3. Right-click → "Multiply"
  4. Connect Texture Coordinate → Multiply → Texture Sample's UV input
  5. On the Multiply node, set the other input to something like (2, 2) to tile the texture 2x

Packing Textures for Efficiency

A pro technique: pack multiple grayscale maps into one texture's RGB channels:

  • Red channel: Metallic map
  • Green channel: Roughness map
  • Blue channel: Ambient Occlusion map

This saves texture memory (1 texture instead of 3). Create the packed texture in image editing software, then in the material, connect the R output to Metallic, G to Roughness, B to AO.

Material Instances

Imagine you have a wood material. You want oak, pine, mahogany, walnut—all wood, but different colors and grain patterns. Do you create separate materials for each? No! You use Material Instances.

📖 Definition

Material Instance: A lightweight variant of a parent material that can change exposed parameters (colors, roughness values, textures) without recompiling shaders. Material Instances are fast to create, efficient to render, and perfect for variations.

Why Use Material Instances?

  • Performance: Instances don't require shader recompilation—you can change them in real-time
  • Efficiency: Hundreds of instances can exist from one parent material
  • Iteration speed: Artists can tweak colors and values instantly
  • Consistency: All instances share the same base shader logic

Creating Parameters in Parent Material

For Material Instances to work, the parent material must have parameters—values that can be changed:

  1. Open your material (e.g., M_PlasticRed)
  2. Select your Constant3Vector (Base Color)
  3. Right-click it → Convert to Parameter
  4. Name it TintColor
  5. Set a default value (your red color)
  6. Do the same for Roughness constant → name it RoughnessValue
  7. Save the material

Now your material has exposed parameters that instances can override!

Creating a Material Instance

  1. In Content Browser, right-click your parent material (M_PlasticRed)
  2. Select Create Material Instance
  3. Name it MI_PlasticBlue
  4. Double-click to open the Material Instance Editor

Editing Material Instances

The Material Instance Editor is simpler than the Material Editor—no nodes, just a list of parameters:

  1. You'll see TintColor and RoughnessValue listed
  2. Check the checkbox next to TintColor to enable overriding
  3. Click the color swatch, change it to blue
  4. Check and change RoughnessValue to 0.4 (less glossy)
  5. Save

Now you have a blue plastic material that's a variant of your red one! Changes are instant—no shader compilation.

Figure: One parent material with parameters spawns multiple Material Instances with different values.

Parameter Types

You can convert various node types to parameters:

  • Scalar Parameter: Single float value (roughness, metallic, opacity)
  • Vector Parameter: RGB color (Base Color, tint color, emissive color)
  • Texture Parameter: Allows swapping textures per instance
  • Static Switch Parameter: Toggles features on/off (no performance cost when off)

✅ Best Practice: Master Material Approach

Professional workflows use Master Materials—highly flexible parent materials with many parameters and features. Artists then create hundreds of Material Instances for every object in the game. This ensures visual consistency and allows rapid iteration. Example: "M_Master_Surface" with parameters for color, roughness, normal map, tiling, etc., spawns instances like "MI_WoodOak", "MI_StoneBrick", "MI_MetalRusty".

Light Types and Properties

Materials define how surfaces look, but without lighting, everything is black. Lighting reveals materials and creates mood, atmosphere, and depth. Unreal Engine provides several light types, each suited for different purposes.

The Four Main Light Types

Light Types in Unreal Engine Directional Light Simulates sun/moon Parallel rays Infinite distance Point Light Omni-directional Like a light bulb Has radius/falloff Spot Light Cone-shaped beam Flashlight/spotlight Adjustable angle Rect Light Area light (UE5+) Soft, realistic shadows Sky Light Ambient hemisphere Captures sky/env. 💡 Typical Setup Outdoor: Directional + Sky Indoor: Point/Spot + Sky Studio: Rect + Rim lights

Figure: The main light types and their characteristics.

Key Light Properties

Every light has adjustable properties in the Details panel:

Intensity

Brightness of the light. Higher = brighter. Units vary by light type (lux for Directional, candelas for Point).

Light Color

RGB color of the light. Warm colors (yellow/orange) for sunset, cool colors (blue) for moonlight, white for neutral.

Attenuation Radius (Point/Spot)

How far the light reaches before fading to black. Visualized as a sphere/cone in the editor.

Inner/Outer Cone Angle (Spot)

Defines the spotlight's beam shape. Inner cone is full brightness, outer cone fades to zero.

Source Radius/Length (Rect)

Physical size of the area light. Larger = softer shadows.

Indirect Lighting Intensity

Controls how much the light bounces. Higher values create more realistic global illumination.

Cast Shadows

Whether the light creates shadows. Shadows are expensive—disable for background/fill lights.

Temperature

Physically accurate color based on Kelvin temperature (e.g., 6500K = daylight, 2700K = warm incandescent).

Light Mobility: Static, Stationary, and Movable

One of the most important lighting concepts in Unreal is Light Mobility. This setting determines how the light is rendered and has massive performance implications.

📖 Key Concept

Light Mobility defines whether a light's illumination and shadows are pre-calculated (baked into textures) or computed in real-time every frame. This is a trade-off between visual quality, realism, and performance.

The Three Mobility Types

Mobility Performance Quality Use Cases
Static ⚡ Fastest (zero runtime cost) Excellent shadows, GI, AO Architecture, outdoor environments, anything that never moves
Stationary ⚡⚡ Medium (hybrid) Good balance Main scene lighting (sun, key lights) that stays in one place
Movable ⚡⚡⚡ Slowest (fully dynamic) Can move, but shadows can be harsh Moving lights (flashlights, car headlights, torches), small accent lights

Static Lights

Static lights are completely baked—their lighting is pre-calculated and stored in lightmap textures. They cannot move or change at runtime.

Advantages:

  • Zero performance cost during gameplay
  • Beautiful, soft shadows with multiple bounces (global illumination)
  • Ambient occlusion in crevices
  • Can have unlimited numbers without performance hit

Disadvantages:

  • Requires "building lighting" (preprocessing step)
  • Cannot change color, intensity, or position at runtime
  • Dynamic objects (characters, props) only receive indirect lighting

Stationary Lights

Stationary lights are a hybrid—they bake indirect lighting but cast dynamic shadows for moving objects.

Advantages:

  • Baked indirect lighting (bounces, global illumination)
  • Dynamic shadows for moving objects
  • Can change color and intensity at runtime (not position)
  • Good balance of quality and performance

Disadvantages:

  • Limited to 4 overlapping stationary lights per area (Unreal limitation)
  • More expensive than static, cheaper than fully movable

Movable Lights

Movable lights are fully dynamic—everything is calculated in real-time every frame.

Advantages:

  • Can move, rotate, change color/intensity freely
  • No pre-calculation needed
  • Perfect for interactive lighting (flashlights, flicker effects)

Disadvantages:

  • Expensive—every light costs performance
  • No indirect lighting/global illumination
  • Shadows can be harsh without careful setup
  • Limited shadow resolution

✅ Recommended Approach

Typical scene setup:

  • Directional Light (sun/moon): Stationary
  • Sky Light: Static or Stationary
  • Indoor fill lights: Static (for baked GI)
  • Interactive lights: Movable (flashlight, car lights, flickering torches)
  • Hero lights: Movable with Lumen (UE5's dynamic GI) or screen-space shadows

Start with Static/Stationary for most lights, use Movable only where you need interactivity.

Building and Baking Lighting

When you use Static or Stationary lights, Unreal needs to build lighting—a process that pre-calculates light bounces, shadows, and global illumination. This creates the beautiful, realistic lighting you see in finished games.

Why Build Lighting?

Calculating how light bounces around a scene with full global illumination is incredibly computationally expensive. Doing it in real-time at 60 FPS is impossible (without Lumen in UE5). So Unreal:

  1. Traces millions of light rays offline (during development)
  2. Bakes the results into lightmap textures
  3. At runtime, meshes display these pre-calculated lightmaps—zero cost!

How to Build Lighting

  1. In the editor toolbar, find the Build button (or press Ctrl+Shift+;)
  2. Click it to start the build process
  3. A progress bar appears in the bottom-right
  4. Wait for completion (can take seconds to hours depending on scene complexity)
  5. Lighting updates throughout the level

You'll notice lights now have soft, realistic shadows, and indirect lighting fills dark areas with subtle color bounces.

Lightmass Settings

Unreal's baked lighting system is called Lightmass. You can control quality in World Settings → Lightmass:

  • Num Indirect Lighting Bounces: How many times light bounces (3-10 for realism, default 3)
  • Indirect Lighting Quality: Resolution of bounced light (1-4, higher = better but slower)
  • Indirect Lighting Smoothness: Blurs indirect lighting (higher = softer)

Build Quality Levels

Next to the Build button is a dropdown:

  • Preview: Very fast, low quality—for quick iteration
  • Medium: Balanced—decent quality, reasonable time
  • High: Good quality—takes longer
  • Production: Final quality—very slow, for shipping

Use Preview during development, Production for final builds.

Common Lighting Build Issues

Lighting Needs to Be Rebuilt

Symptom: Red "LIGHTING NEEDS TO BE REBUILT" text in viewport.
Solution: Build lighting. This is normal after placing/moving lights.

Light Leaking Through Walls

Symptom: Light appears on the wrong side of geometry.
Solution: Increase Lightmap Resolution on the mesh (Details → Overridden Light Map Res → 64, 128, or 256).

Splotchy/Patchy Lighting

Symptom: Ugly artifacts in baked lighting.
Solution: Ensure meshes have proper Lightmap UVs (Channel 1). Regenerate in Static Mesh Editor if needed.

Very Long Build Times

Symptom: Build takes hours.
Solution: Reduce Lightmass quality settings, use lower lightmap resolution, build on Preview/Medium quality for iteration.

💡 Lumen (UE5) - Dynamic Global Illumination

Unreal Engine 5 introduces Lumen—a fully dynamic global illumination system. With Lumen:

  • No more building lighting—everything is real-time
  • Move lights, change colors, modify geometry—lighting updates instantly
  • Full indirect lighting and global illumination without baking
  • Works with Movable lights seamlessly

Lumen is a game-changer for iteration speed, though it has performance cost on lower-end hardware. It's enabled by default in UE5 projects.

🏋️ Hands-On Exercise: Create a Lit Scene with Materials

Put everything together—materials, textures, and lighting—to create a simple but attractive scene.

Part 1: Create a Basic Material

  1. Create a new Material: M_Ground
  2. Open it in Material Editor
  3. Add a Constant3Vector (brown/tan color like R=0.5, G=0.4, B=0.3)
  4. Connect to Base Color
  5. Add Constant for Metallic: 0
  6. Add Constant for Roughness: 0.7
  7. Save and apply

Part 2: Create Variations with Material Instances

  1. Convert the Base Color Constant3Vector to Parameter: GroundColor
  2. Convert Roughness to Parameter: GroundRoughness
  3. Save the material
  4. Right-click M_Ground → Create Material Instance
  5. Name it MI_Ground_Dark
  6. Open it, override GroundColor to darker brown
  7. Create another: MI_Ground_Light with lighter color

Part 3: Build a Simple Scene

  1. Place a large floor plane (or use BSP box) in your level
  2. Apply MI_Ground_Dark to it
  3. Place 3-5 Static Mesh props (cubes, spheres, or imported meshes)
  4. Apply your material instances to different props
  5. Arrange them in an interesting composition

Part 4: Add Lighting

  1. From Place Actors → Lights, drag a Directional Light into the scene
  2. Position it above and rotate to angle downward (like sun at noon)
  3. In Details, set Mobility to Stationary
  4. Set Intensity to 5-10 lux
  5. Set Light Color to warm white or slight yellow
  6. Drag a Sky Light into the scene
  7. Set its Mobility to Static
  8. Leave default settings

Part 5: Build Lighting

  1. Click Build button in toolbar
  2. Choose Preview quality (fastest)
  3. Wait for completion
  4. Observe the improved lighting with soft shadows

Part 6: Add Accent Lighting

  1. Place a Point Light near one of your props
  2. Set Mobility to Movable
  3. Set Intensity to 1000-5000 candelas
  4. Choose an interesting color (blue, orange, green)
  5. Adjust Attenuation Radius to control spread
  6. The light updates in real-time—no rebuild needed for Movable!
Checkpoint: What should you have?

Your scene should include:

  • A master material (M_Ground) with parameters
  • 2-3 Material Instances with different colors
  • Props in the scene with materials applied
  • Directional Light (Stationary) + Sky Light
  • At least one accent Point Light (Movable)
  • Built lighting with soft shadows
Walk around with Alt+P to see how materials respond to lighting!

Challenge: Create Time-of-Day Lighting

Experiment with different lighting moods:

  • Sunset: Directional Light orange/red, low angle, warm Sky Light
  • Night: Directional Light deep blue (moon), very low intensity, dark Sky Light
  • Overcast: Directional Light white/gray, Sky Light dominant
  • Interior: Remove Directional Light, use multiple Point/Spot lights

Summary

Materials and lighting are the visual foundation of your Unreal projects. Together, they transform gray geometry into believable, atmospheric worlds. Let's recap the essential concepts:

Key Takeaways

  • 🎨 Materials define how surfaces interact with light—their color, reflectivity, roughness, and texture
  • ⚛️ PBR (Physically Based Rendering) uses real-world physics for consistent, realistic materials across all lighting conditions
  • 🔑 Core PBR inputs: Base Color (albedo), Metallic (0 or 1), Roughness (0=shiny, 1=matte), Normal (surface detail)
  • 🖼️ Textures are images that provide color patterns and detail data—they're inputs to materials
  • 🔧 Material Editor is a node-based system for building materials by wiring together input/math/output nodes
  • 📋 Material Instances are lightweight variants that change exposed parameters without shader recompilation
  • 💡 Light types: Directional (sun), Point (bulb), Spot (flashlight), Rect (area), Sky (ambient)
  • Light mobility: Static (baked, zero cost), Stationary (hybrid), Movable (dynamic, expensive)
  • 🏗️ Building lighting pre-calculates global illumination for Static/Stationary lights into lightmaps
  • Lumen (UE5) provides real-time dynamic GI, eliminating the need for light builds in many workflows

What's Next?

You've now completed Module 2! You understand levels, actors, geometry creation (BSP), Static Meshes, materials, and lighting—the core building blocks of 3D environments. The next module will introduce Module 3: Blueprint Visual Scripting, where you'll learn to make your worlds interactive through Unreal's powerful visual programming system.

✅ Self-Check Quiz

Before moving on, make sure you can answer these questions:

  1. What are the three essential PBR material inputs?
  2. What's the difference between a material and a texture?
  3. Why are Material Instances more efficient than creating separate materials?
  4. What's the difference between Static, Stationary, and Movable lights?
  5. Which light type would you use to simulate the sun?
  6. Why do you need to "build lighting" for Static lights?
  7. What does the Roughness parameter control in a PBR material?
📝 Show Answers
  1. Base Color (surface color), Metallic (0=non-metal, 1=metal), and Roughness (0=smooth/shiny, 1=rough/matte).
  2. Textures are image files that provide data. Materials are shader programs that define how surfaces interact with light—they often use textures as inputs.
  3. Material Instances don't require shader recompilation—they just override parameter values. This makes them fast to create, edit, and render. You can have hundreds of instances from one parent material with minimal overhead.
  4. Static: Pre-baked lighting, zero runtime cost, cannot change. Stationary: Hybrid—baked indirect lighting, dynamic shadows for moving objects. Movable: Fully dynamic, can move/change freely, most expensive.
  5. Directional Light—it simulates infinitely distant light sources with parallel rays, perfect for sun or moon.
  6. Building lighting pre-calculates light bounces, global illumination, and shadows, baking them into lightmap textures. This allows realistic, complex lighting with zero runtime performance cost.
  7. Roughness controls the microsurface smoothness. Low roughness (0-0.3) creates sharp, mirror-like reflections. High roughness (0.7-1.0) creates diffuse, matte surfaces that scatter light.