Performance drop in VR on Unity 5.2.0 and later

Build with Unity 5.2.0 and later versions have a significant performance drop from steady 75fps on Unity 5.1.3f1 to 65fps on Unity 5.2.0 and later.

Same scene, no changes - only difference is Unity version they are built with.

Running on Windows 8.1, Oculus runtime 0.7.0.0 beta (also tested 0.6.0.1 beta), NVidia drivers 356.04 (recommended for Oculus runtime 0.7.0.0 beta).

1 Like

I reported similar issue over on the Oculus forums. I have included benchmark numbers to make the findings more concrete:

https://forums.oculus.com/viewtopic.php?f=37&t=26574

2 Likes

Having the same problem. Scenes seem to have dropped a good 30/40% in performance in regards to fps and shuddering.

Iv'e only just updated to the last 5.1.3f build too.

Just tried 5.3.0b1 - and the performance drop is worse than in 5.2

Not good, have you tried the just released today 5.2.1.P3 yet? I can't at the moment, at work and don't have my Gear VR/Project in front of me.

1 Like

Same poor performances for me with latest Ut patch (p3)

I've decided to roll my project back to 5.1.3.P2, the constant performance drops from patch to patch are completely throwing a wrench into my ability to complete this game. With the added performance from the Android 5.1.1 update yesterday on my AT&T Note 4 and going back to the older Unity I feel I might be able to get my Gear VR game complete at 60fps.

I'm having lots of problems here too with performance and other issues, and the switching back and forth between Oculus 0.6 and 0.7 trying to find the latest version that works acceptably is not helping. On at least one version of Unity the editor is useless. Hit play, then stop it again with the play button and it hangs on the last frame rendered by the Rift. I feel like I'm using a beta half the time on these patches.

If 0.7 can't be made to work well soon I don't know what I'll do. Last time I checked I didn't see a way for people to even get the 0.6 runtime from the Oculus site anymore. Assuming I can release my product before 0.7 is straightened out, I'm not sure what I can do but host the 0.6 runtime for customers myself and ask them to downgrade if they are running 0.7 when I release.

The only version after 5.2 that I've tried that works ok for VR is 5.2.0f3 (even with 0.7 runtime which it's not supposed to be using..?). Everything after that (including 5.3 beta) is slow, choppy, one eye flickers, etc.. The performance is just too bad with the 5.2 patches. I've tried with the new NVidia graphics driver and without it but I see no difference. I'm trying to decide between 5.2.0f3 with 0.7 runtime or just going back to one of the fast 5.1.x with 0.6 versions.

Comment from an Oculus person in ccsander's thread over there on October 4:

"Thanks, everybody. We are taking a look at this and should have a fix within a few weeks. For now, I would recommend those affected by the extra overhead stay on 5.1.3p2."

1 Like

I've been sitting here for 15 minutes trying to open my project with 5.1.2p3 and it's just not going. CPU is banging away around 40-50% (quadcore), memory is going up and down but it's not opening. Is there some cache thing I can delete somewhere or should I just sit here for as long as it takes? This is another reason I really don't like mucking around with these patches.

30 minutes now. Unity won't even open my project anymore. What now?

