01-03-2022 08:31 PM
I've been developing a VR space shooter game for the better part of a year now, and I've finally taken a good look at the OVR metrics tool for measuring performance.
Unfortunately, I've found that even when material batching everything in the game, I routinely struggle to reach 60 FPS whenever terrain is switched on. It looks like I'm coming to a decision point between dropping terrain from this game (ie: making everything happen in space) so I'm wondering if the Oculus Store fill flat out reject the game if it fails to achieve 72 fps (note: I haven't tried SpaceWarp yet; looking to add it to my project once it's a bit more stable).
Video here (at substantially higher graphics settings than the planned quest version)
https://www.youtube.com/watch?v=HoC-xfeNZ84
Solved! Go to Solution.
01-05-2022 04:05 PM
Your game probably won't be accepted if it doesn't reach 72 fps.
First, I'd look into methods for optimization - there is plenty of info out there to get a good framerate. Make sure meshes are combined (which reduces draw calls), occlusion culling (if necessary), reduce shader complexity, etc...
If you have heavily optimized and it still doesn't hit 72 fps for Quest 1 (but does for Quest 2), a cheap trick is to detect whether the hardware is Quest 1 or Quest 2, then set the render scale to 0.75 scale only for Quest 1. It won't look as great on Quest 1, but should likely pass all the VRCs (and very few people use Quest 1 these days).
01-03-2022 08:32 PM
Note: I am referring to the Oculus Quest 1 here. I'm fairly confident I can hit 72 fps on a quest 2
01-05-2022 11:47 AM
I found the terrain tools to be unusable on the Quest as they tend to have a lot of tris and verts. I have also found that getting things optimized to 72FPS on Quest 1 takes 80% of my development time. It is very much possible to achieve 72 on Quest 1 and of course 2 and it will ultimatly make your title better in ways you will not recognize until after optimization. I personally found Mesh Baker to be VERY handy to reduce draw calls, but it will not help with Terrain unfortunatly. https://assetstore.unity.com/packages/tools/modeling/mesh-baker-5017
01-05-2022 04:05 PM
Your game probably won't be accepted if it doesn't reach 72 fps.
First, I'd look into methods for optimization - there is plenty of info out there to get a good framerate. Make sure meshes are combined (which reduces draw calls), occlusion culling (if necessary), reduce shader complexity, etc...
If you have heavily optimized and it still doesn't hit 72 fps for Quest 1 (but does for Quest 2), a cheap trick is to detect whether the hardware is Quest 1 or Quest 2, then set the render scale to 0.75 scale only for Quest 1. It won't look as great on Quest 1, but should likely pass all the VRCs (and very few people use Quest 1 these days).
01-05-2022 10:17 PM
Thank you so much for the advice.
Through extensive profiling, I was able to knock FPS down to 58-70 at a render scale of .9 by:
- Reducing the rate of AI behavior tree ticks from every frame to once per second!
- Noticing that the majority of the particle effects in the game were using Mesh renderers rather than billboards (this actually took up as much as 100 batches per frame during large space battles. I replaced every particle effect in the game.
- Ditching Unity's URP terrain lit shader for a bakedlit and/or simple lit shader
- Using the simple lit shader instead of the standard lit shader (no roughness channels)
- Using a baked lit shader instead of a terrain shader (no splat maps and super low resolution textures)
- Adding lods (bought an automatic lod generation tool over the new years)
- Making sure every single mesh in the game excluding terrain shares the same material and texture.
- Making sure every particle effect in the game used billboards instead of a mesh renderer
Doing all of the above (especially the particle effect and terrain shading issues) brought my fps from 35-45 to around 50-60 fps.
Taking the render scale down to 0.75 totally brought the fps to a consistent 72 FPS! Thank you so much. Last week the game was running at 30 fps. Now it only dips to 65 during the most intense space battles!
This is somewhat embarassing, but I've been holding off on even buying a Quest 2 until I get an acceptable build of this game up on App Lab. I'm committed to finishing a Quest 1 build, and building on top of that for a Quest2 build (ie: adding a lod level using more sophisticated shaders and terrain.
01-22-2022 11:24 PM
What's the alternative for terrain then ?
01-22-2022 11:38 PM
I used various grass mounds, dirt mounds and similar and scaled them flatter or more hilly as I needed and then used Mesh Baker from the asset store to make them one or several larger meshes. Worked out very well. I would even take that combined mesh, covert to FBX and then poly reduce using the decimate function in Blender to keep my poly count lower for the Quest. I also just used planes with nice textures in scene that I just could not afford poly counts on the floor due to higher poly objects elsewhere. Works very well and every bit as real looking. That said, I have no colliders on them as my title does not need so I could speak to that, but most grass and dirts mounds come with colliders. Hope this helps you out. Love to know what others have done for terrain too.