Physically Based Rendering (PBR) is the standard approach for creating realistic materials in modern game engines and 3D applications. PBR uses a set of texture maps that describe how light interacts with a surface, producing consistent results across every lighting condition. Whether you are building environments in Unreal Engine, characters in Unity, or scenes in Three.js, understanding PBR materials is a foundational skill. You can test your own texture maps right now using FindUtils' PBR Material Previewer -- upload your maps, pick a shape, and see the result in real time without installing anything.
This guide covers everything a game artist or 3D creator needs to know about PBR: what each texture map does, how the two main workflows differ, which mistakes to avoid, where to find free textures, and how to preview materials online.
PBR is a shading model that simulates how light behaves on real-world surfaces using physics-based equations. Unlike older shading techniques that relied on artistic tricks and per-scene tweaking, PBR materials follow energy conservation -- a surface never reflects more light than it receives. This makes materials look correct in any environment, from harsh outdoor sunlight to dim indoor scenes, without manual adjustment.
Every major real-time engine adopted PBR as the default pipeline years ago. Unreal Engine, Unity, Godot, Three.js, Babylon.js, and even web-based renderers all expect PBR texture inputs. Learning PBR once means your material knowledge transfers across every engine and tool in the industry.
PBR materials use five core texture maps. Each map controls a specific aspect of how light interacts with the surface. Understanding what each map does -- and what it should look like -- is essential for creating convincing materials.
The albedo map defines the pure color of a surface with zero lighting, shadow, or reflection information baked in. Think of it as the color a surface would have under perfectly flat, shadowless illumination. For non-metals, this is the diffuse color. For metals, this is the reflection tint color.
Key rules:
(255, 200, 55), copper is (250, 135, 95), silver is (220, 220, 220).A dark parking lot asphalt might have an albedo around (60, 60, 60) while fresh snow is around (230, 230, 230). Neither should ever hit pure (0, 0, 0) or (255, 255, 255).
A normal map encodes surface detail as RGB color data, simulating bumps, scratches, grooves, and fine geometry without adding polygons to the mesh. Each pixel stores a direction vector: the red channel is the X axis, the green channel is the Y axis, and the blue channel is the Z axis. Because most normals point outward (positive Z), normal maps appear predominantly blue-purple.
OpenGL vs DirectX: The green channel is inverted between these two conventions. OpenGL normal maps (used in Blender, Three.js) have the Y axis pointing up. DirectX normal maps (used in Unreal Engine, CryEngine) have Y pointing down. Using the wrong convention makes surfaces look like they have inverted bumps. Check which format your engine expects.
Normal maps are where most surface detail comes from in game art. A brick wall might have only 4 polygons for its flat plane, but the normal map makes every brick edge, mortar groove, and surface chip visible under dynamic lighting.
The roughness map is a grayscale texture that controls how blurry or sharp reflections appear on the surface. White (value 1.0) means fully rough -- reflections are completely scattered, producing a matte finish. Black (value 0.0) means perfectly smooth -- reflections are mirror-sharp.
Typical roughness values:
Most real-world surfaces fall between 0.2 and 0.8. Values at the extreme ends (below 0.05 or above 0.95) look artificial. Slight variation across the surface -- fingerprints on metal, wear patterns on wood -- makes materials look convincing.
The metallic map is a binary grayscale texture: white (1.0) means the surface is a metal (conductor), and black (0.0) means it is a non-metal (dielectric/insulator). In practice, this map should be almost entirely black or white, with gray values only at transition edges between metal and non-metal areas (like paint chipping off a metal railing).
Metals and non-metals reflect light fundamentally differently:
No real-world material is "50% metallic." If you find yourself painting gray in a metallic map, you are probably making a mistake. Use the metallic map only for clean metal-vs-not-metal boundaries.
The ambient occlusion map is a grayscale texture that darkens areas where ambient light would naturally be occluded -- crevices, tight corners, and recessed areas. White means fully exposed to ambient light, and black means fully occluded.
AO adds depth and grounding to materials. Without it, surfaces can look flat and weightless because contact shadows are missing. AO is typically baked from the high-poly mesh or generated procedurally in tools like Substance Painter, xNormal, or Blender.
Important: AO affects only indirect/ambient lighting, not direct light sources. Some engines apply AO to the entire lighting pipeline (which is technically incorrect), while others only apply it to ambient and image-based lighting. Know how your target engine handles AO to avoid over-darkening.
Two PBR workflows exist in the industry. Both produce physically accurate results, but they organize texture data differently. The metallic-roughness workflow is more common in game development.
| Aspect | Metallic-Roughness | Specular-Glossiness |
|---|---|---|
| Used by | Unity, Unreal, Godot, Three.js, glTF | Unity (alt), older CryEngine, some arch-viz |
| Maps required | Albedo, Normal, Roughness, Metallic, AO | Diffuse, Normal, Glossiness, Specular, AO |
| Metal definition | Binary metallic map (black/white) | Specular color map (colored reflectance) |
| Reflection control | Roughness (white = rough) | Glossiness (white = smooth) -- inverted |
| Texture count | 5 maps (metallic + roughness often packed) | 5 maps (specular is full RGB) |
| Memory efficiency | More efficient (metallic is 1-channel) | Less efficient (specular is 3-channel RGB) |
| Ease of authoring | Simpler -- binary metal decision | More flexible but easier to break physics |
| Industry trend | Dominant standard since 2018 | Legacy, declining usage |
| File format support | glTF, USDZ, FBX (modern) | FBX (legacy), some proprietary |
Recommendation for game artists in 2026: Use metallic-roughness. It is the default in every major engine, the required format for glTF and web3D, and the workflow that Substance Painter, Quixel, and most texture sites export to. The PBR Material Previewer on FindUtils uses the metallic-roughness workflow.
Even experienced artists make these errors. Catching them early saves hours of debugging in-engine.
The most common PBR mistake is including shadows, highlights, or ambient occlusion in the albedo/base color map. In older (non-PBR) workflows, artists baked lighting into diffuse textures. In PBR, the renderer calculates all lighting dynamically. Baked-in shadows create double-shadowing and make materials look wrong when the light direction changes.
Fix: Check your albedo by viewing it on a flat, evenly lit surface. If you can see directional shadows or bright spots, remove them. Your albedo should look like a color swatch, not a photograph.
Using an OpenGL normal map in a DirectX engine (or vice versa) inverts the Y-axis of surface detail. Bumps appear as dents, and grooves appear as ridges. The material looks subtly wrong under dynamic lighting.
Fix: Flip the green channel in your image editor, or use the engine's normal map import settings to specify the convention. Test by shining a light from above -- bumps should catch light on top and cast shadow below.
Setting roughness to exactly 0.0 (perfect mirror) or 1.0 (pure matte) across an entire surface looks artificial. Real surfaces have micro-variation in roughness caused by wear, fingerprints, dust, and manufacturing imperfections.
Fix: Keep most values between 0.15 and 0.85. Add subtle variation using grunge maps or hand-painted wear. A polished marble floor might average 0.25 roughness but have scratches at 0.5 and dust spots at 0.4.
Painting mid-gray (0.5) in the metallic map does not create "semi-metal." There is no such thing in physics. Mid-range metallic values produce unrealistic shading that no real material exhibits.
Fix: Keep the metallic map strictly black (0.0) or white (1.0). Use gray only in a 1-2 pixel transition zone between metal and non-metal areas. If you want aged metal, vary the roughness and albedo instead.
Using a 4K albedo with a 256px normal map creates an obvious quality mismatch. The surface color looks detailed but the lighting response looks blurry and flat. All PBR maps for a single material should share the same resolution.
Fix: Export all texture maps at the same resolution. For game assets, 2K (2048x2048) is the standard for hero assets, and 1K (1024x1024) for secondary props. Use FindUtils' Image Compressor to optimize texture file sizes without losing visible quality.
You do not need to create every texture from scratch. Several high-quality libraries offer free PBR texture sets under permissive licenses.
| Source | License | Resolution | Format | Texture Count |
|---|---|---|---|---|
| Poly Haven | CC0 (public domain) | Up to 8K | PNG, EXR | 1,000+ materials |
| ambientCG | CC0 (public domain) | Up to 8K | PNG, JPG | 2,500+ materials |
| FreePBR | Free for commercial use | Up to 4K | PNG, JPG | 500+ materials |
| 3DTextures.me | CC0 (public domain) | Up to 4K | PNG | 400+ materials |
| LotPixel Hub | CC0 (public domain) | Up to 8K | PNG | 1,300+ scan-based |
All of these sources export in the metallic-roughness workflow. After downloading, upload the texture set directly into FindUtils' PBR Material Previewer to verify quality and tiling before importing into your game engine.
Tip: If you need to convert texture formats before uploading (for example, TIFF to PNG), use the Image Converter to switch formats instantly in your browser.
FindUtils offers a free, browser-based PBR Material Previewer that lets you upload texture maps and see the result on a 3D shape in real time. No software installation, no account, and no data uploaded to a server -- everything runs locally in your browser using WebGL.
Navigate to the PBR Material Previewer. You will see a texture upload panel on the left and a 3D viewport on the right.
Drag and drop or click to upload your texture maps into the five slots: Albedo/Color, Normal Map, Roughness, Metallic, and Ambient Occlusion. The tool accepts PNG, JPG, and WebP formats. Start with the albedo map to see immediate results, then layer in additional maps.
Select a shape that matches your use case. Use a sphere for organic or curved materials (skin, fabric, clay), a cube for architectural materials (brick, concrete, tile), a plane for ground/floor textures, or a torus for testing how the material wraps around complex curvature.
Fine-tune the result using the control panel:
Click and drag to rotate the 3D preview. Scroll to zoom in for detail inspection. Right-click to pan. Look for tiling seams, normal map artifacts, and roughness inconsistencies. Go back to your texture authoring tool, fix any issues, and re-upload.
| Feature | FindUtils (Free) | Substance 3D ($50/mo) | Marmoset Toolbag ($190) |
|---|---|---|---|
| Price | Free forever | $49.99/month | $189 one-time |
| Signup Required | No | Yes (Adobe ID) | Yes (license key) |
| Installation | None -- runs in browser | 2.5 GB download | 500 MB download |
| Data Privacy | Client-side, nothing uploaded | Cloud sync available | Local only |
| Texture Map Support | Albedo, Normal, Roughness, Metallic, AO | Full PBR + height, emissive, SSS | Full PBR + custom maps |
| Preview Shapes | Sphere, cube, cylinder, torus, plane | Custom meshes | Custom meshes |
| Texture Authoring | Preview only | Full authoring suite | Preview + baking |
| Best For | Quick preview, tiling checks, learning PBR | Professional texture creation | Presentation and baking |
FindUtils' tool is not a replacement for a full authoring suite like Substance Painter. It is the fastest way to preview and validate texture sets without opening heavy software -- especially useful when downloading textures from free libraries and wanting to inspect them before importing into your engine.
PBR is standardized in theory, but each engine has its own import quirks. Here are the most important settings to check in each.
MeshStandardMaterial and MeshPhysicalMaterial both use metallic-roughness PBRmaterial.roughness and material.metalness as base values, then override with texture mapsQ1: What is PBR and how does it differ from older shading models? A: PBR (Physically Based Rendering) is a shading approach that simulates real-world light behavior using energy conservation principles. Unlike older models like Phong or Blinn-Phong that relied on artistic approximation, PBR materials look correct under any lighting condition without manual tweaking. This is because PBR calculates diffuse reflection, specular reflection, and Fresnel effects based on measured physical properties.
Q2: What are the five core PBR texture maps? A: The five core PBR texture maps are albedo (base color without lighting), normal map (surface detail encoded as RGB directions), roughness (micro-surface smoothness from 0 to 1), metallic (binary metal vs non-metal classification), and ambient occlusion (contact shadows in crevices). Together, these five maps give a renderer enough information to produce physically accurate shading on any surface.
Q3: What is the difference between metallic-roughness and specular-glossiness workflows? A: Metallic-roughness uses a binary metallic map and a roughness map, and is the standard in Unity, Unreal, Godot, Three.js, and glTF. Specular-glossiness uses an RGB specular color map and an inverted glossiness map, and is a legacy format mostly found in older pipelines. Metallic-roughness is more memory-efficient and is the recommended workflow for game development in 2026.
Q4: Where can I find free PBR textures for commercial use? A: Poly Haven, ambientCG, and 3DTextures.me all offer CC0 (public domain) PBR textures free for commercial use. FreePBR and LotPixel Hub also provide free scan-based materials. These libraries include full texture sets with albedo, normal, roughness, metallic, and AO maps at resolutions up to 8K.
Q5: Is FindUtils' PBR Material Previewer free to use? A: Yes. FindUtils' PBR Material Previewer is completely free with no signup, no usage limits, and no ads. All processing happens in your browser using WebGL -- no textures are uploaded to any server, making it safe for proprietary game assets.
Q6: Can I test PBR materials online without installing software? A: Yes. FindUtils' PBR Material Previewer runs entirely in your browser. Upload your albedo, normal, roughness, metallic, and AO maps, choose a preview shape, and inspect the result with orbit controls. It works on any modern browser without plugins or downloads.
Q7: What is the best free PBR material previewer online in 2026? A: FindUtils offers one of the best free online PBR material previewers available. It supports all five core texture map types, multiple preview shapes (sphere, cube, cylinder, torus, plane), adjustable tiling and normal intensity, and environment lighting -- all running client-side for maximum privacy. No account or installation required.
Q8: How do I know if my normal map is OpenGL or DirectX format? A: Look at the green channel of the normal map. In OpenGL format (used by Blender, Three.js, Godot), raised surfaces have lighter green on top. In DirectX format (used by Unreal Engine), raised surfaces have lighter green on the bottom. If bumps look inverted in your engine, flip the green channel in an image editor to switch between conventions.
Now that you understand PBR materials, put your knowledge into practice: