If you’ve ever tried to upload a larger game to itch.io, you may have noticed that we have a default file size limit, and you need to get approval to upload larger files. Larger files bring about many costs - not only do they entail higher bandwidth and storage expenses, but they can also make your game less accessible to players due to extended download times.
Before we grant an increased upload size for your game, we ask that you share how you’ve used best practices to ensure that you’ve optimized the build and assets appropriately.
This guide includes some things to look out for. If you have any tips to add, please leave a reply below, and we’ll update the guide accordingly.
Identify and Review Largest Assets
Often, a handful of assets contribute disproportionately to the build size.
- Identify large assets: Some game engines include a profiler tool to identify the largest assets in your build. Otherwise, use your file manager and sort by size.
- Review usage: Check whether these large assets are vital for your game. If an asset is not essential or is used infrequently, consider removing it or replacing it with a smaller asset. For example, a model of a rock that appears in the background of a cutscene should not be larger than your main player’s model.
- Optimize assets: If the large assets are necessary, ensure they are optimized and compressed
- Be weary of Asset Store resources: Files obtained from Asset Stores may include substantially more details than you need. Review assets you’ve imported individually to ensure they meet your size requirements
Use Compressed Formats Always, Use “Lossy” Formats When Possible
Lossless file formats, while providing high-quality assets, can significantly increase your game’s build size. Lossy compression formats can substantially decrease the size while maintaining a high level of quality. Unless explicitly needed for your application, avoid using lossless formats.
- Images: Use JPEG, WebP or PNG for images instead of formats like BMP. Vector image formats, like SVG, typically compress well, but ensure that they do not have too many details for the resolution they are rendered at. Ensure that you don’t have raster data embedded into vector formats that is not compressed.
- Resolution: Avoid overly large images. Consider the resolution the image will be displayed at. For example, including an 8k backgrop image for a game that targets a 1080p resolution could be a waste of resources.
- Audio: Formats like MP3 or Ogg Vorbis can greatly reduce file sizes compared to WAV or FLAC.
- Video: Use codecs like H.264 or H.265 for video files. Ensure you’ve selected an appropriate bit rate or encoding quality to balance both size and visual quality.
Always balance quality and size. Over-compression can result in a poor experience due to noticeably lower quality assets.
3D projects
Optimizing Textures
- Compression: Use compressed texture formats. For instance, DXT (DirectX Texture Compression) formats can significantly reduce file size. Keep in mind that the appropriate compression format depends on the target platform of the game.
- Resolution: Scale down the resolution of textures, especially for mobile or web games. A high-resolution texture on a small screen doesn’t significantly improve visual quality.
- Reuse and Recycle: Try to use texture atlases and UV mapping to make the most out of a single texture. Instead of using unique textures for each model, see if you can reuse existing textures creatively.
Reducing 3D Model Sizes
3D models can be large, especially when they are highly detailed.
- Polygon Reduction: Use tools to reduce the polygon count of your models. Many 3D modeling tools like Blender or 3ds Max have built-in decimation tools. Consider creating LODs for highly detailed models, especially if they are rendered only in the distance.
Other Optimizations
- Dead Code and Unused Assets: Over time, your game might accumulate code and assets that are no longer in use. Regularly review and clean up your project to remove these.
- Duplicate Assets: Ensure code and data that use the same image or model reference a single copy of it, instead of a duplicate for each object or class you have defined.
- Procedural Generation: If it fits your game, consider using procedural generation for some assets. This can massively reduce the size of your game, but it also has some unique challenges. As a simple example, instead of having copies of the same image in different colors, perform the color manipulation in code with a shader. More advanced examples could include generating entire levels, models, images, and audio files at runtime within the game’s code