Merging Common Meshes to Decrease the Number of Draw Calls in Levels
Using Simplification Tools to Decrease Poly Counts on Meshes
Using Game Profiler to Identify Code and Objects that Cause Poor Performance

Mobile Game Optimisation

Optimisation was extremely important when building a mobile game for iOS and so I made it a priority to focus heavily on this area and research methods of increasing performance.  Our main form of optimisation was using poly reduction tools to simplify our meshes without removing any obvious detail. By reducing the poly count of our objects, we were able to save memory and also reduce the amount of time required for the device to draw the scene. I concluded a major performance factor with the iOS specifically, was the draw call count. Because of the pause caused by requesting the drawing of each individual object, having a lot of separate objects in the scene really ruins performance. Once a level was finished, we addressed this by taking objects using the same material and merging them into one mesh so that they can all be drawn in one call. Merging was a great optimisation method, but also required understanding the correct meshes to merge, as simply merging everything can result in worse performance than before.

I implemented several practices to save as much memory as possible. These included a level streaming configuration for our levels, reducing texture resolutions on objects that were less important or viewed at a distance, reducing poly counts on objects where possible and reducing the audio quality down to 22050Hz mono. The speakers on mobile devices aren’t designed for quality audio and many people playing mobile games don’t have sound at all because of their surroundings. Saving memory was particularly important on iOS because you were never guaranteed an exact amount of memory and it was completely down to the other apps running and the iOS to determine the amount available.

In addition to optimising game content, I also used the Game Profiler tool to identify particular code and objects that cause poor performance and then rectify the problem.