Contractors VR

Contractors VR

Create and play mods in VR for this shooter.

Learn more and find the game on Steam, Oculus.

Quest Map Optimization Guide

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.

2 comments

Posted by on


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.

Lighting Requirement

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

meshdrawcall

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

trianglecount


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.

3. HLOD

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.

megascanrock

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.

lodsettings

Once the LOD has been generated, we can use the LOD Preview tab to check each LOD level got generated.

afterlod

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

meshinmap

Right-click while the mesh is selected, and select "Merge Actor"

selectmergeactor

Set "LODSelection Type" to "Use specific LOD level", Set "Specific LOD" to 3

specificlod

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.

newmeshlod

Material Suggestion

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:
materialexample

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.

2 comments

Join the community or sign in with your gaming account to join the conversation:

TD
TheDutchma1662560990 @thedutchma1662560990

Can you build the map for pc and quest separately, same name structure, but one will obviously be android, lets players still do cross play with diffrent graphical settings and textures?

CAT_Kyle-G
CAT_Kyle-G @kyle-g1649286540

Yesterday I asked almost the same question. Here is the answer. Discord.com