Converting Custom Shaders to the Universal Render Pipeline
Moving a project to URP gets much harder when the scene depends on custom shaders. Standard material upgrades can help with built-in shaders, but custom rendering logic often needs a more deliberate migration plan.
Do not assume Unity's material converter can repair custom shader code. Triage the shader first, then choose replacement, Shader Graph, or rewrite.
- Back up the project and list every material that uses the custom shader.
- Test one material and one representative mesh before changing the whole scene.
- Check desktop and Android or Quest targets before keeping a custom shader in a VRChat world.
For VRChat worlds, custom shaders are a compatibility and performance risk. A shader that looks fine on desktop may be too expensive, unsupported, or unsuitable for Android and Quest users.
What makes custom shaders harder
Custom shaders are usually tied to a specific rendering workflow. That means a shader written for another pipeline may fail in URP because:
- the expected lighting model changed
- passes are structured differently
- surface options do not map cleanly
- special effects relied on assumptions URP does not share
This is why custom shader migration is usually a rebuild or replacement task, not just a one-click fix.
Unity's Render Pipeline Converter can help with many Built-in Render Pipeline materials, but Unity's own URP guidance says custom Built-in shaders cannot be upgraded automatically. In practice, that means you either replace the shader, rebuild it in Shader Graph, or rewrite the incompatible shader code for URP.
| Shader situation | Better first move |
|---|---|
| Simple unlit color or texture shader | Replace with URP Unlit or rebuild in Shader Graph. |
| Standard surface material with custom tweaks | Try a URP Lit material plus manual property cleanup. |
| Custom toon, outline, dissolve, water, or mask shader | Look for a maintained URP version or rebuild carefully. |
| Project-defining rendering system | Plan a real rewrite and test it as its own task. |
| VRChat Android or Quest target | Prefer simpler mobile-safe materials unless the effect is essential. |
First decide what kind of shader problem you have
Before touching the shader, identify which case you are in:
- a simple stylized surface that can be replaced with an existing URP shader
- a custom effect that needs partial rework
- a project-critical shader system that may need a full URP rewrite
That decision changes the amount of work dramatically.
Also identify whether the shader is:
- a Surface Shader
- a vertex/fragment shader
- Shader Graph
- a package shader from an asset publisher
- part of a larger renderer feature or post-processing setup
Different shader types need different migration strategies.
Safest migration order
Use this order to stay in control:
- back up the project
- identify every material that depends on the custom shader
- test the shader in a small isolated scene
- decide whether to replace, rebuild, or postpone
- validate the result in the real scene
Do not begin by swapping the shader across the whole project.
| Check | Why it matters |
|---|---|
| Console errors | Shader compiler errors usually explain why a material turns pink. |
| Shader package docs | The publisher may already provide URP instructions or a URP shader folder. |
| Material properties | Texture slots, color, tiling, emission, and transparency may need remapping. |
| Render pipeline tags | URP shaders need to declare compatibility with the Universal Pipeline where relevant. |
| Platform build | Desktop editor success does not guarantee Android or Quest success. |
When replacement is better than conversion
Sometimes the best move is not to convert the shader at all.
Replacement is often better when:
- the old shader only solved a common surface need
- a URP-native alternative already exists
- maintaining the custom shader is not worth the technical cost
- the original shader author no longer supports it
That is often the most realistic path for creators focused on getting the project working again quickly.
For VRChat worlds, replacement is often the best answer when the old shader mainly provided a look that can be approximated with a supported URP or mobile-friendly material.
When you probably need a real rewrite
A rewrite is more likely when the shader drives:
- unique lighting behavior
- special masking or layered rendering
- custom transparency workflow
- scene-specific stylization that defines the look of the project
In those cases, a rough replacement may restore function but still break the intended art direction.
If a rewrite is needed, define the target result before editing code:
- What should the material look like?
- Which textures and properties must be preserved?
- Which lighting model does it need?
- Does it need transparency?
- Does it need to work on Android or Quest?
- Is it worth maintaining long-term?
Practical checks during migration
As you test a converted or replaced shader, review:
- base color response
- shadow behavior
- transparency and blending
- emission strength
- normals and surface detail
- performance cost in the actual scene
The shader is only "converted" if it both looks right and behaves acceptably at runtime.
Common migration mistakes
Assuming the shader is the only problem.
Sometimes material properties, renderer settings, lighting, post-processing, or Quality settings also changed during the URP migration.
Testing only on one object.
A shader may look fine on one mesh and fail on another with different UVs, normals, texture inputs, transparency, or scene lighting.
Rebuilding visuals before defining the visual target.
If you do not know what the correct final look should be, it is easy to waste time chasing random differences. Capture reference screenshots before migration.
Expecting automatic conversion to handle custom shader code.
Unity's built-in conversion tools are not a full custom-shader rewrite system. Custom shaders usually need replacement, Shader Graph reconstruction, or manual URP shader work.
If you are not a shader author
You do not always need to become one.
A practical non-programmer path is:
- check whether the publisher offers a URP version
- look for a supported URP replacement
- reduce reliance on the custom shader where possible
- only escalate to deeper shader work if the look is essential
That saves a lot of time for creators whose real goal is shipping a world, not maintaining a rendering framework.
Unity Convert Shader To URP FAQ
Can Unity automatically convert custom shaders to URP?
Not reliably. Unity tools can help with some materials and supported shaders, but custom shader code usually needs a URP replacement, Shader Graph rebuild, or manual shader work.
What should I try first when a shader breaks in URP?
Check for an official URP version from the asset publisher, then test a known URP-compatible replacement before rewriting custom shader code.
Does a URP shader automatically work for VRChat?
No. Test the shader against VRChat's supported Unity version, SDK workflow, platform target, and mobile or Quest constraints before relying on it.
References
- Unity: Upgrade custom shaders for URP compatibility
- Unity Shader Graph
- Unity Universal Render Pipeline
- VRChat Android Content Optimization
Unity's URP custom shader upgrade docs state that custom Built-in Render Pipeline shaders are not automatically upgraded by the Render Pipeline Converter. For VRChat creators, any custom shader migration should still be tested against desktop and Android or Quest requirements before being considered complete.
Related pages
- URP
- Universal Render Pipeline (URP) Basics
- How to convert a SRP material to URP
- Three ways to use Universal Render Pipeline Renderer Features | Tutorial
Help! My material or shader looks wrong after changing it.
Check the assigned shader, texture slots, render pipeline, and platform target. Revert to the backed-up material if the conversion changed more than expected.
Help! Will this work on Quest or Android?
Assume mobile is stricter. Use mobile-safe shaders and test the Android build path before depending on the effect in a cross-platform VRChat project.
Related Navigation
Decide Whether To Convert, Replace, Or Rebuild
When custom shaders turn pink, go missing, or become incompatible, decide whether to convert, replace, or rebuild one material before changing the whole project.
Suggested Order
- Identify the shader source Check whether the material uses Built-in, URP, HDRP, Shader Graph, or a package-specific custom shader.
- Test one material first Convert or rebuild one representative material in a duplicate scene before touching the full world.
- Keep platform limits visible For VRChat, test PC and Android or Quest separately before committing to transparent, animated, or screen-space effects.
Related VRCreators Guides
- How To Convert A SRP Material To URP Use this for the simpler material-conversion path.
- Building A Simple Cartoon Water Shader Use this when rebuilding a stylized effect from smaller shader choices.
- Quest Compatibility Checklist Use this before relying on the same shader across desktop and mobile targets.
Common Questions
Can Unity automatically convert every custom shader to URP?
No. Built-in materials may have an easier upgrade path, but custom shader logic often needs replacement, Shader Graph rebuilding, or a real rewrite.
Should VRChat worlds use the same shader on PC and Quest?
Only when the shader is suitable for both. Cross-platform worlds often need a simpler Android or Quest material variant.