Unity : Guide to converting Built-in RP to URP
I personally faced an issue when upgrading my project from the Built-in Render Pipeline to URP. This guide is meant to help you overcome that obstacle—which, in my case, was quite challenging.
🧠 Understanding the Core Differences
Built-in Shaders
Unity’s legacy rendering pipeline used default, monolithic shaders known as “Built-in Shaders.” These are incompatible with URP and lack the modularity and performance optimization of newer pipelines.
URP Shaders
URP (Universal Render Pipeline) shaders are purpose-built to work within Unity’s Scriptable Render Pipeline (SRP) architecture. They offer better cross-platform performance, improved scalability, and are highly customizable via Shader Graph or HLSL.
🕰️ A Brief History
In earlier versions of Unity—say around Unity 5.5f, which marked the beginning of my journey—developers could only build projects using the Built-in Render Pipeline. With time, Unity introduced SRPs, starting with LWRP (Lightweight Render Pipeline), which eventually evolved into URP, now a standard alongside HDRP (High Definition Render Pipeline) and the legacy Built-in system.
Introduced officially in Unity 2018, URP represented a paradigm shift in how rendering and shaders are handled, giving developers control and modularity but requiring manual transition work for older assets.
🚀 Transitioning from Built-in to URP
If you’re moving a project to URP, Unity provides a helpful built-in tool:
Edit → Render Pipeline → Universal Render Pipeline → Upgrade Project Materials to UniversalRP Materials
This utility upgrades material shaders across the project to URP-compatible variants. However, it doesn’t cover everything—especially if you’re using custom shaders. That’s where manual intervention is needed.
🎨 Shader Conversion: Two Paths
When converting or writing shaders for URP, you generally choose between:
1. Shader Graph
A node-based editor to visually create shaders without writing code. Ideal for most use cases and suitable for those unfamiliar with shader languages.
2. Manual Coding with HLSL (or formerly CG)
Use this if you need low-level control or are migrating complex custom shaders.
🧱 Shader Fundamentals
If you’re unfamiliar with how shaders work, pause here. A baseline understanding of Vertex and Fragment Shaders is critical. All shaders ultimately manipulate vertices (geometry) and fragments (pixels) for rendering effects.
To simplify:
• Vertex Shader → Transforms and manipulates geometry.
• Fragment Shader → Computes pixel color and lighting.
Lit Shaders → React to scene lighting (used for realistic rendering).
Unlit Shaders → Ignore lighting (used for UI, stylized visuals, etc.).
Steps to Conversion (We will focus on Path 2)
Basic steps can be found official Unity Blog and this can be really helpful, Unity : Migrating from Built-in to URP
I am here to explain the steps which are missing in official guidelines or available scattered on web.
Properties block going to be same as your shader and no change require
In Subshader, Tags needs to be change and you have to specify which render pipeline you are using. You can add below block of code to Tags
"RenderPipeline" = "UniversalPipeline"
When working with shaders, any variables you wish to utilize must be declared within a programming language block. Built-in shaders use the Cg (Computer for Graphics) programming language. To make a minor adjustment, replace 'Cgprogram' block with 'HLSL,' block which is a superset and can be employed to write multiple Cg programs under a single umbrella.
CGPROGRAM ENDCG
HLSLPROGRAM ENDHLSL
As we changed the language from Cg to HLSL, we need to change it to equivalent includes as well. You can find that solution in the blog post link, which i posted above.
If you have custom shader than, you have to convert that shader functions to make it work in URP.
You can convert that function by creating sub-shader in Unity Shader Graph. To create Sub shader, you can Right Click > Create > Shader > Sub Shader
Once you have Sub shader ready, you can use that sub shader in the main shader which you create in Shader graph.
Many Built-in name of functions have been changed in URP so make sure you find alternatives of that function names.
🧩 Final Considerations
• Always test shaders across platforms post-conversion. URP behaves differently on mobile vs desktop.
• Watch for changes in lighting, shadows, and transparency handling.
• URP is modular—take advantage of Renderer Features and Scriptable Render Passes if you want advanced behavior.
Thank you and i hope this guide will help you. :)