Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Is it worth switching from Builtin to URP?

Discussion in 'Universal Render Pipeline' started by Marc-Saubion, Mar 31, 2021.

?

Is it worth switching from Built-In Renderer to URP?

  1. Yes

    37 vote(s)
    22.2%
  2. It depends

    70 vote(s)
    41.9%
  3. No

    60 vote(s)
    35.9%
  1. Marc-Saubion

    Marc-Saubion

    Joined:
    Jul 6, 2011
    Posts:
    653
    Hi everyone.

    I'm working on a project since last year that was initially started with URP. Considering the #SRPLife issues at the time, we chose to go back to BuiltInRenderer. Few months later but we are wondering if it is worth giving URP an other chance.

    I have a meeting about this tomorrow and am looking for feedback from people who'd have experience doing that switch or comparing both. I'm into if it's working, don't fix it, but maybe I missed a nice feature on URP.

    What do you think?
     
  2. StaggartCreations

    StaggartCreations

    Joined:
    Feb 18, 2015
    Posts:
    2,237
    Graphically, URP is no different from the built-in RP, despite the misguided marketing attempt. The shading is identical, but refactored entirely. Which poses the pain point of having to practically redo every custom shader. Likewise for anything using a CommandBuffer (eg. post processing or volumetric lighting).

    In the end, the game ends up looking the same. But if you have graphics programmers on the team, they'll have a blast. The refactoring does have it's benefits, and I personally find it much more streamlined to work with. Though, a number of things have to be worked around with C# reflection, since the decision was made to make all the functionality behind the configuration UI internal. For them, there will be a transition period of figuring how to do the same things, but through different means.

    If you're looking for new and improved graphical fidelity, there really isn't any :p So on that point alone, I'd recommend to stick to the built-in RP and be able to enjoy the many enhancements available on the asset store. Seeing as not everything works with URP.

    I see many people diving into URP, because of Shader Graph. But changing a rendering architecture, just for a tool, is a pretty ill-informed decision. Amplify Shader Editor is miles ahead, and SG is purposely kept limited to not overload Unity with "technical debt".

    As for performance, I don't have any practical experience with this. URP uses a single-pass Forward renderer. Meaning, an object doesn't have to be redrawn for any point/spot light that touches it (depends on the pixel light count configured in Quality Settings). So if the project is going to have many lights, this will be beneficial. In the built-in RP, using Deferred rendering is an alternative, but not entirely suitable for mobile platforms.

    Couple of things URP doesn't have, compared to the built-in RP:
    - Motion vectors (used for motion blur and TAA)
    - Deferred rendering (though this is in preview in 2021.2, but currently not extendible in the slightest)
    - Reflection probe blending (under development though!)
    - MSVAO, in many use cases superior to the SSAO Unity provides (literally 13-year-old tech)

    Improvements I found:
    - Dedicated depth-normals pass. In the built-in RP, only built-in vegetation shaders supported this internally. Meaning, any cutout- or vertex animated material wasn't going to be rendered as such in the depth-normals texture. Particular pain point for edge detection effects. In URP, every shader can specify how they're being rendered into this texture.
    - Support for shadow receiving on transparent materials. This always required some manual extra rendering scripting for this to work.
    - Previously mentioned single-pass forward renderer
    - Ambient occlusion incorporated directly into the lighting model, rather than simply multiplied over the final image.
    - Support for Hybrid Renderer v2 (cutting edge, but definitely the way forward in the coming years)
    - Dedicated rendering layers, rather than re-using the physics layers (ironically, not actually used anywhere)

    You can consider the URP a refactored and streamlined built-in RP 2.0. It has benefits on both the front- and back end. But I personally don't consider it something you really need right now, especially since it's been trying to catch up with the built-in RP the past 2 years, and will continue to do so for the next 1-3 years.

    Not a definitive answer, because it depends ;)
     
    shikhrr, mandisaw, kei_kff and 13 others like this.
  3. BattleAngelAlita

    BattleAngelAlita

    Joined:
    Nov 20, 2016
    Posts:
    400
    Graphical programmers will hate you for URP. Moreover, if you have graphical programmers - it's much better idea to write a custom rendering pipeline.
     
    Marc-Saubion likes this.
  4. Marc-Saubion

    Marc-Saubion

    Joined:
    Jul 6, 2011
    Posts:
    653
    That's also my feeling, and considering I already have AmplifyShader, I'm not very thrilled to learn a new tool without a significant technological leap.

    Thanks a lot for taking the time to give me such a detailed answer. That's very useful, especially considering random pitfalls like no Rprobes blending.

    I guess I already know enough to think it's still risky to make that switch.
     
  5. Marc-Saubion

    Marc-Saubion

    Joined:
    Jul 6, 2011
    Posts:
    653
    That would probably be my job on the team but I wouldn't know what to do with it that would make it worth the investment. Maybe that's what you meant by "Graphical programmers will hate you for URP".

    Thanks for your feedback.
     
  6. xgonzal2

    xgonzal2

    Joined:
    Jul 3, 2012
    Posts:
    62
    I think the best thing you can do right now is fork URP and make custom modifications to suit your project needs. If it is not possible to do that then using URP is kind of risky as you're gonna be at Unity's mercy to address issues. Being new tech there are plenty of issues with both URP and HDRP.

    You mentioned probe blending on one of your posts and Unity has a PR on their Git to merge an implementation of that, albeit I think it was only going to blend two probes but still. So if you already forked URP you could merge that yourself and test it out but otherwise it is a tough sell to switch to any SRP in general.
     
    mandisaw and Marc-Saubion like this.
  7. Marc-Saubion

    Marc-Saubion

    Joined:
    Jul 6, 2011
    Posts:
    653
    Thanks.

    I could do that but the decision is about cost vs benefits and so far I only see complications. Our project is already used commercially and we're studying what we could do for the soon to come v2.0, so if we go to URP, it needs to be worth the hassle.

    I see someone voted Yes and I don't think they gave any feedback. I'd love to know more because so far, everybody else confirmed my initial impression that URP won't bring anything worth the required investment.
     
    mandisaw likes this.
  8. burningmime

    burningmime

    Joined:
    Jan 25, 2014
    Posts:
    845
    A lot of the present advantages seem to be related to artists workflow or upcoming unity features -- shader graph, VFX graph, hybrid tenderer (ECS). There's also some potential performance improvements (shader batching in particular), although it depends very much on your specific game and it can easily become a major performance downgrade unless you're willing to fork and customize the code.

    Every few months, I try to convert my (solo/for-fun) project over because I'm very interested in VFX graph and HRv2. And every time, I feel like it's just not ready -- custom post-processing and multiple directional lights go out the window without hacks, real-time shadows look awful (bias/normal bias issues in particular) without of tweaking, shaders and materials break, and CPU usage skyrockets.

    For a company whose bottom line depends on getting games out the door, I can't see the risk being justified without a very clear need for specific features or a team dedicated to basically writing a custom render pipeline based on URP. SRPs are clearly the future of Unity, and it's heading in the right direction, but the risk/reward matrix for URP in its current state is still too uncertain.
     
    mandisaw and Marc-Saubion like this.
  9. BattleAngelAlita

    BattleAngelAlita

    Joined:
    Nov 20, 2016
    Posts:
    400
    VFX graph works with build-in
     
  10. Voronoi

    Voronoi

    Joined:
    Jul 2, 2012
    Posts:
    584
    Really? I tried a new project in 2021 and I keep getting "CameraSort.compute: Kernel at index (0) is invalid". The documentation doesn't mention built-in support.
     
    Last edited: Apr 5, 2021
    burningmime likes this.
  11. andybak

    andybak

    Joined:
    Jan 14, 2017
    Posts:
    569
    It used to work - as recently as later 2020 releases. Can you try the same scene in a 2020 version?

    EDIT - by "works" I need to be specific - unlit output only. That's always been a limitation (same as URP)
     
  12. jbooth

    jbooth

    Joined:
    Jan 6, 2014
    Posts:
    5,461
    I don't think that expression means what you think it means..
     
  13. snacktime

    snacktime

    Joined:
    Apr 15, 2013
    Posts:
    3,356
    URP internally is not using a lot of core RP abstractions. URP is LWRP rebranded and the code is quite old. It's not a proper SRP really going by what the core RP api looks like today.

    if you wanted to start with URP as a base to customize, it's probably better to just roll it from the ground up. Using HDRP as a reference for how to leverage core RP.
     
  14. Marc-Saubion

    Marc-Saubion

    Joined:
    Jul 6, 2011
    Posts:
    653
    Hello and thanks for your feedback everyone.

    We've had our meeting and decided to give URP few days of testing on a dedicated branch. The shader batching @burningmime mentioned could be worth it.

    We'll do that in a week or two. I'll keep you updated but feel free to mention me if I forgot.
     
  15. stonstad

    stonstad

    Joined:
    Jan 19, 2018
    Posts:
    658
    This thread encouraged me to give URP a try using 2021.1.12f1. This was a test upgrade of an existing project which uses the built-in pipeline.

    Observations:
    - No meaningful improvement in performance.
    - As expected, upgrade reports 999+ incompatible shaders which render as pink and have no immediate upgrade path.
    - Camera stacking has to be reworked and is programmatically incompatible with the prior model.
    - Post-processing has to be reworked and reconfigured and is programmatically incompatible.
    - As expected, all individual light and shadow properties must be tweaked to achieve balance.

    Impressions
    Given the extended development cycle and substantial marketing I am quite underwhelmed. It is unclear what the benefit is to me because I do not intend to develop a scriptable rendering pipeline and I am likely a typical Unity end user.

    I did retest several engine features that cause me project-specific pain. In my usage, URP does not mitigate or solve longstanding issues (limitations around reflection probe assignment and blending).

    I found that most game object settings (mesh renderer, lighting, etc) remain unchanged. Rendered output looks comparable or "the same" as the built-in renderer.

    With no perceived benefit, the only thing that would encourage me to switch to URP is automation of the shader upgrade process for custom shaders.

    Based on this blog post (https://cyangamedev.wordpress.com/2020/06/05/urp-shader-code/11/ and https://www.cyanilux.com/tutorials/urp-shader-code/) I'm inclined to think an automated upgrade of custom shaders is possible. If Unity is determined to increase adoption of URP, this would then be a great way to encourage developers and asset store artists to change pipelines.
     
    Last edited: Jun 29, 2021
    Shadowing, mandisaw, pixelR and 4 others like this.
  16. o1o101

    o1o101

    Joined:
    Jan 19, 2014
    Posts:
    639
    After having been working with (more like fighting with) URP since the early LWRP days, I agree with this.

    For my personal mobile projects I have had worse performance in URP, will give a bit more details further down. This is minor relative to performance things, but have also had headaches with upgrading Post Processing, for example spent a lot of time on getting an ideal tonemapping curve & other effects in PPV2 which does not translate to PPV3 whatsoever, all the effects have similar naming yet behave totally differently for whatever reason, so something to keep in mind if you have set up and fine tuned many effects in PPV2.

    From my latest profiling on iOS (tested on iPhone 8, and iPhone Xs), URP runs significantly better with the SRP batcher disabled (mind you it doesn't run well either way) in a heavily CPU bound scenario by rendering, not scripts or physics, GPU hovering at around 8 ms.

    Under 100 SRP batcher "batches" (or events, whatever they are, I know this isn't a great metric without giving more details) according to the frame debugger, is significantly harder for my iPhone 8s CPU to process than 250+ regular batches with the SRP batcher disabled. Maybe this is expected? Too many shader variants? I almost only use the built in Lit shader.

    I could swear even putting the SRP batcher aside, rendering really seems significantly slower in URP (can't say for built in as I have not used it in a while).
    My current project is at around 150-180 batches, 150k verts/tris ish, (not using the SRP batcher) and is still heavily bottlenecked by rendering on the CPU side of things. I remember in 2015, our batch target for mobile used to be 100 batches and 100k verts, and that would run fine on the friggin Samsung S3 in Unity 5. I just don't understand why 150 batches chokes out the CPU of an iPhone 8 in 2021, it is so frustrating!
    Now I don't know if this is changes to Unity, or changes to iOS, or just URP, but its so odd to be bound by similar batch and vert restrictions as I was in 2015 developing for ancient potato Samsung phones.

    If I had time, I would like to go back to built in and see if the performance is better since I am not using the SRP batcher anyways, but the process is destructive so its really not worth the headache to switch back, especially when I am banking on URP being the future.... though I've been waiting for that for a couple years now and I still don't really have anything positive to say about URP in general, it has benefited me absolutely zero, and cost a lot of time & brain pain.


    Another thing to keep in mind if you plan on switching is Asset Store products, especially in the shader department, many things will not support URP, and even if you are familar with shader code, updating things will be a headache, especially as the pipeline changes. Read the fine print, some things may say the support URP but features will be lacking, etc..

    Just my personal experience, take it with a grain of salt.
     
    Last edited: Jun 30, 2021
  17. Noisecrime

    Noisecrime

    Joined:
    Apr 7, 2010
    Posts:
    2,051
    This is quite possibly one of the best and most accurate descriptions of URP I've read, especially the lack of visual improvement as that can be a heavy bias to the cost/benefit analysis of switching. Pretty much makes URP a non-starter for me until it has proper feature parity with built-in, seamless upgrade path from built-in and plenty of sources/resources to learn how to recreate effects and approaches from built-in easily.

    I mean whats the point if visually it looks the same ( after tweaking ) but has a huge upfront investment cost? Performance improvement might be one, but i'm not sure with everything I've read that this is a given. Improved workflow would be nice, but I rarely work with artists who get involved too much on the Unity end, so probably nothing gained there. All thats left seems to be all the pain points ;(

    Talking of pain points, whenever I do investigate URP and check this forum the first few pages always seem to be filled with major issues from broken features and dev's struggling to get something done that was a solved issue in built-in but proving difficult to impossible in URP.


    Anyway having said that, prior to reading this thread I tried upgrading my current project to URP ( 2019.4.28 ) to check out the process and see how broken the project would be. Sadly was not impress. Though I should point out some of this may have been better had I tried it in 2020 or 2021.

    Had a ton of errors, mostly if I recall correctly due to use of a custom PostProcessStack code base which then borked the rest of the URP package import process until i'd fixed it and re-imported the package code a few times.

    Materials were not upgraded, I thought this was meant to be a seamless process when using built-in unity shaders like Standard? I can't recall now if Unity updated my materials to simpleLit or not at all, but after setting them to Lit I discovered that most of the texture references and color references had been lost and required re-doing. Luckily the project only has a dozen materials so that wasn't too bad. Maybe there is a tool in the package to do this, should have looked.

    The renderer wasn't automatically installed. I had to create the various scriptableObject assets myself and then assign them in various PlayerSettings. This is a real puzzlement to me, if I wasn't as experienced and happened to have looked at URP projects previously I wouldn't have had a clue.

    Performance appeared to be worse in the editor, but would suspect no change once built, might even have been improved but at this point I couldn't be bothered to waste any more time on it, mostly because I discovered what 'Staggart' had said above - there was no visual improvements, very few other improvements, plenty of missing functionality ( i'd need to upgrade to 2021 and even then stuff is still missing ) and just lots of pain.

    At this point I just don't know if I see the reason in it at all, not even for a new project as i'd just be too wary of discovering a feature or function i'd rely on as its easy or available in built-in would be missing in URP.

    Still having said all that i'd still stand by my answer to the poll as 'It depends' as i'm sure there our some advantages to some one or some project.
     
    Last edited: Jul 1, 2021
    mandisaw, pixelR, FernandoMK and 2 others like this.
  18. PixHammer_

    PixHammer_

    Joined:
    Nov 20, 2017
    Posts:
    16
    I'd say it's worth using if you're just starting a new project (with 2021.2 when it comes out of beta), but migration isn't worth it imo.

    As previously mentioned a few times your project will end up visually comparable, though in my experience you can get your game looking nicer, faster, on URP as it's pretty nicely set up to allow you to rapidly be able to create new shaders and new visual effects with their respective graphs, as well as the whole renderer features stuff making it pretty easy to inject custom passes if you know what you're doing.

    It's still not quite there yet though, there is some missing stuff that makes it not meet feature parity but that list is getting smaller and smaller by each release (For example the motion vectors mentioned before in this thread are currently in the 2021.2 beta).
    I've also noticed as I start getting more stuck into projects i find myself patching holes in URP for things that should already be there, like a lighting node in shader graph still not being a thing by default despite being relatively trivial to add yourself, or still no nice way to add custom post processing. This said, doing this stuff slows you down a little, but that slow down only brings you down to the speed you'd operate at for Built-in, and a lot of the time those little fixes are project agnostic and can be swapped between URP projects as easy as importing them so it's annoying at first, but becomes a less of a sore point over time.

    Performance is pretty fine, about parity or exceeding built-in for many platforms in my experience with the biggest exception of Android where in many cases it has performed categorically worse for me, which especially hurts when you want to develop a VR project for the Oculus Quest/2 where performance is a constant consideration, it makes it a wholly unviable option.

    So, to me at least it's worth the trouble on a new project because it's positives can be lovely even while not perfectly feature complete (Assuming i won't target android with super fancy visuals). But you typically won't get the majority of it's gains if you're migrating over from built-in, so if you're deep in a game, don't even think about it.

    Edit: Here's the roadmap for URP: https://portal.productboard.com/uni...sual-effects/tabs/3-universal-render-pipeline
     
    Last edited: Jul 7, 2021
    mandisaw and Noisecrime like this.
  19. stonstad

    stonstad

    Joined:
    Jan 19, 2018
    Posts:
    658
    The roadmap feature "Built-in Converter Improvements" is of interest to me. I would like to know what the scope of this feature is and whether it includes guidance for conversion of custom shaders.
     
  20. LordCafe

    LordCafe

    Joined:
    Aug 26, 2015
    Posts:
    35
    In my opinion it's only worth it if u doing a game with retro graphics cus the rendering it's preety bad and limited, lights are bad, shadows are bad, u don't have many post processing like in built in or HDRP... sometimes i think it's better to just use HDRP even for games with low graphics cus things just work in HDRP, lights are not a small sun, shadows are crisp and nice, u have a bunch of post processings from built in and way more features...

    It's not work getting more FPS if u take the quadruple time to get things done in URP while in HDRP and Built it u can easily get it done.
     
  21. DEBBAJfarouk

    DEBBAJfarouk

    Joined:
    Jun 21, 2021
    Posts:
    6
    At least for android games built-in is better performance wise than URP.
     
    havokentity likes this.
  22. lclemens

    lclemens

    Joined:
    Feb 15, 2020
    Posts:
    760
    That really sucks for mobile DOTS developers because we're stuck with URP. Performance by Default... or Performance by Downgrade?