Texture QA and Debugging

Texture Troubleshooting Field Guide for PBR Materials and Game Assets

As of August 2026, this guide diagnoses 13 common texture failures with the same repeatable pattern: symptom, likely cause, two-minute test, correction, prevention, and a final acceptance check. The companion PDF contains 64 pages and a 15-point preflight for PBR materials, transparent PNGs, GLB assets, mipmaps, and texture memory.

Intermediate 3D artistsGame developersTechnical artists Published

Download the free field guide

PDF / 64 pages / no sign-in required

Cover of The Texture Troubleshooting Field Guide by the PLAYTEX AI Editorial Team
Free 64-page diagnostic handbook

Release notes

What changed?

  • : Web guide and PDF published Added the symptom-first web edition, the 64-page downloadable field guide, the 13-problem diagnostic matrix, and the 15-point release preflight.
  • : Visual and link audit completed Simplified the color-space figure, standardized PLAYTEX AI branding, and verified every PLAYTEX AI route against the public tools directory.

Direct answer

How do you troubleshoot a broken PBR texture?

Troubleshoot a texture by starting with the first visible failure, changing one variable, and checking the result in motion and under controlled light. Fix map meaning, color space, alpha mode, binding, or delivery settings before repainting source pixels; decoration cannot repair a pipeline mismatch.

Where PLAYTEX AI fits: Use the two-minute test to identify the fault class, then open the matching PLAYTEX AI tool. The guide links only to tools currently listed in the public PLAYTEX AI tools directory.

What you will get

  • Identify the fault class from the visible symptom before changing the asset.
  • Run a reversible two-minute test that proves or rejects the likely cause.
  • Finish with a documented, engine-ready texture package instead of a one-scene workaround.

When this field guide is the right starting point

  • A normal map looks dented where it should look raised, or lighting moves in the wrong direction.
  • A material looks plastic, flat, mirror-like, too dark, washed out, or wrong only at a distance.
  • Transparent sprites or decals show black, white, or colored fringes after filtering.
  • A GLB opens without textures, binds the wrong maps, or disagrees across viewers.
  • A scene exceeds memory or upload budgets even though the source image files look small on disk.

Acceptance test

Approve the asset only when these are true

  • Every file has an explicit role: base color, normal, roughness, metallic, AO, height, emission, opacity, or a documented packed map.
  • Normal-map orientation matches the destination renderer, and the map is imported as normal or linear data.
  • Roughness and smoothness semantics are confirmed with a reversible inversion test.
  • Metallic values describe material identity: conductors near 1, dielectrics near 0, and gray only at real transitions or mixed pixels.
  • Base color contains no baked shadows, highlights, ambient occlusion, or view-dependent reflections.
  • Color maps use sRGB decoding; normal, roughness, metallic, AO, height, opacity masks, and packed channels stay linear.
  • Transparent RGB has edge bleed that matches visible colors, with no black or white matte contamination.
  • Straight or premultiplied alpha matches the blend equation used by the importer and renderer.
  • Opposite texture edges and repeated tiles have been checked at the intended material scale.
  • Mipmaps remain enabled for minified textures, and motion has been checked for shimmer, crawl, or distant blur.
  • Compression is appropriate for the map role and does not destroy normal vectors, masks, or small alpha details.
  • GLB material, texture, image, URI or bufferView, MIME type, and channel bindings validate in an independent viewer.
  • Texture dimensions, formats, mip counts, and memory estimates fit the target platform budget.
  • The material has been tested under neutral light, a second light direction, and the closest real camera distance.
  • The delivered package contains only declared files, portable filenames, and enough metadata to reproduce the import.

Why does a normal map look inverted?

A normal map looks inverted when the renderer reads one tangent-space direction with the opposite sign. Ridges become grooves, dents become bumps, and the error follows a moving light even though the base color stays unchanged.

Test one asymmetric feature with a single moving light, then flip only the green channel. If the relief becomes correct without changing the mesh or light, convert the normal map once and record the destination convention instead of rotating the scene to hide the error.

What is the difference between OpenGL Y+ and DirectX Y- normal maps?

OpenGL Y+ and DirectX Y- tangent-space normal maps usually differ in the sign stored by the green channel. The red and blue channels can remain identical while the vertical tangent direction reverses.

