Unity Decal Projector Not Rendering in Build - URP Renderer Feature and Material Fix
Problem: Decal Projector components (or projected decals) look correct in the Editor and in Play Mode, but in a development or release player build they do not appear, flicker, or only affect some meshes.
Root cause (typical): Decals in the Universal Render Pipeline (URP) depend on a Decal (or legacy Decal Renderer Feature) entry on the Universal Renderer asset that is actually used at runtime. The Editor can mask a missing or duplicate pipeline setup. Builds also apply shader variant stripping and quality-tier pipeline swaps more strictly, so decal shaders or depth/normal prerequisites can disappear even when the scene looks fine while developing.
If decals never work in the Editor either, fix layer masks, material, and projector bounds first. This page focuses on Editor OK, build fails.
Quick fix checklist
- On the Universal Renderer asset bound in Player for your target Quality level, confirm a Decal-related Renderer Feature is added and enabled (name varies slightly by URP version).
- Confirm the same URP Render Pipeline Asset (and nested renderer) is assigned in Project Settings > Graphics and in Project Settings > Quality for the tier the build uses.
- Ensure decal materials use a URP Decal shader (Shader Graph Decal or URP decal master) and are not pink in a fresh build.
- If decals use DBuffer or screen-space paths, verify the active URP asset enables the depth (and normal, if required) textures those techniques need.
- Add critical decal shaders to Always Included Shaders (or relax stripping) if you suspect variant loss.
Step 1 - Confirm the Decal renderer feature on the shipping renderer
- Open Project Settings > Quality and note which Quality Level your build uses by default (and per platform if you override it).
- For that level, open the linked Render Pipeline Asset (URP asset).
- Select the Renderer Data used for your camera (often Renderer List item 0).
- Under Rendering or Renderer Features, click Add Renderer Feature and add Decal (or Screen Space Decals / Decal Renderer Feature, depending on your URP version).
- Enable the feature and set technique to match how your materials were authored (DBuffer, Screen Space, or Deferred-compatible options as offered).
Verification: Enter Play Mode with the Quality level forced to the same index as your build (QualitySettings.SetQualityLevel in a tiny test script, or duplicate player settings in Editor). Decals should still render before you build.
Common mistake: Adding the feature only on a duplicate Renderer Data asset that Editor uses while Graphics still points another asset for builds.
Step 2 - Align Graphics and Quality pipeline assets
Builds do not forgive a mismatched pipeline chain.
- Open Project Settings > Graphics and record the Scriptable Render Pipeline Settings asset.
- Open Project Settings > Quality for each tier you ship and confirm the Render Pipeline Asset field matches your intent (or is empty so Graphics wins—be consistent).
- If you switch pipeline assets per platform in Build Profiles or custom scripts, verify that path last—Player logs can show which asset loaded if you enable Development Build and watch player.log.
For a broader URP visibility pass (particles, lights), see Unity Particle System Not Visible in Build - URP and Shader Stripping Fix and Unity URP Shadows Not Rendering - Lighting and Shadow Fix.
Step 3 - Validate decal materials and shaders
- Select each Decal Projector and open its Material.
- Confirm the shader is a URP Decal type. Legacy built-in projector materials will not behave in URP.
- Check Rendering Layer / affected layers so meshes you expect are not excluded.
- Ensure projector size encloses target geometry in world space (large worlds sometimes look fine in Editor if you tested only a small sub-scene).
Verification: Create a new test scene in the same project: plane, cube, one Decal Projector, one simple decal material. Build that scene only. If the test works, the issue is scene-specific configuration or addressables loading a wrong material variant.
Step 4 - Depth, normals, and deferred vs forward
Some decal techniques require extra passes:
- Open the active URP Global Settings / Render Pipeline Asset (version-dependent) and confirm Depth Texture and Normal Texture (or equivalent) are enabled if your decal feature documentation requires them.
- If your project uses Deferred rendering on the renderer, confirm your decal technique is compatible with that path; otherwise switch technique or rendering path in a test branch first.
Symptom hint: Decals appear on some objects but never on characters—often Opaque Texture / normal dependency or rendering layers on the character mesh.
Step 5 - Shader stripping and Always Included Shaders
If materials are correct but builds drop the pass:
- Open Project Settings > Graphics (or Graphics Settings asset on newer flows) and locate Always Included Shaders (or Shader Preloading / SRP stripping settings, depending on version).
- Add your decal shader variants explicitly, or temporarily disable aggressive shader stripping in URP or Player settings and rebuild to confirm.
- If you use Addressables or AssetBundles, ensure the material and its shader dependency are included in the same delivery path the player loads.
Alternative fixes and edge cases
- Vulkan vs Direct3D11/12: Rare driver bugs can hide decals; try another Graphics API in Player Settings to isolate.
- XR / VR: Some XR configurations use a different renderer or single-pass paths—re-validate renderer features on the XR URP asset if you use one.
- Camera stacking: Decals apply per renderer; stacked cameras need consistent renderer and feature setup.
Prevention tips
- Treat Renderer Data as versioned config: when you duplicate a pipeline for mobile, copy renderer features too.
- Add a smoke test scene that includes one decal to your release checklist.
- Document which URP asset each platform profile uses next to your build script.
FAQ
Do I need the Decals package separately?
Core URP decal support is part of the Universal RP package in modern Unity; older workflows used additional samples. If Package Manager shows an optional Decals sample, install it only if your project was built from that template.
Why only in IL2CPP?
Usually not IL2CPP itself—quality settings, stripping, or scripting defines changing which assets load. Compare Scripting Backend with a controlled test.
Can batching break decals?
Extreme static batching or GPU instancing edge cases can interact with how meshes receive decals; isolate with non-batched meshes in a test scene.
Related links
- Unity Manual: URP Decals and renderer feature overview (Unity URP documentation) — use the version that matches your Editor.
- Unity Particle System Not Visible in Build - URP and Shader Stripping Fix — shared stripping and pipeline asset lessons.
- Unity 2D Lighting Not Working - 2D Renderer and Pipeline Fix — if your project mixes 2D and 3D renderers, confirm which pipeline owns the camera drawing decals.
Bookmark this page if you ship URP content on more than one platform so you can re-run the renderer feature and quality tier checks before each milestone build. If it saved you a silent decal regression, share it with anyone on your team who owns Graphics settings.