Optimizing a map for Quest is no easy task, this guide will introduce some tools and techniques to help modders bring their custom maps to Quest.
You should only use static lighting for your quest map. Quest isn't really capable of handling dynamic / Stationary lights for a standard scaled map.
Performance Related Statistics And Profiling
Doing an in editor profiling can often help you identify the performance bottleneck of your map.
* You need to make sure your map has been baked before you start the profiling.
Draw Call Profiling
* We suggest Quest Maps have a static mesh draw call count less than 400 in any viewing angle within the playable area of your map
To check the draw call of the current scene, execute the command "stat scenerendering" in editor's console
Triangle Count Profiling
* We suggest Quest Maps have a triangle count less than 400,000 in any viewing angle within the playable area of your map
Draw Call Optimization
This section will introduce some tools and techniques available in Unreal Engine 4 that could help you reduce the draw calls for your scene.
1. Actor Merging Tool
It's often a good idea to combine multiple small props that are close together into one mesh with one material, Actor Merging Tool can help you achieve that.
2. Bake Precomputed Visibility
Occlusion Culling is a very important way to reduce draw calls in your scene. But unlike PC, the Android platform doesn't support runtime hardware-accelerated occlusion. That's where Precomputed Visibility Volume come to help.
If you are making a big map, It's often a good idea to set up HLOD for your map. HLODs can replace multiple Static Mesh Actors with single, combined Static Mesh Actor at long view distances thus reduce the overall draw call and triangle count of your scene.
Check it out here: Hierarchical Level of Detail
Triangle Count Optimization
1. Generate LOD for your Mesh
Setting up LOD for your mesh can dramatically reduce the triangle count of that mesh when viewing from distance. For move details: Setting Up Automatic LOD Generation
2. Use engine tools to reduce the triangle count of your meshes.
It's really common some assets you bought from the unreal store or picked up from quixel megascan are having a really high triangle count. And sadly, Quest often don't like these high triangle assets :(
Sometimes these assets' triangle count is too high, Adding LOD won't even be enough.
Luckily, we can use tools unreal engine provided to bring down the triangle count and let them fit in Quset maps nicely.
Take this rock I got from quixel megascan as an example.
22,372 triangles for LOD0 is really not great. Let's see how we could reduce the triangles down.
First, generate LOD for the mesh by selecting the appropriate LOD group setting. Since this rock will be used as a scene structure, I will select "LevelArchitecture" this time.
Once the LOD has been generated, we can use the LOD Preview tab to check each LOD level got generated.
LOD3 seems pretty good! It nicely retained the shape of the original mesh and it has only 2,796 triangles! Which is about 1/8 of the original. We will use this LOD3 to generate a new mesh, and LOD3 for this original mesh will be LOD0 for our new mesh.
But first, Let's drag our original mesh into a map
Right-click while the mesh is selected, and select "Merge Actor"
Set "LODSelection Type" to "Use specific LOD level", Set "Specific LOD" to 3
After clicking on "Merge Actor" button and selecting a directory. Your new mesh will be generated.
Now you can be setting the LOD group for the new mesh to further optimize the mesh triangle count at distance.
Most of the materials used in your map should be as simple as possible. Too many shader instructions or too many texture look-up will cause performance issues on Quest.
Here is an example material, This is the most common material we used in Contractors Quest Maps:
1. Only use one texture: base color texture for a minimal texture look up.
2. Set roughness to 1 or enable fully rough to disable specular calculation for your material. This can significantly lower the material's instruction count.
* You can use some standard PBR materials for some objects that are important to visual and not too diffused in your scene (ie, Cars, Windows, etc). But keep in mind, Quest / Android don't like too much texture lookup operation, the majority of materials in your map should still use this simple material setup if possible.