Unity quality settings
It is useful to know the Unity quality settings to ensure you select the correct settings for your application.
Unity has a number of options that alter the image quality of your game. Some of these options have a high computational cost and can have a negative impact on the performance of your game.
The following figure shows quality settings in the Inspector:
Figure 2-1 Quality settings
There are a number of options that can increase the image quality of your game with only a small trade-off in performance. For example, if the frame rate of your game is low, the GPU might be processing too much information when performing a complex graphical effect. You can perform less complex versions of graphical effects, such as shadows and lighting, for a relatively small impact on the graphical quality. Simpler effects can reduce the load on the GPU significantly, providing a higher frame rate.
The default settings for lighting can sometimes be too complex for a mobile device, so some games written for mobile platforms avoid complex techniques or use game-specific techniques. This might involve techniques such as pre-baking lighting into light maps or projecting textures instead of casting shadows.
In Project Settings > Quality there are a number of options that can have a large impact on the performance of your game:
- Pixel Light Count
- Pixel Light Count is the number of lights that can affect a given pixel. A high pixel light count requires a large number of calculations. Most games can use very few dynamic and real-time lights with minimal impact on image quality. Consider using techniques such as light maps and projected textures in your game, if lighting is causing performance problems.
- Texture Quality
- Texture Quality can load the GPU but it typically does not cause performance problems. Reducing texture quality can negatively impact the visual quality of your games, so only reduce the quality if you must. In the Ice Cave demo, Texture Quality is set to full resolution.
- If textures are causing performance problems, try using mipmapping. Mipmapping reduces compute and bandwidth requirements without impacting image quality.
- AntiAliasing is an edge-smoothing technique that blends the pixels around triangle edges. This provides a noticeable improvement to the visual quality of your game. There are several methods of anti-aliasing, but in this case the toggle is for Multi-Sampled Anti-Aliasing (MSAA). 4x MSAA is very low cost operation on Mali™ GPUs, so always use it if possible.
- Soft Particles
- Soft Particles requires rendering to a depth texture or rendering in deferred mode. This increases the load on the GPU, but can be worth it in terms of achieving realistic visuals on your particles. On mobile platforms, rendering to and reading from a depth texture uses up valuable bandwidth, and rendering using a deferred path means you have no access to MSAA. Consider whether soft particles are important enough to your game to use them.
- Anisotropic Textures
- Anisotropic Textures is a technique that removes distortion from textures drawn at high gradients. This improves the image quality but it is an expensive technique. Avoid using this technique unless the distortion is especially noticeable.
- Shadows can be computationally intensive if they are high quality. If shadows cause performance problems, try simple shadows or switch them off. If shadows are important in your game, consider using simple dynamic shadowing techniques such as projected textures.
- Realtime Reflection Probes
The Realtime Reflection Probes option can have a significant negative impact on the runtime performance.
When a reflection probe is rendered, every face of the cubemap is rendered separately by a camera at the origin of the probe. If inter-reflections are considered, this process takes place for every reflection bounce level. In the case of glossy reflections, the cubemap mipmaps are also used to apply a blurring process.
The following factors influence the rendering of the cubemap:
- Cubemap Resolution
- Higher resolution cubemaps increase rendering time. Use the lowest resolution cubemap possible for the quality you require.
- Culling Mask
- Use the culling mask when rendering the cubemap to avoid rendering any geometry not relevant in the reflections.
- Cubemap Updating
- the Refresh Mode option defines the update frequency for a cubemap:
- The Every Frame option renders the cubemap every frame. This is the most computationally expensive option, so avoid using it unless you require it.
- The On Awake option renders the cubemap at runtime one time, when the scene starts.
- The Via Scripting option provides you with control over when the cubemap is updated. With this option, you can limit the use of runtime resources by specifying the conditions when an update takes place.