Hello ,
Other members of the team and I have been looking into this issue and we have compiled what we think will be useful information as it pertains to your project. This will be a general over view of the project and where we think there could be improvements to performance. This will in turn help get the FPS up to a more desirable level. I hope that this information is helpful.
The level could be broken up in a more useful/performant manner. Our suggestion is to break the level up into modular pieces that could be culled with Precomputed Visibility (more information below).
This is an example of the current level:
Breaking the level up like this is not the most optimized solution.
Next, if we look at the quality of the geometry and excessive triangles we get this. We’ll look at this chunk specifically.
Take note that this is looking at the wireframe overlayed on the chunk selected in the first picture.
The triangle count is ~20k which is high. The rest of the chunks around the level are in this range if not more. The geometry does not need this many edge loops. For instance the flat faces do not need to have multiple front faces, and when developing for mobile you need to keep in mind that you want to keep the scene view under 500k triangles, which with VR really means you want to keep it below 250K since you’re rendering the scene twice.
Next, we’ll move on to the Material used for these chunks. This is a single texture that is 4096. Mobile only supports up to 2048 so it’s going to be down sampled to reduce the quality even though it has been set to NoMipMaps in the texture settings. This means that it stays rendering at full resolution no matter the distance instead of setting the quality lower at specific distances. This is not the most optimized design for mobile and/or game development in general.
Lastly, I’ll end with Precomputed Visibility Volumes that have been enabled for the project, it will not work with the project in its current state. Precomputed visibility works by taking the cameras position when it’s within a visibility cell that gets placed above geometry in the world and if the camera can not see it because it’s occluded by another object it will cull the object out to make things more performant. This is recommended for Mobile because there is no dynamic occlusion queries for mobile.
Suggestions:
- You could use better geometry management, decreasing the poly count could improve prfomance and lends it’s self more to the expected workflow.
- You could break the models up in a modular way that makes more sense.(Love). I recommend Kevin Johnstone’s modular Level Design powerpoint (link given) He has worked here at Epic for a number of years, is an awesome artists.
- Texture layout should be broken up in a way that will be more performant. Having all textures on a single texture is less performant than breaking them up. The best way to think about this is, it is 4x more expensive to use a 1024 material than it is a single 512 material. The same goes for his lightmaps that are all at 1024 or higher. These all have to be loaded into memory on the device, which can be limited. In general lower is better when you can get away with it.
- You could Profile this project to identified a lot of these issues. I recommend the following documentation and youtube streams:
Make it a great day


