Section 19: Summary & Key Takeaways (3 min)
Every lighting decision involves trade-offs:
| Approach | Pros | Cons |
|---|---|---|
| Lumen GI | Realistic bounce light, dynamic | Can be noisy, temporal artifacts |
| Direct lighting only | Consistent, predictable | Visible light sources in reflections |
| VSM Shadows | Works on any GPU, detailed | Can look "CG perfect" |
| RT Shadows | Physically accurate soft shadows | Requires RT hardware, can be noisy |
| Auto Exposure | Adaptive like human eyes | Inconsistent between frames |
| Manual Exposure | Consistent, predictable | Requires manual adjustment |
For games/real-time:
- Lumen GI for realistic environments
- VSM shadows for broad hardware support
- Auto exposure often acceptable
For cinematics/product visualization:
- Direct lighting for control
- RT shadows for accuracy
- Manual exposure for consistency
For ML training data:
- Direct lighting only
- RT shadows/reflections
- Manual exposure β consistency is critical
- Lighting is physics β Unreal simulates real light behavior
- Reference materials β Known values (0.04, 0.18, 0.85) gauge your scene
- Shadow softness = apparent source size β Bigger/closer lights = softer shadows
- VSM vs RT β Different tools for different needs, check performance
- Lumen is powerful but has trade-offs β Great for games, may not suit all workflows
- Exposure control is critical β Auto vs Manual depends on your use case
- Reflections reveal your lights β Understand this when designing lighting rigs
Quick Reference: Building a Lit Scene
In Unreal Editor:
- β Verify Project Settings (Working Color Space, Lumen, RT, etc.)
- β File β New Level β Empty Level
- β Window β Place Actors (Shift+1)
- β Add floor: Cube scaled to (10, 10, 0.1)
- β Add test objects: Cube and Cylinder on floor
- β Add reference material spheres (black, white, grey, chrome)
- β Add Post Process Volume β Infinite Extent β configure exposure
- β Add primary light(s) β Rect Lights for studio setup
- β Set color temperature to match real-world source
- β Enable ray traced shadows on lights (if using RT)
- β Add Sky Light for subtle ambient fill (optional)
- β Check chrome ball for reflection quality
- β Adjust exposure compensation until grey sphere looks correct
- β Play (Alt+P) β
Stat FPS/Stat Unitto check performance - β Verify consistency across multiple camera angles
Unreal Engine 5.5 Lighting Crash Course
Technical Artist: TK
Appendix A: From Real World to Unreal β The Science
PBR values aren't made up β they come from scientific measurements of real materials. Here's how real-world properties become numbers in Unreal:
1. Spectrophotometer / Spectroradiometer
A spectrophotometer shines light at a material sample and measures what comes back:
- Illuminates sample with known light spectrum
- Measures reflected light at each wavelength
- Calculates percentage of light reflected = Reflectance
This gives you a number like "this material reflects 18% of incoming light."
2. Separating Diffuse from Specular
Here's the problem: when you photograph or measure a material, you capture both:
- Diffuse reflection β Light that enters the surface, scatters, and exits (color)
- Specular reflection β Light that bounces directly off the surface (shine)
For PBR, we need these separated.
Solution: Cross-Polarization
Studios like Activision (Call of Duty) and DICE use cross-polarized photography:
- Light source has polarizing filter (oriented one direction)
- Camera has polarizing filter (oriented 90Β° opposite)
- Specular reflections are polarized, so they get blocked
- Only diffuse light reaches the camera
This isolates the Base Color / Albedo β the diffuse component we need.
3. Reference Standards
To get accurate measurements, you need known reference points:
| Reference | Reflectance | Use |
|---|---|---|
| Spectralon | 99%+ | Near-perfect white reference |
| 18% Grey Card | 18% | Middle grey standard |
| Black Velvet | ~3-4% | Near-black reference |
Calibrate your measurements against these, then measure your target materials.
4. Linear RGB Conversion
The measured reflectance percentage maps directly to Linear RGB:
Reflectance 18% β Linear RGB 0.18
Reflectance 85% β Linear RGB 0.85
Reflectance 4% β Linear RGB 0.04
It's that simple. The percentage IS the linear value.
Our visual perception is non-linear. We're bad at judging actual reflectance:
- A surface that reflects 50% of light doesn't look "half as bright" as white
- Our brain compresses highlights and expands shadows
- We adapt to lighting conditions constantly
This is why artists historically made materials too dark or too bright β they painted what they perceived, not what the material actually does.
PBR fixes this by using measured values that respond correctly to any lighting.
Appendix B: Why 18% is "Middle" β Understanding Exposure
If middle grey is "halfway between black and white," why is it 18% and not 50%?
Answer: Human perception is logarithmic, not linear.
But cameras are linear.
This mismatch is why gamma correction exists.
1. Light itself (Physics) β Linear
Double the photons = Double the energy
2. Camera sensors β Linear
Double the photons = Double the voltage = Double the pixel value
3. Human vision β Logarithmic
Double the photons = Slightly brighter (not twice as bright)
Camera sensors are just photon counters. They respond linearly:
- 100 photons β sensor value 100
- 200 photons β sensor value 200
- 1000 photons β sensor value 1000
If you displayed this raw linear data directly on a screen, it would look wrong:
- Shadows would be crushed to black
- Highlights would blow out
- Middle tones would look too dark
Why? Because our eyes expect a logarithmic response, not linear.
Gamma encoding (like sRGB) compensates for this mismatch:
Linear sensor data β Gamma curve β Looks correct to human eyes
The sRGB gamma curve (~2.2) redistributes the values:
- Stretches the dark tones (more bits for shadows)
- Compresses the bright tones (fewer bits for highlights)
- Makes 18% reflectance land at ~50% in the encoded file
This is why:
- Textures are stored as sRGB (gamma encoded) β optimized for human viewing
- Rendering happens in Linear β physically correct math
- Final output gets gamma corrected β back to what eyes expect
| Data Type | Color Space | Why |
|---|---|---|
| Base Color textures | sRGB | Authored by humans looking at screens |
| Rendering calculations | Linear | Physics requires linear math |
| Normal maps | Linear | Not color data, just vectors |
| Final display | sRGB | Monitors expect gamma-encoded signal |
Unreal handles this automatically β it converts sRGB textures to Linear for rendering, then back to sRGB for display.
When we say "18% grey = 0.18 Linear RGB":
| Format | Value | Notes |
|---|---|---|
| Reflectance | 18% | Physical measurement |
| Linear RGB | 0.18 | What Unreal uses internally |
| sRGB | ~118 (0-255) | What you see in Photoshop |
| Perceived | ~46% brightness | What your eyes see |
The 0.18 Linear value displays as roughly middle brightness because the display's gamma curve transforms it to match human perception.
Linear (How light actually works):
0% ββββββββββββββ 50% ββββββββββββββ 100%
Black Half the photons White
Perceptual (How we see it):
0% βββ 18% βββββββββββββββββββββββββββ 100%
Black Looks like middle White
Our eyes evolved to see detail across a huge range of light levels β from starlight to bright sun. To do this, our visual system compresses bright values and expands dark values.
Human brightness perception roughly follows a power curve (Stevens' Power Law):
Perceived Brightness β (Actual Reflectance)^0.5
So:
- 18% reflectance β β0.18 β 0.42 (42% perceived brightness)
- 50% reflectance β β0.50 β 0.71 (71% perceived brightness β way brighter than "middle")
18% actual reflectance appears perceptually as middle grey.
In 1933, Munsell (the color system guy) found through experiments that a series of grey patches with reflectances of approximately 3%, 9%, 18%, 36%, 72%... appeared as evenly spaced brightness steps to human observers.
Notice: these aren't linear steps (10%, 20%, 30%...). They're roughly doubling each step β a logarithmic scale.
This is why camera light meters are calibrated to 18%:
- The meter assumes the scene averages to middle grey
- It sets exposure so that average scene = 18% reflectance output
- This puts "middle" in the middle of the camera's dynamic range
Problem: Point your camera at snow (90% reflectance), and the meter tries to make it 18% grey β underexposed. Point at coal (4% reflectance), and it overexposes to 18% grey.
This is exactly what we disable with Manual Exposure when consistency matters.
| Sphere | Reflectance | Perceived Brightness | Purpose |
|---|---|---|---|
| Black | 4% | Very dark | Darkest natural baseline |
| Grey | 18% | Middle | Exposure reference |
| White | 85% | Very bright | Brightest diffuse baseline |
If your 18% grey sphere looks like "middle grey" on screen, your exposure is correct.
If it looks too dark β increase exposure compensation If it looks too bright β decrease exposure compensation
18% is not arbitrary. It's the reflectance value that human vision perceives as the midpoint between black and white. Every camera meter, every exposure system, and every PBR workflow is built around this fact.
Appendix C: PBR Material Values Reference
These are measured real-world reflectance values for physically based rendering. In Unreal Engine's Metalness/Roughness workflow:
- Base Color = Albedo (diffuse reflectance for non-metals, reflection color for metals)
- Values are in Linear RGB (what Unreal uses internally)
- sRGB values shown for reference when working in Photoshop/image editors
Linear to sRGB: sRGB = Linear^(1/2.2) Γ 255
sRGB to Linear: Linear = (sRGB/255)^2.2
| Type | Minimum | Maximum |
|---|---|---|
| Dielectrics (non-metals) | 0.02 - 0.04 | 0.8 - 0.85 |
| Metals | 0.5 | 0.98 |
Going outside these ranges creates materials that don't respond correctly to lighting.
| Material | Linear RGB | sRGB (0-255) | Notes |
|---|---|---|---|
| Charcoal | 0.02 | 40 | Near-black baseline |
| Tire (Rubber) | 0.023 | 43 | Very dark rubber |
| Blackboard | 0.039 | 56 | Matte dark surface |
| Toner (Black) | 0.05 | 63 | Printed black on paper |
| Brick (Red) | 0.26, 0.10, 0.06 | 137, 82, 66 | Terracotta brick |
| Concrete | 0.51 | 186 | Neutral grey |
| Sand | 0.44, 0.39, 0.23 | 175, 166, 128 | Beach sand |
| Soil (Dark) | 0.08 | 77 | Rich earth |
| Grass | 0.21, 0.28, 0.07 | 123, 141, 72 | Healthy lawn |
| Tree Bark | 0.10 | 84 | Average wood bark |
| Wood (Light) | 0.35, 0.22, 0.12 | 158, 125, 93 | Pine, birch |
| Wood (Dark) | 0.15, 0.08, 0.04 | 104, 76, 54 | Walnut, mahogany |
| Marble (White) | 0.83, 0.79, 0.75 | 234, 229, 224 | Polished marble |
| Car Paint | 0.10 | 84 | Base coat (varies with color) |
| Skin I (Light) | 0.85, 0.64, 0.55 | 236, 208, 194 | Very fair |
| Skin II | 0.80, 0.49, 0.35 | 230, 182, 158 | Fair |
| Skin III | 0.62, 0.43, 0.34 | 205, 174, 156 | Medium |
| Skin IV | 0.44, 0.23, 0.13 | 175, 128, 97 | Olive/tan |
| Skin V | 0.28, 0.15, 0.08 | 142, 103, 76 | Brown |
| Skin VI (Dark) | 0.09, 0.05, 0.02 | 80, 62, 39 | Very dark |
| Chocolate | 0.16, 0.09, 0.06 | 107, 80, 66 | Dark chocolate |
| Egg Shell | 0.61, 0.62, 0.63 | 204, 206, 207 | White hen egg |
| Bone | 0.79, 0.79, 0.66 | 229, 229, 212 | Dry bone |
| Material | Linear RGB | sRGB (0-255) | Purpose |
|---|---|---|---|
| Middle Grey (18%) | 0.18 | 118 | Exposure reference |
| Gray Card | 0.18 | 118 | Photography standard |
| Fresh Snow | 0.85 | 237 | Brightest natural diffuse |
| White Paint | 0.80 | 231 | Practical white limit |
| Whiteboard | 0.87, 0.87, 0.77 | 239, 239, 226 | Office whiteboard |
| Office Paper | 0.79, 0.83, 0.88 | 229, 234, 241 | Contains optical brighteners |
| Coal/Carbon | 0.04 | 54 | Practical black baseline |
| Musou Black | 0.006 | 20 | Extreme black paint |
| MIT Black | 0.00 | 0 | Carbon nanotube (theoretical) |
For metals, Base Color represents reflection color, not diffuse.
| Material | Linear RGB | sRGB (0-255) | Notes |
|---|---|---|---|
| Silver | 0.99, 0.99, 0.97 | 255, 255, 252 | Polished silver |
| Aluminum | 0.92, 0.92, 0.92 | 246, 246, 246 | Polished aluminum |
| Platinum | 0.77, 0.73, 0.68 | 226, 221, 213 | Jewelry platinum |
| Palladium | 0.73, 0.70, 0.66 | 221, 217, 212 | Similar to platinum |
| Chromium | 0.65, 0.69, 0.70 | 210, 215, 217 | Chrome plating |
| Nickel | 0.70, 0.64, 0.56 | 217, 208, 196 | Polished nickel |
| Iron | 0.53, 0.51, 0.49 | 190, 186, 182 | Polished iron |
| Stainless Steel | 0.67, 0.64, 0.60 | 213, 208, 202 | Typical alloy |
| Titanium | 0.44, 0.40, 0.36 | 175, 168, 160 | Polished titanium |
| Cobalt | 0.70, 0.70, 0.67 | 217, 217, 213 | Polished cobalt |
| Zinc | 0.81, 0.84, 0.87 | 232, 236, 239 | Galvanized zinc |
| Gold | 1.00, 0.77, 0.31 | 255, 226, 150 | 24K polished gold |
| Copper | 0.93, 0.62, 0.52 | 247, 205, 188 | Polished copper |
| Brass | 0.91, 0.78, 0.42 | 245, 227, 172 | Polished brass |
| Bronze | 0.80, 0.50, 0.30 | 231, 184, 147 | Polished bronze |
| Material | IOR | Notes |
|---|---|---|
| Air | 1.000 | Baseline |
| Water | 1.333 | Clear water |
| Ice | 1.310 | Frozen water |
| Glass | 1.520 | Standard glass |
| Plastic (Acrylic) | 1.490 | PMMA/Plexiglass |
| Plastic (PET) | 1.575 | Bottles |
| Diamond | 2.417 | Maximum natural IOR |
| Eye (Cornea) | 1.376 | Human eye |
| Honey | 1.504 | Liquid honey |
For the crash course demonstration:
| Sphere | Base Color (Linear) | Metallic | Roughness | Purpose |
|---|---|---|---|---|
| Black | 0.04 | 0 | 0.3 | Darkest baseline |
| White | 0.85 | 0 | 0.3 | Brightest diffuse |
| Grey | 0.18 | 0 | 0.3 | Exposure reference |
| Chrome | 0.90 | 1 | 0.02 | Reflection check |
- Non-metal Base Color should be 0.04 - 0.85 (Linear)
- Metals should be 0.5 - 0.98 (Linear)
- Nothing in nature is pure black (0) or pure white (1)
- Middle grey is 0.18, not 0.5 (perception is non-linear)
- Roughness doesn't change brightness (energy conservation)
- If it looks wrong under different lighting, the values are wrong
- physicallybased.info β Searchable database with engine-specific values
- DONTNOD UE4 Chart β Industry-standard reference (SΓ©bastien Lagarde)
- Substance PBR Guide β Comprehensive material creation guide
- Call of Duty: Advanced Warfare β Activision's measured material research