The label is a convention, not a guarantee about every importer. Confirm the actual renderer or project setting, convert the green channel only once, and include _ogl or _dx in the filename or delivery manifest.

How do you fix roughness that was treated as smoothness?

Roughness and smoothness describe opposite ends of the same scalar response. A roughness value near 1 spreads and weakens the highlight, while a smoothness value near 1 tightens and strengthens it.

Invert the suspect map with output = 1 - input and compare the highlight under fixed lighting. Keep the version that matches the intended surface, then name and pack the channel according to the destination engine so the inversion does not happen twice.

Why does a PBR material look like plastic?

A material often looks plastic when roughness is too uniform, metallic identity is wrong, normal detail is weak, albedo contains fixed lighting, or the preview environment has one broad studio highlight. The symptom is a shading diagnosis, not proof that one map is bad.

Replace roughness, metallic, and normal with flat reference values one at a time. The first substitution that removes the plastic response identifies the channel family to correct; repainting albedo before that test can make every channel harder to judge.

What values should a metallic map contain?

A metallic map usually describes material identity: conductive metal is near 1 and dielectric material such as wood, stone, paint, dirt, or plastic is near 0. Broad gray fields are suspicious unless they represent anti-aliased boundaries, thin coatings, dirt coverage, or mixed pixels.

Inspect the map against the actual material boundaries and preview a temporary threshold without destroying the source. Keep real transition pixels, but correct gray values caused by compression, color-space decoding, channel packing, or an image-derived guess with no material evidence.

How do you fix visible texture seams and repetition?

A seamless edge can still produce an obvious repeated pattern. Edge discontinuity creates a border seam; unique stains, knots, cracks, shadows, and low-frequency gradients create repetition across the field.

Offset the image by half its width and height to expose the edge join, then inspect a 3 x 3 repeat at the intended material scale. Repair opposite edges first, remove large landmarks second, and preserve small stochastic detail so the surface does not become uniformly blurred.

How do you remove baked shadows and highlights from albedo?

Base color should describe diffuse surface color without view-dependent highlights or a fixed source-light direction. Baked illumination causes double shadows, highlights that do not follow the camera, and dark regions that stay dark under a new light.

Rotate the scene light while keeping the material and camera stable. If the same dark or bright shape remains painted in place, use Material Delighter for a controlled estimate or recapture the surface under diffuse or cross-polarized light when physical accuracy matters.

Why do transparent PNG textures have black or white outlines?

A transparent pixel still stores RGB. Bilinear filtering and mipmaps sample that hidden color near the visible alpha edge, so black, white, or an old matte color can bleed into sprites, foliage, decals, and UI elements.

Preview the texture over black, white, and a saturated background. If the fringe color changes with filtering or distance, extend the nearest visible edge colors through transparent RGB with Alpha Bleed Fixer while leaving alpha unchanged.

What is the difference between straight and premultiplied alpha?

Straight alpha stores unmodified RGB beside alpha. Premultiplied alpha stores RGB already multiplied by alpha. A renderer using the wrong source-over equation can create dark edges, bright edges, or incorrect semi-transparent color even when the alpha channel itself looks correct.

Probe a semi-transparent edge pixel and compare both blend assumptions with Alpha Mode Inspector. Convert the source once or change the importer and blend state so the stored representation and runtime equation agree.

Which texture maps should use sRGB and which should stay linear?

Base color and other authored display-color textures commonly use sRGB decoding. Normal, roughness, metallic, ambient occlusion, height, opacity masks, and packed material channels store numeric data and should normally remain linear or non-color.

Toggle the sRGB flag only for the suspect map and inspect midtones. If a data map changes strength, bias, or vector shape, restore linear sampling; if base color looks too dark or washed out, verify that the color texture receives the expected sRGB decode before shading.

How do compression, mipmaps, shimmering, and blur interact?

Mipmaps reduce aliasing when a texture covers fewer screen pixels. Compression can damage block boundaries, normal vectors, masks, or thin alpha features. Excessive source resolution can still blur after downsampling, while disabling mipmaps often sharpens one still frame and destabilizes motion.

Move the camera through the real distance range with mipmaps enabled, compare the uncompressed source, and use a format suited to the map role. Treat filtering, compression, anisotropy, and resolution as separate variables so a sharper screenshot does not ship with worse motion.

Why are textures missing or incorrectly bound in a GLB?

A GLB material reaches image bytes through a chain of material input, texture index, image source, URI or bufferView, MIME type, and extension support. A .glb extension does not prove that every resource is embedded or that metallic-roughness channels match the destination.

Run the asset through the Khronos glTF Validator, compare it in the Khronos Sample Viewer, and move it into a clean folder. Repair exact path casing, indices, MIME metadata, extensions, or packing instead of copying an entire project beside the file.

How do you reduce texture memory and oversized assets?

Download size, decoded image size, and resident GPU memory are different measurements. A 4096 by 4096 RGBA8 texture uses 64 MiB at the base level and about 85.33 MiB with a full mip chain before runtime-specific overhead.

Inventory dimensions, format, mip count, alpha use, duplicates, and role, then sort by full-mip estimate. Halve the largest candidate and compare it at the closest real camera distance; if it remains visually equivalent, keep the smaller asset and use target-supported GPU compression.

A six-step texture diagnostic that avoids random fixes

As of August 2026, this guide diagnoses 13 common texture failures with the same repeatable pattern: symptom, likely cause, two-minute test, correction, prevention, and a final acceptance check. The companion PDF contains 64 pages and a 15-point preflight for PBR materials, transparent PNGs, GLB assets, mipmaps, and texture memory.

Step 1: Name the first visible symptom

Describe only what the renderer shows: inverted relief, fixed lighting, plastic response, edge fringe, repetition, shimmer, missing binding, or memory pressure. Do not begin with a guessed cause.

Step 2: Confirm the map role and target convention

Check the filename, channel assignment, color-space flag, normal convention, alpha mode, and destination engine. Many broken materials contain correct pixels interpreted under the wrong contract.

Step 3: Change one reversible variable

Flip only the normal green channel, invert only roughness, switch only the sRGB flag, substitute one flat reference map, or replace one binding. A single-variable test creates evidence instead of a second mystery.

Step 4: Read the result under controlled conditions

Use neutral light, move the light or camera, inspect a flat channel, and test the intended viewing distance. A still beauty render can hide mip, seam, alpha, and baked-lighting failures.

Step 5: Correct the pipeline, then the pixels

Repair import semantics, map orientation, packing, alpha handling, or asset references before repainting. Edit source pixels only after the delivery contract is known to be correct.

Step 6: Prevent the failure at export

Use role-based filenames, target presets, validation reports, repeat proofs, memory budgets, and a clean-package test. Keep the evidence with the asset so the next handoff does not repeat the diagnosis.

Match the symptom to the fastest decisive test

Thirteen texture symptoms, one quick test, and the first corrective action to try.
Visible symptomTwo-minute testFirst correction
Normal relief looks invertedFlip only the green channel and move one light across the surface.Use the normal convention expected by the destination renderer.
OpenGL and DirectX normals disagreeCompare the same map as Y+ and Y- on one known ridge.Convert green once and label the target convention in the filename or manifest.
Roughness behaves like smoothnessInvert the scalar map and compare one controlled highlight.Use roughness directly or invert smoothness exactly once.
Material looks like plasticSubstitute flat roughness and metallic references under neutral light.Remove baked light, rebalance roughness, and restore correct material identity.
Metallic map contains broad gray fieldsThreshold a preview without overwriting the source and inspect material boundaries.Use near-binary metal identity except for real transitions or mixed pixels.
Seams or repetition are visibleOffset the tile by half its width and inspect a 3 x 3 repeat.Repair opposite edges and remove low-frequency landmarks before adding detail.
Albedo contains fixed shadows or highlightsRotate the light while holding the camera and material constant.Use Material Delighter or recapture a more lighting-neutral source.
Transparent PNG has dark or white outlinesView the asset over black, white, and a saturated background.Extend visible edge RGB through transparent pixels without changing alpha.
Straight and premultiplied alpha mismatchCompare source-over output using straight and premultiplied equations.Match stored RGB to the blend mode or convert the source once.
Color and data maps respond incorrectlyToggle sRGB only for the suspect map and inspect midtones.Decode base color as sRGB and sample data maps as linear.
Texture shimmers, crawls, or blurs at distanceMove the camera through the real distance range with mipmaps enabled.Keep mipmaps, choose role-appropriate compression, and adjust filtering or resolution.
GLB textures are missing or misboundRun the asset through the Khronos validator and Sample Viewer.Repair material-to-texture-to-image references, MIME types, or packed channels.
Texture memory is too highSort textures by full-mip runtime estimate and halve the largest candidate.Reduce dimensions, remove unused alpha or duplicates, and use target GPU compression.