I know it may sound counter-intuitive but maybe try deleting the library folder and let the project reimport everything (and if that's taking too long maybe try deleting the lightmap folders too before loading the project again, as they can take ages to convert) and then if it opens, re-bake the lighting once the project reimports everything. I've had to do this a couple of times, managed to get my 5.2+ patch project back to 5.1.3P2

Thanks, Scott. I'm modifying some of the assets so I can't really just reimport everything whenever Unity blows up during a version change. I eventually got it working again with that version, but it ate up most of my Sunday. All because I wanted to play for 30 minutes to see if any of the new patches might be of benefit. Never again.

After that last post it got much worse. I shut down Unity and restarted it and waited another 30 or whatever minutes. Finally it loaded and said the asset importer had crashed. And just like that, poof, a good chunk of my user interface stopped working and wasn't even being rendered anymore. I switched back to another version of Unity and waited another 30 minutes for it to load. The "hold on" window would sit there for a good 10 seconds just processing a single image file every time it hit a terrain splat texture. I'm not sure how many times I tried this, sitting there for 30 minutes or so waiting for a different version of Unity to open my project, but it ate up most of the day.

That last version (don't know which one now) wouldn't show my user interface anymore either, so I decided to try 5.1.3P2 after seeing that it has the best Oculus performance so far. I started downloading and weee, I now have 200kBPS download speed from Unity. Restarted the downloader and it was the same thing. "x hours to finish downloading." Great. I said "screw it" and went to the beach for a few hours in a huff. Came back and it was done.

The first time I ran 5.1.3p2, my UI was gone too. Then I switched from scene 1 to scene 2 and back and it fixed itself. Go figure. I thought, "ok, at least it works now."

This has spilled over into today too. Minutes ago, after a couple of hours of work I've realized that 5.1.3P2 is no good either because a function of mine involving GetComponent() in the user interface that has worked fine for probably six months doesn't work anymore. So now a different part of my user interface that displays a bunch of images in an array no longer works at all. And as soon as the "Object reference not set to an instance of an object" pops up, my world space cursor system I wrote for the Rift breaks too, so I can't even click the buttons in my UI anymore. Not to mention the one screen is just gone. So 5.1.3P2 completely breaks my game too.

I'm getting really frustrated with all this and never should have even attempted to try a new patch. Yesterday should have been a simple matter of trying a couple, but each version seems to break something different and it turned into an all day affair that is still going on as I write this now that I've discovered 5.1.3P2 is broken too, just in a brand new way. I'm talking about code that has run just fine for months and months, nothing ground breaking or new here.

So now it looks like I need to just go back to the version I was using originally before I started down the all day long process of trying different patches. I'm done with even bothering to try new patches unless it's absolutely necessary. Unfortunately this is a common experience for me with Unity updates. And then I see the news today in the middle of all this that Unity 5 has deprecated the tree system that my project has relied on for over a year now. Lovely.

For the love all that is holy: Unity, I love you guys, you're brilliant and have a very difficult, challenging job, but please, please work on getting your testing procedures nailed down better. There is stuff slipping through in your patches that is just absurd. This 5.1.3P2 version for whatever reason pauses the editor when my game changes scenes in preview mode. Huh? Why? How did nobody see this? Another 5.1 patch just hung any time you had the Rift plugged in and stopped the editor by pressing the play button. How does this kind of stuff slip through?

I hope I can be forgiven for the occasional rant like this. I'm pretty hot right now and it just feels like it's something new and game breaking every single time I change to a newer Unity version. I feel like I'm not getting anything done a lot of the time and am just chasing my tail. I fully expect things to be this way in beta, but not on the publicly released side.

Anyway, enough of my rant. At this point I can not use 5.1.3P2 and would suggest anyone reading this exercise caution in doing so because it has its own bugs. The versions that so far have worked flawlessly for me are 5.1.2p3 and 5.2.0f3. The Oculus performance on those is very good. Not quite as hot as 5.1.3p2 but it's not too far behind. Good enough.

EDIT: Some time later I've tried 5.1.2p3 which worked fine before. This version is now pausing whenever I change scenes in the game too. I'm at this point struggling to find a version of Unity that even works acceptably. Versions that worked fine before yesterday now have problems they didn't have before. :rage:

I wonder if there's some way some of us might be able to help Unity staff by creating a test project that a couple of them would run every time there's a patch about to come out along with a simple testing list something like this:

1) Open project in the new patch, then close and reopen it in the previous version (or the previous few). Check this, this, and this to see if they still work.

2) Plug in Oculus and press play. Press play again to stop and see if Unity freezes.

3) Etc..

You know? Something like this might be helpful. I'm ranting a lot the last couple days, but it'd be more constructive to at least try to offer solutions. Is there some sort of test project some of us could make or suggest Unity makes that would cover more of the bases than is being done now? I'm sure each programmer does their own testing on their own aspects of Unity development, but the trouble seems to be that programmer A breaks something programmer B did three months ago and it's just missed because that interaction is never tested specifically.

