What are the Performance-killer for VR(eg.OculusQuest2)? all postprocess, all screen-space?

Every frame 3 times

Once for each eye and a third time for your monitor, since VR games do still display on the PC they’re running on, as well as the headset. Obviously for Quest/2 its just twice.

Upperbody IK, and why VR games usually only show hands

Aside from the technical challenge, this relates to the psychology of VR. Ever played Pavlov on Steam? The general issue with arm IK is that the software doesnt know which way your elbow is pointing, and people tend to get uncomfortable when the arms in-game don’t match what their arms are doing irl. As an example, you can hold you hand in front of you and move your elbow about without rotating your hand, but the software has no way to know that you’re doing that. For seasoned VR gamers this isn’t an issue, but for new players it can be. Now consider Half-Life: Alyx. As we know, Valve focus-tests to an absolute fault and after some five years of development and testing they decided to stick with the disembodied hands that are familiar to most VR apps. Probably for the same reason that ladders in that game are teleports, not some kind of manual climbing mechanic. Gorilla Tag has great body physics, if you haven’t checked that game, you definitely should - it’s not just an interesting VR case study, its bonkers fun :stuck_out_tongue:

isn’t ForwardRender the ONLY choice on VR?

Not at all! The original question was about VR performance, and Forward Rendering gets better performance than Deferred Rendering, but they’ll both work just fine in VR.

Component-based fog

By component-based, im referring to the engine components that generate fog, namely Exponential Height Fog and Atmospheric Fog.

Target Hardware

For Quest/2, you want it set to Scalable 2D/3D and Mobile/Tablet. The major thing these settings do anyway is set a bunch of console variables in your project’s config folder.

Use Legacy Shading Model no longer in the engine

This was pointed out above, some of the settings ive suggested have been changed or removed in recent versions :stuck_out_tongue: Im still working in 4.24 and 4.25 since 4.26 was pretty broken for VR and I havent dug into the OpenXR template much yet but its on my plate at my day job right now.

Reflection captures

As far as Im aware, reflection captures work fine in VR. Probably not in a standalone Quest app, though. I work in PC-powered VR (Reverb G2 and Rift S mostly) about 90% of the time, and what Ive learned about it is that almost all ‘flashy’ features of the engine aren’t compatible with the latest UE4 android SDK.

Plants/grass/trees

There are ways. The traditional alpha-card method of creating foliage isn’t performant enough for VR, but you can (and this isn’t actually as time-consuming as it sounds) individual model each blade of grass or each leaf on a tree and not use alpha at all. You can also LOD and cull foliage meshes, which will help too. I’d highly recommend talking to a technical artist about this specific topic, because further than very general performance advice, every project has different demands.

Water

Not with the 4.26 water component lol. For a puddle or relatively still water, you can use a plane with a highly reflective surface, a normal map, and maybe some world displacement to simulate the behavior of water. For oceans in a Sea of Thieves style or a beach with waves, im honestly not sure. High-end VFX like that may be very challenging to recreate in VR in a performant way. I could be wrong! Im thinking, and I cant name a game that uses water in VR.

Lightmass

Nah you absolutely need a Lightmass Importance Volume. Just around the areas where the player will go, but you’ll need one of these components. Your Lightmass settings (in the World Settings window) will determine how the lighting build will be generated, and (if I’m remembering correctly) the engine will throw up errors if you don’t have one in your scene.

Quest 2 polycounts and standards

Yeah, none that Ive found, sadly :frowning: Im certain that there is an upper limit for poly count, but i dont know what it is. This guy probably does, though: https://www.youtube.com/c/GDXRLEARN

Highly recommend checking out his videos, he develops for Quest and Quest 2 and has heaps of videos.

I would also strongly suggest checking out both these links:

How Epic optimized UE4 for Robo Recall: Make & Maintain Framerate! "Technical Postmortem for Robo Recall, and Beyond!" by Nick Whiting

How Drifter optimized Robo Recall for Oculus Quest: Learn how Drifter Entertainment leveraged elegant optimizations to bring Robo Recall to the Oculus Quest - Unreal Engine

There’s also this excellent UE4 level slice breakdown that covers the fundamentals of environment design in thorough detail (you can download a pdf of the whole case study via google, im not sure if linking it directly is allowed here): UE4 The Corridor Project: Step-by-Step Workflow to Construct an Environment in 10 Hours with Unreal Engine 4 Download

4 Likes