Optimizing Draw Calls, Instanced Meshes and Lightmaps UV for Meta Quest Standalone?

Hello,

We are developing a VR project that should run on the Meta Quest 3 as a standalone application. We have managed to compile and run it, but we need to optimise the details.

We had a 3D room rendered by an external company because we will also use it for a desktop-only app. I’m wondering if it will be possible to reduce the number of polygons and fix the lightmap UVs. Currently, the precomputed lighting does not look good due to the lightmaps overlapping by 50–70%.

This is one of the meshes in Blender, for example. I suspect that this is too much to be optimised. This also generates overlapping lightmaps. Finally, 1 chair is in fact around 17 parts (mesh) and I guess that it could also be “merged” to reduce draw calls?

Any help or suggestions are welcome!

Creating game-ready assets is a huge subject, and there are many different workflows.

Generally you create a single low-poly mesh from the high-poly ones, and unwrap it with unique UVs. You then bake all the material texture maps from the high-poly to the low-poly mesh for a single set of textures. You can also bake down the geometry detail from the high-poly meshes into normal and ambient occlusion maps.

If you are doing this yourself, I’d suggest looking up Blender tutorials on creating game-ready assets, retopology, UV-mapping, and texture baking.

2 Likes

Hi, unless you need to do actual high poly to low poly texture baking, you can do it all directly in the engine.

You can auto-generate lightmap UVs in unreal engine in the static mesh editor (when you open the mesh, in the lod build settings). Link to the docs: Generating Lightmap UVs in Unreal Engine | Unreal Engine 5.6 Documentation | Epic Developer Community

You can also merge several meshes into a new mesh in the engine (optionally merge the materials as well, so you could merge all 17 meshes into a single one with a single material). You can do that via Tools → Merge Actors. If you also want to bake down the materials, make sure to use a specific lod, otherwise the option to merge materials is greyed out. Link to the docs: Merging Actors in Unreal Engine | Unreal Engine 5.6 Documentation | Epic Developer Community

And you can also reduce the polycount in engine using the modeling tools (default reduction is set to some fast but low quality method, I think ‘UE Standard’ was the best method, but takes more time to build).


As for the instancing, you could select all your meshes and put them into a packed level blueprint, then they will all be using instanced static meshes but you can still edit/move them individually. Not sure whether that will work with baked lighting though.

2 Likes

Hi, thanks for your detailed answer. I’ve actually been trying to generate lightmap UVs directly in Unreal Engine, but I think the large number of faces (12,000 for the chair back alone) is always producing poor results, such as overlaps, ngons and strange shadows.

I’m looking to replace the chairs with something that has a lower poly count. I’ve already made some changes in Blender (Decimate, Limited Dissolve, etc.) reducing to 2000 faces, which improved the lightmap UVs, but they’re still not perfect in some part of the chair.