I may be talking out of my bunghole here, I understand this is not easy, but maybe we could help make the situation better. Is there anything I can do? It seems like nearly every version of Unity I've ever tried has some bugs that I have to custom write my way around somehow, but I can't stop what I'm doing and send a 30GB project every time there's a hiccup in Unity and then wait around for it to be patched. I do what I can, if it's easy to reproduce I'll send a bug report, but most of the time it isn't. I can't help but think if they had a couple of internal guys develop some test "game" that utilizes all the various features in a number of ways, some of this obvious stuff that slips through might get caught and fixed, or at least a fix that breaks something else could be delayed until the next patch.

I don't know, I could be totally wrong about all that (I've never been to the company and am by no means a brilliant programmer myself), but I'm just getting frustrated with all this and would like to help somehow if I can.

oculus 0.7 beta is the worst, I've tried a simple thing:

stay with the same unity version, uncheck virtual reality supported option on player settings, and use the old unityIntegrationUtility 0.4.4 or whatever the name was, import, place the prefab OVRPlayerController, DON'T touch the scripts and don't build ANY of the scripts in the OVR

now switch from oculus runtime 0.7 to runtime 0.5 or 0.6, use the extended mode and place the unity game window in the oculus screen at full screen, press play, and see how it works completely smooth and you'll see the height maps working (for me are completely flat materials with 0.7 runtime)

the big problem is, for me, the unity build doesn't works with oculus runtime 0.5 or 0.6.

EDIT: All right, I've tried to remove all my scripts, removed lights, deleting all occlusion culling data, redoing it, and nothing seems to work.

just reimported OVRPlayerController 0.4.4 and everything is smooth as hell, the problem is that in editor you won't be able to send the image to oculus if you are at 0.7 oculus runtime cause there is no way to use extended mode in oculus.

so, it seems that the problem is with Virtual Reality Supported option

Hi everyone,

and thank you so much for your feedback. I know how frustrating this process can be but I assure you we are working our hardest to ensure the best possible VR experience. Here is a summary of our performance testing ideas:

Tracking VR performance is unique and the challenge for me has been deciding on a metric that is useful to developers. The reason for this being is that standard metrics such as average FPS aren't very useful. Dropping even 1 frame can have pretty bad consequences and average FPS doesn't usually catch that.

Therefore a simple metric is to count the amount of dropped frames found in a given amount of sample frames. For example, we might count the amount of frames out of 1000 frames that take over 13.3 milliseconds (or below 75 fps). We see more dropped frames with poor VR performance.

Another metric we like can be found in the test project that @ccsander posted here: https://forums.oculus.com/viewtopic.php?f=37&t=26574 the measurement ccsander uses is a CPU delay script that simulates a variable CPU load thus giving a good idea of the CPU overhead used in the VR pipeline. The less CPU time you can load into the delay script the worse your VR performance.

Lastly, we have implemented an internal test suite that tracks performance for VR over the many versions of Unity. This way we can catch and compare performance regressions like the one you are experiencing now. I am just rolling the test suite this week but it may take a few days to gather useful benchmarking information on the various versions of Unity. Please be patient while we look into the current performance issues and as we deploy this new test suite. I will be personally upset if another performance regression falls through the cracks.

Let me know if you have any comments or questions.

Thanks,
Will
Unity QA

12 Likes

Thank you Will, look forward to your findings.

Any news on this? This performance drop is stopping us from sending new demos of our game out and we really want to avoid backtracking to 5.1.

2 Likes

I have tested on all patch -and beta releases up until today, and the performance has just gotten poorer for each release.

1 Like

Bah. This is bad news. I wondered why my fairly simple Gear VR (edit: Google Cardboard) app seemed so choppy (even more baffling... the framerate drops when I turn my head to look at a simpler, lower-polycount part of the scene. Looking at my 20k poly character + some simple terrain = no problem; turning head to look at terrain-only with no additional polys suddenly causes lag)

Does anybody have a recommended release version that is the best balance of stability and performance efficiency for Gear VR (EDIT: Sorry, I meant Cardboard. Probably similar performance specs, though)? (Fortunately, I am very early in the dev process so I can roll this back if I have to...)