False fixes that hide the real texture problem

  • Do not rotate the light until an inverted normal map appears correct. The asset is still wrong under another light.
  • Do not lower normal strength before confirming the Y convention and normal import setting.
  • Do not brighten albedo to repair roughness, metallic, exposure, or color-space errors.
  • Do not threshold metallic blindly. Coated, dirty, anti-aliased, and mixed pixels need material context.
  • Do not disable mipmaps to sharpen a still frame. Motion instability and aliasing usually get worse.
  • Do not paint over an alpha fringe until hidden transparent RGB and blend mode have been checked.
  • Do not copy an entire project beside a broken GLB. That hides undeclared dependencies.
  • Do not use PNG, JPEG, or KTX2 file size as a direct VRAM number. Runtime format and residency determine memory use.

What is the fastest way to troubleshoot a broken texture?

Name the first visible symptom, confirm the map role, and change one reversible variable. A two-minute test such as flipping one normal channel, inverting one roughness map, or toggling one color-space flag is faster and safer than repainting several maps at once.

How can I tell whether a normal map is OpenGL or DirectX?

Test one asymmetric ridge under a moving light and compare the green channel as-is versus inverted. OpenGL tangent-space normals commonly use Y+ while DirectX workflows commonly use Y-, but the destination importer and project convention remain authoritative.

Should roughness maps be imported as sRGB?

No. Roughness, metallic, ambient occlusion, height, normal, opacity masks, and packed material channels represent numeric data and should normally be sampled as linear or non-color data. Base color and other authored color textures commonly use sRGB decoding.

Why does a PBR material look like plastic?

A PBR material often looks plastic when roughness is too uniform, metallic identity is wrong, albedo contains baked light, normal detail is weak, or the preview lighting hides the intended response. Substitute flat reference maps one at a time to isolate the channel causing the look.

Why do transparent PNG textures get black or white edges?

Filtered pixels sample hidden RGB outside the visible alpha edge. If those transparent pixels contain black, white, or an old matte color, mipmaps and bilinear filtering pull that color into the visible edge; controlled RGB bleed fixes the hidden color without changing alpha.

Why are textures missing from a GLB file?

A GLB can contain broken material indices, invalid image bufferViews, incorrect MIME types, unsupported extensions, or external resources that were never packaged. Validate the file and compare it in an independent glTF viewer before blaming the engine importer.

How much GPU memory does a 4096 by 4096 RGBA8 texture use?

A 4096-square RGBA8 texture uses 64 MiB at the base level and about 85.33 MiB with a complete mip chain, before runtime-specific overhead. Disk compression does not reduce that decoded RGBA8 estimate unless the runtime uses a GPU-compressed format.

Is the Texture Troubleshooting Field Guide free to download?

Yes. The 64-page Texture Troubleshooting Field Guide PDF is available without sign-in from this page. The online guide and PDF are written by the PLAYTEX AI Editorial Team and link only to current public PLAYTEX AI tools.

Primary sources

Official specifications and renderer documentation

PLAYTEX AI guidance is paired with official specifications and platform documentation where the handoff depends on an outside convention.

  1. Khronos glTF 2.0 Specification
  2. Khronos glTF Validator
  3. Khronos glTF Sample Viewer
  4. Unity normal map material parameter
  5. Unity TextureImporter sRGBTexture
  6. Unity introduction to mipmaps
  7. Epic Games physically based materials
  8. Epic Games texture masks
  9. Three.js color management
  10. Microsoft premultiplied alpha in Win2D
  11. W3C Compositing and Blending Level 1
  12. Khronos KTX 2.0 Specification