Bringing Never Alone to SHIELD
Never Alone is a celebrated atmospheric puzzle platformer developed in collaboration with the Iñupiat, an Alaska Native people. The game’s fiction is drawn from a traditional Iñupiat story called Kunuuksayuuka that has been shared across many generations. Never Alone earned over 75 "Best of 2014" awards and was the winner of "Best Debut Game" at the 2015 BAFTA Games Awards as well as "Game of the Year" and "Most Significant Impact" at the 2015 Games for Change Awards. What made Never Alone really special was that we created a unique collaborative partnership between experienced game developers and nearly 40 Alaska Native elders, storytellers and community members to ensure the project was great.
Late last year, we were thrilled to meet with the team at NVIDIA to discuss bringing the game to Android. With the folks at NVIDIA we found a great partner who provided our team with amazing support and guidance throughout our entire development and launch process.
What went right?
Our game was originally developed in Unity 4.3 and we found it incredibly easy to get a our initial builds up and running on the Shield. In fact, we had a fully playable level up and running with all major features in less than 2 weeks!
Developing for Android can be complicated considering all the different manufacturers and flavors or devices available. We felt fortunate to be able to focus on NVIDIA SHIELD devices. This enabled us to put all our attention on ensuring that the experience on SHIELD devices was awesome. Thorough testing of the game across all Shield devices was very easy and the end we believe we achieved a very high quality experience that rivals the experience on PS4, Xbox One and PC.
Right out of the box the performance of the game was around 20 - 30 fps, so our optimization effort was very straightforward. We focused on optimization of particles and other visual effects, adjusting render targets and optimizing some of our math library. In addition we migrated the game from being GPU bound to be CPU bound where the Tegra chips excels.
NVIDIA and Unity Support
We received amazing support from both NVIDIA and Unity which was critical in helping us solve our most challenging bugs. Typically, we would have had to work around these issues at the expense of game quality, but with the NVIDIA team providing such response and support we were able to overcome these challenges with ease.
Linear to Gamma Color SpaceUnity 4.3 only allowed us to render graphics in the gamma color space for the Android platform but the Tegra chips support linear color space. Luckily the NVIDIA team provided in-depth support on this issue and a modified playback engine for Android which supported linear space in the render textures. This saved us several days of cumbersome changes to our shaders.
Video PlaybackEarly in development we had several issues with artifacts in playback of our video content. With the robust development community over at the Unity Asset Store we were able to identify a video playback plugin, Easy Movie Texture, which helped us overcome the anomalies.
MemoryThe game was initially developed for Xbox One and PS4, which afforded the team very large amounts of memory. For this reason, the game was not optimized well for memory consumption. A considerable amount of our development time was spent compressing different kinds of content including audio, model & animation data, video sizes and compressed textures. We were able to complete this optimization with no significant impact in the game quality thanks in part to NVIDIA's great compression algorithms.
What went wrong?
Migration to Unity 5
With Unity 4.3 we had some memory limitations with our development environments that resulted in frequent tool crashes. Our plan was to migrate to Unity 5.0 which would have mitigated these issues, but there were just too many Unity 4 systems that the game relied on to let us efficiently handle both the development and the migration to Unity 5. We ended up having to perform additional optimizations to reduce the instance of tool crashes which took up some time, but was far easier than migrating to Unity 5.