Search Unity

Device.Present in Unity 2D Game

Discussion in 'Editor & General Support' started by Jack0Neill1, Jun 7, 2020.

  1. Jack0Neill1

    Jack0Neill1

    Joined:
    Oct 4, 2017
    Posts:
    8
    Hello,

    we are currently improving the performance of our mobile 2D game in the last stage and are having a lot trouble with the rendering process. All in all the "device.present" takes on every device 50% of the hole rendering performance which takes the most computing effort.

    Samsung A20 & XCover 4S (8 cores, 3GB RAM, Android 9, OpenGL3)
    upload_2020-6-7_23-47-22.png



    Samsung XCover 4 (4 cores, 2 GB RAM, OpenGL3)
    upload_2020-6-7_23-50-53.png

    As you can see, the device.present (light green) is almost half of the rendering part at everytime, for the older Samsung XCover 4 the physics and scripts are getting more into account and the remaining part to 100 FPS is filled up with the rendering process. From 100 FPS to 60 FPS the "others" and "Vsync" parts, which I have hidden here, are filling the 60 FPS perfectly up... in theorie.

    You may think now, well thats a quite good performance for a bad device like the XCover 4, but the device is still not smooth. (I have gamer eyes and its more 40 FPS than 60 and its a clear difference between the XCover 4 and the newer Samsung devices) Sometimes it is getting realy stressfull phases which does'nt have to do anything with the ingame happenings. If the device once don't want to get back to the 40 FPS, it needs a rest for 30-60 mins. This sounds like thermal throttling to me, but the device isn't that warm and sometimes I happens after 2 seasons, sometimes not after 20...


    upload_2020-6-8_0-11-1.png

    Rendering Debugger:
    upload_2020-6-8_0-29-44.png
    So in genereall we wanted to reduce even more of the stress so that very low budget devices can play our game aswell.
    Before we have optimized the perfromance the "device.present" wasn`t a very big deal (like 10% of the rendering) so know I was looking for a clear answer to this point. In the end I came to the conclusion, that either there is still an ineffizient rendering process in the game and the device.present in- and decreases linear to it or the GPUs of all the devices are to slow and the CPU is waiting for them. Would It be Vsync, it would'nt increase, if the FPS decrease (like in the last picture), right?


    Some more information:
    - we are using the polygon algorythm of the texture packer to create texture atlases fore every map
    - we have almost no transparent 2D textures
    - OpenGL2 works almost equal for XCover and worse for the newer devices
    - Vblanc is turned off
    - Vsync is at 60 FPS and we can't turn it off, it seems to be setted as standard inside the devices
    - there is no lightning in the scene
    - there are almost no costum shaders in the scene, we just use the unity standard once and soem for the particles from the JMO mobile particle systems (https://assetstore.unity.com/packages/vfx/particles/cartoon-fx-pack-2-4274), but if they get played, there is no peak at all.
    - the memory has allways a few hundred MBs space and we are using 200-300MB
    - Unity Version: 2019.2.20f1


    After reading this you may wonder, whats the question again:

    - What could cause the high device.present?
    - What could cause the low FPS on the XCover 4, even if it show 60? (it doesn`t feels like 60 and often they are droppen to 40 without reason)
    - Can someone recommend the Sustained Performance Mode to not cause overheating? (should Vsync do this job?)

    Sorry for my bad english and my very long text.

    Thank you very much!

    Kind regards
    Jack
     

    Attached Files:

  2. Jack0Neill1

    Jack0Neill1

    Joined:
    Oct 4, 2017
    Posts:
    8
    Is it possible, that the batching isn't working fine, because our world (all objects) is moving?
     
  3. Jack0Neill1

    Jack0Neill1

    Joined:
    Oct 4, 2017
    Posts:
    8
    No ideas?