Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Tiers in GraphicSettings

Discussion in 'General Graphics' started by Claytonious, Jul 27, 2017.

  1. Claytonious

    Claytonious

    Joined:
    Feb 16, 2009
    Posts:
    881
    We have low, medium and high tiers in graphic settings.

    How is a tier selected at runtime for each platform? The only sentence the docs have about this is that a tier is automatically detected by the GPU.

    How is this selection done? Which devices fall into which tier? What are the rules? How are we supposed to know which devices go into which tiers so we can use this feature?

    upload_2017-7-27_7-53-55.png

    Thanks!
     
  2. Claytonious

    Claytonious

    Joined:
    Feb 16, 2009
    Posts:
    881
  3. aleksandrk

    aleksandrk

    Unity Technologies

    Joined:
    Jul 3, 2017
    Posts:
    2,845
    Hi Claytonius,

    Tier 1:
    Android - all devices that have support for OpenGL ES 2 only
    iOS - all devices before iPhone 5S (not including 5S, but including 5C), iPods up to and including 5th generation, iPads up to 4th generation, iPad mini first generation
    Desktops: DirectX 9, HoloLens

    Tier 2:
    Android - all devices with OpenGL ES 3 support
    iOS - all devices starting from iPhone 5S, iPad Air, iPad mini 2nd generation, iPod 6th generation
    AppleTV

    Tier 3:
    Desktops: OpenGL, Metal, DirectX 11+

    I will update the documentation as well.
     
  4. Claytonious

    Claytonious

    Joined:
    Feb 16, 2009
    Posts:
    881
  5. Neogene

    Neogene

    Joined:
    Dec 29, 2010
    Posts:
    92
    About Vulkan?
     
  6. aleksandrk

    aleksandrk

    Unity Technologies

    Joined:
    Jul 3, 2017
    Posts:
    2,845
    Vulkan for desktops is in Tier 3, obviously.
    Vulkan on Android is Tier 2.
     
    Neogene and Archviz3d like this.
  7. Stardog

    Stardog

    Joined:
    Jun 28, 2010
    Posts:
    1,886
    The tiers don't make any sense... Was this something we couldn't do with code before?
     
  8. Brad-Newman

    Brad-Newman

    Joined:
    Feb 7, 2013
    Posts:
    184
    I feel like these platforms should be listed in the Graphics Settings UI somewhere.
     
    MarcSpraragen likes this.
  9. aleksandrk

    aleksandrk

    Unity Technologies

    Joined:
    Jul 3, 2017
    Posts:
    2,845
    No, I don't think this informations belongs to the UI.
    Especially since it's possible to override the current tier from the scripts.
     
  10. douglassophies

    douglassophies

    Joined:
    Jun 17, 2012
    Posts:
    141
    @aleksandrk What tier would web assembly builds fall under? Thanks
     
  11. aleksandrk

    aleksandrk

    Unity Technologies

    Joined:
    Jul 3, 2017
    Posts:
    2,845
  12. joshcamas

    joshcamas

    Joined:
    Jun 16, 2017
    Posts:
    1,268
    From what I've heard, this tier system is pretty much automatic depending on hardware. This isn't graphics level, which is what you'd put on your game's option gui :)
     
  13. aleksandrk

    aleksandrk

    Unity Technologies

    Joined:
    Jul 3, 2017
    Posts:
    2,845
  14. McDev02

    McDev02

    Joined:
    Nov 22, 2010
    Posts:
    661
    So Unity still supports DX9? I actually thought it was completely scraped.
     
  15. aleksandrk

    aleksandrk

    Unity Technologies

    Joined:
    Jul 3, 2017
    Posts:
    2,845
    It wasn't in effect yet at the time I wrote this.
     
    McDev02 likes this.
  16. protopop

    protopop

    Joined:
    May 19, 2009
    Posts:
    1,549
    Can you please tell me if this is correct?

    Id like to enable Cascaded Shadows on iPhoneX - i think it can handle it.

    In GraphicsSettings uncheck 'UseDefaults' for Tier 3 and check 'Cascaded Shadows' so its available for tier 3
    Then to i add a script that will detect when it is an iPhone X and change the graphics Tiers?

    Something like:

    Code (CSharp):
    1. deviceID = SystemInfo.deviceModel;
    2. if(deviceID == "iPhone10,3 " || deviceID == "iPhone10,6"){
    3. // This is an iPhoneX
    4. //now change the graphics tier to tier 3
    5. Graphics.activeTier = GraphicsTier.Tier3
    6. }
    And i guess I would put this at the start of the game? Or could i use it at anytime to enable or disable Tier 3 at will?
     
    andreiagmu likes this.
  17. aleksandrk

    aleksandrk

    Unity Technologies

    Joined:
    Jul 3, 2017
    Posts:
    2,845
    Yes, something like this. Just keep in mind that "Changing this value affects any subsequently loaded shaders", so you have to do that before any shaders are loaded.
     
    andreiagmu and protopop like this.
  18. protopop

    protopop

    Joined:
    May 19, 2009
    Posts:
    1,549
    Thank you. I can put the code at the start of the game before i load the main scene. I thought that shaders were compiled at the stat while the game loads so will it still affect the shaders? Anyways i think cascade shadow dont have anything to do with shaders, is that correct? so i guess it wouldnt matter?
     
  19. protopop

    protopop

    Joined:
    May 19, 2009
    Posts:
    1,549
    Do i have to change the graphics tier each scene? Or can i just change it once at the start, and it will stick for the rest of the game?
     
  20. protopop

    protopop

    Joined:
    May 19, 2009
    Posts:
    1,549
    BTW the tiers are working - i have HDR enabled on iPhone XS with this - thank you
     
  21. aleksandrk

    aleksandrk

    Unity Technologies

    Joined:
    Jul 3, 2017
    Posts:
    2,845
    The tier is not tied to a scene. It's a global thing. Yuo can set it once when you app starts.
    That's incorrect, the shaders have to sample the shadowmap differently.
     
    protopop likes this.
  22. Jason-Michael

    Jason-Michael

    Joined:
    Jul 6, 2015
    Posts:
    20
    why does Unity just put more detailed description about tier in the manual ? we as developer dont konw the rules about how tiers are devided.
     
  23. FrankenCreations

    FrankenCreations

    Joined:
    Jun 14, 2017
    Posts:
    326
    The updated documentation in unity manual.

    These settings allow you to make platform-specific adjustments to rendering and shader compilation, by tweaking built-in defines. For example, you can use this to enable Cascaded Shadows on high-tier iOS
    devices, but to disable them on low-tier devices to improve performance. Tiers are defined by Rendering.GraphicsTier.
     
    DragonmoN likes this.
  24. DragonmoN

    DragonmoN

    Joined:
    Nov 27, 2016
    Posts:
    26
    Its getting somewhere, but we need direct manual control over the shader quality Tiers.
    Especially on Mobile Hardware, the Tier has significant graphical influence with little to non performance impact on current Mobile Hardware.

    Currently I am working on a 3d VR Apllication for standalone Hardware (Snapdragon 845 on a UHD Display), where Tier 2 (and Tier 1) results in horrendous frenzy and glittering edges. Where Tier 3 significantly calms down the percieved overall Image and needs only margial Antialaising, where even 2x MSAA ist pretty neat.

    For the time beeing, I am bound to the Standard Renderpipeline on Open GLES 3, since URP is not only missing proper working Tier Settings, but also has some severe performance Drawbacks and, which are hard to find... especially when using the XR Rig (Performance Test Szenario ~21 FPS on Multiview) instead of the classic manual 2 Camera Setup (~40 FPS on Single Pass). Target FPS is 90 FPS, The Test Szenario has scaled load for Test Reasons only. Sadly Vulkan is also no option an the moment, since the needed overall quality und technical stability just isnt ready... both on Android and Unity Side, but I am looking forward to the day, when its fully usable and stable.
     
    Last edited: Jan 2, 2021
  25. Kleptine

    Kleptine

    Joined:
    Dec 23, 2013
    Posts:
    254
    Is anyone aware of a way to control the tier settings? I recently built for Quest (a Tier 2 platform because it supports OpenGL ES 3.0), but the only shaders that were generated for the build were Tier 1.

    In the past Unity always generated all three tiers for shaders, and we filtered them out with a IProcessShader class. Now it seems to only generate a single tier. Is there a setting I missing somewhere?

    Unity URP 10
    Unity 2020.2.1f1
     
    OUTTAHERE likes this.
  26. OUTTAHERE

    OUTTAHERE

    Joined:
    Sep 23, 2013
    Posts:
    656
    Same here. I suppose it conflicts a bit with the "Universal" part of URP, but I'd really like to force shader model 4.5 or higher for all shaders; and avoid compiling or including any fallbacks.
     
  27. aleksandrk

    aleksandrk

    Unity Technologies

    Joined:
    Jul 3, 2017
    Posts:
    2,845
    URP is not using the tier system, and it forces the same tier on all shaders.
     
    Kleptine likes this.
  28. nikk98

    nikk98

    Joined:
    Mar 8, 2021
    Posts:
    43
    The tiering system based on OpenGL versions doesn't seem to be reliable anymore - old underpowered phones have upgraded to OpenGL 3.0+, and Google has stats that ~90% of phones are now on OpenGL 3.0+. (https://developer.android.com/about/dashboards).

    I've got an HTC Desire 650 (2016 -
    gpu:Adreno 305) and a Samsung S7 (2017 - gpu:Mali-T880 MP12) and they are in OpenGL 3.0 and 3.2 respectively, even though both are quite underpowered. Both are reported as Tier2.

    Are there any plans on updating the tiering system?
     
  29. aleksandrk

    aleksandrk

    Unity Technologies

    Joined:
    Jul 3, 2017
    Posts:
    2,845