4.27 template poor performance on Quest 1

I am trying out the template on Quest 1. Tried arm7, arm64, OpenGL (doesn’t work) and Vulkan and no settings so far gives a smooth experience. Just moving my head side to side, everything is very jerky. As well as moving the controller in front of my face, very jerky.

Is there some setting I need to toggle or something? Or are Quest 1 just going to get a bad experience regardless? I find this hard to believe since 4.25.4 runs so smooth. I think 4.27 used OpenXR right? Well maybe there are some things still to work out?

1 Like

Same here. Just copied the contents of a project into a 4.27 new VR template and its very jerky indeed. Was fine in previous version

I tried disabling the openxr eye and hand tracking too, didn’t help. Anyone know if it runs any better on a Quest 2?

Well now i am really confused. I was ready to say I think it’s Vulkan because my level in 4.25.4 looks good in OpenGL but runs poor, looks dark, and has oversaturated colors if I switch to Vulkan. Same as in 4.27.

Yet if I run this level in 4.26.2, whether I use OpenGL or Vulkan, it has the same poor performance, dark and oversaturated colors as Vulkcan in 4.25.4 and 4.27. It’s like it runs in Vulkan no matter if I select OpenGL or Vulkan.

So the last ‘good’ version for me is 4.25.4. It runs fine if I ‘launch’ it from UE, but the problem is packaging it, and then installing/running. Then it just quits right right after it starts to launch. Black screen, then back to main Oculus menu. If I package for arm7 the package works, but Oculus will only accept arm64. Argh!! All the other stuff above is using arm64.

All this is on Quest 1.

Did a new test today; created a new blank project, enabled openXR and Vulkan, migrated the same assets as yesterday from another project and created a new level with it (yesterday I just imported the levels and enabled those). Build it for Quest1 using arm64 and now its running fine at 72 fps.
No clue; Something in the migration process of levels? Some overhead in the VRtemplate project? …?

hmm, so if you just create a new vr template project, and use the default level, that is poor for you though, correct? I’ll try what you did with a blank one.

Ok so I created a blank project, and migrated the VR template map into it. When I try and run it, I get some errors:

LogPlayLevel: Error: Y:\app\src\main\java\com\epicgames\ue4\ error: variable PackagedForOculusMobile is already defined in class GameActivity
LogPlayLevel: public boolean PackagedForOculusMobile = false;
LogPlayLevel: ^
LogPlayLevel: Error: Y:\app\src\main\java\com\epicgames\ue4\ error: method AndroidThunkJava_IsOculusMobileApplication() is already defined in class GameActivity
LogPlayLevel: public boolean AndroidThunkJava_IsOculusMobileApplication()
LogPlayLevel: ^
LogPlayLevel: Error: Y:\app\src\main\java\com\epicgames\ue4\ error: variable hasVR is already defined in method onCreate(Bundle)
LogPlayLevel: boolean hasVR = false;
LogPlayLevel: ^
LogPlayLevel: Error: Y:\app\src\main\java\com\epicgames\ue4\ error: variable vrIntent is already defined in method onCreate(Bundle)
LogPlayLevel: Intent vrIntent = new Intent(Intent.ACTION_MAIN, null);
LogPlayLevel: ^
LogPlayLevel: > Task :app:compileDebugJavaWithJavac FAILED
LogPlayLevel: The following annotation processors are not incremental: lifecycle-compiler-2.0.0.jar (androidx.lifecycle:lifecycle-compiler:2.0.0).
LogPlayLevel: Make sure all annotation processors are incremental to improve your build speed.
LogPlayLevel: Error: Y:\app\src\main\java\com\epicgames\ue4\ error: variable pkgManager is already defined in method onCreate(Bundle)
LogPlayLevel: PackageManager pkgManager = getApplicationContext().getPackageManager();

…how did you get around those errors?

The VRtemplate is just a small project that DOESN’T (see edit) work nice on the Quest1.

Did you disable the OculusVR plugin and enable the OculusXR plugin?

Edit: I checked again with OVR metrics and I now get the same bad performance on the Quest1 as reported by Brickan.

The new VR template project doesn’t run nice on my Quest 1. If I go upto the guns, and just wave the controllers in front of my face, it isn’t smooth at all.

I did disable the Oculus VR and enable XR because ya, I read that can cause issues. But I did get around the errors by copying most of the .ini stuff from the template into my blank project.

Now I get that seemingly random lovely error I was getting with other engine versions:

Error: 08-22 14:04:39.354 26253 26253 D UE4 : Fatal error: [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/Core/Private/HAL/MallocBinned2.cpp] [Line: 1241]

That happens for arm64 only. When running for arm7 it works, but still bad performance. Need arm64 to work anyway.

Maybe time to switch to Unity. Or maybe UE5 everything VR will be worked out?..

BTW, when I talk about the 4.27 template giving poor performance, I mean around 14-15 FPS. If I go into the smaller room, it jumps up to 22-23 FPS

I created a new vrTemplate project (4.27.0) and checked again with OVRmetrics and you’re right; the default VRtemplate in 4.27.0 runs that bad as you reported on Quest1. I hadn’t checked with OVR metrics before, barely tested the level and was mainly focused on solving why my migrated levels gave such bad performance. Sorry for the confusion.

If you do create a blank new project and enable openXR, Vulkan etc and build for Quest1 (so without the vrTemplate stuff in it) and use your own meshes, blueprints/controllers etc as before, it should run nicely. I tested a small project (200k triangles, 300 drawcalls) and it runs 72fps. So there’s something in the template project that doesn’t play nice with Quest 1.

@VictorLerp Is it a known issue the vrTemplate project runs like this on Quest1? I tried looking for a reason using Renderdoc (v1.15, plugin v1.0 Buildin in Editor) but for some reason it gets stuck at the three dots on the Quest. Renderdoc also reports some errors when connecting (error reading from socket, didn’t get proper handshake).

hmm ok I’ll try a blank one with my own level and see what happens…

Not having any luck importing one of my VR levels into a blank 4.27 project.

I got it to the point where there aren’t any errors in the console log, but I just get a black screen with the 3 dots. I have once seen ‘Oculus System Driver isn’t responding’, but most of the time I don’t even get that. The level I tried to migrate in was the template VR level from 4.25.4. I didn’t do any projects in 4.26.

If you are able to get a 4.25.4 level in and running in 4.27, I would love to know how you do it.

@Brickan I only have 4.26 and 4.27 installed but that shouldn’t make a difference. I guess it must be some setting that isn’t working for you so I just tried this and it works for me on Quest1;

  1. create a blank new game project in 4.27 - just the default settings (desktop, maximum quality)
  2. migrate a level from a 4.26 project to this project
  3. enable the oculusOpenXR plugin, disable the Oculus VR plugin

In the project settings change this;

  1. in the Maps & Modes, change both default maps to your migrated level
  2. enable ‘start in vr’, disable ‘mobile hdr’ enable ‘mobile multiview’
  3. in the android settings ‘accept SDK’ minimum SDK = 25, Target = 28, enable ‘package game data inside apk?’ enable ‘arm64’ and ‘support vulkan’, disable ‘arm7’ and ‘opengl’. Add Quest1 at the ‘package for Oculus Mobile Devices’
  4. Build the project using File-PackageProject-Android-AndroidASTC
  5. install using the bat file

I think this is all I did thats relevant. Project runs now on the quest
After this works, you have to copy/edit the inputs of course and all the other stuff your project needs and do/try out the standard optimizations because the optimal settings depend on the project (quality/needs vs performance).

Ok I hadn’t done your #5 but it didn’t help. Well now it kicks out after a few seconds of black screen, whereas before the black screen just stayed there.

Only other diff is I tried a level from 4.25.4 as I haven’t done anything in 4.26. But I guess I can try migrating the 4.26 VR template level in and see what happens.

Did test today. UE4.27 release version+vulkan+OculusOpenXR +VR template can run on quest2,but the same config just switch vulkan to opengl on project settings doesn’t work.
Plugin:OculusOpenXR+OpenXR, no OculusVR and no SteamVR.
Project settings:no msaa,no multiview ,no hdr.minimum sdk 23,target sdk 25.

vulkan ok! opengl not ok!

I’m not sure it is meant to work on OpenGL. How does it run with Vulkan though on the Quest 2? What are your framerates?

@Brickan @VictorLerp I did some more testing and there’s something special with the 4.27.0 VR template project & Quest 1. Switching the directional light to static didn’t make any difference in fps.

The VRtemplate level does run at 72 fps though if you just create a brand new blank project and migrate the VRtemplate level into that. Just change a few settings as I described a few posts before this one and also import the inputs and it runs 72 fps - even with a stationary light (0 dynamic shadow distance or it will drop to 50-ish).

One thing though, as soon as you start shooting at the ball / boxes, the gpu spikes and the fps drops. See pic. Something with physics maybe? Are those handled on the GPU?

Ok I guess I didn’t actually try importing the 4.27 template into a blank project, just my own level or a 4.25.4 level. Both of which didn’t work out well.

Also, for the physics thing, check out this thread: VR Template Physics Issue 4.27 - #13 by VictorLerp

I want to say that vulkan enables some sort of tone mapper because the colors I’m getting in HMD are matching what I’m seeing in desktop lit mode with tone mapper on.

No idea how to disable tonemapper as it hasn’t been an option directly anywhere.