I’m Chris Shankland, CTO at Odyssey Interactive and previously Technical Lead on Omega Strikers. Omega Strikers is a lightning-fast 3v3 foot-brawler where smashing opponents off the arena to clear a path to the goal is just round one. We released Omega Strikers across all major platforms: PC, PlayStation, Xbox, Nintendo Switch, iOS, and Android. I will describe some of the techniques we use to deliver a high quality competitive and visual experience on mobile. Shipping Omega Strikers with the speed and quality we did is a team-wide effort. I am merely your guide through challenges and solutions we implemented that we hope offer insight and value to similar games.
Omega Strikers, at its core, is a competitive game, so we prioritize competitive integrity above all else. In practice, this means a strong emphasis on performance, gameplay clarity, and controls. From this baseline, we push on the quality of our visuals ensuring our amazing art can shine through. To achieve our ambitions for visuals and performance, we have to manage a few familiar constraints: memory, CPU, and GPU. I’ll walk through specific examples from each of these areas to illustrate the processes we use to identify and ultimately solve challenges that represent release blockers.
Omega Strikers is a character-based game with a roster of fifteen characters at launch that continues to grow through regular content updates. Going back to early development, there were fewer characters, fewer customizations, and placeholder graphics. At that time, it was very convenient to maintain a global set of hard references to characters and all their related content. Internal testing on min-spec devices encountered no problems with this setup for the majority of development. As we got closer to release, visual fidelity and quantity increased dramatically. After a while of development with these higher-quality assets, memory issues stacked up, and the game stopped booting on min-spec devices.
Package visualization of an early Omega Strikers build
Two general strategies were possible at this point: Reduce asset size or overhaul asset management entirely from an always-loaded scheme to a load-on-demand scheme. The on-demand scheme fits the scalability expectations of a live-service model, so we went in that direction. The refactor consisted of converting all hard references to larger assets like textures or characters to soft references. We keep the full set of data assets that represent the catalog of the game in memory so we can resolve assets quickly and synchronously. This method limited the amount of refactoring needed to a manageable amount and we were able to complete the entire change in just about a week. With this solution in place, Omega Strikers has successfully released four major content updates including new maps and new characters without having to revisit the memory problem.
CPU performance is an area that we stay on top of to ensure release deadlines go smoothly. This was true throughout development and we successfully avoided major optimization pushes when it came time to release. The strategy here is to make sure we play regularly on min-spec devices and to prioritize performance regressions. When a problem is encountered, Unreal Insights is the go-to diagnostic tool.
Graphics performance across a range of mobile devices is a challenge. Players expect premium visuals on premium devices and expect high performance on all devices. Omega Strikers uses standard level of detail techniques for textures and meshes in addition to custom environment quality settings to create a wide range of graphics scaling. The settings are exposed and manipulated through CVars, which is how we create device profiles and allow users to customize their own settings. We again rely on Unreal Insights to provide the majority of the profiling data that is used to guide optimization. RenderDoc is another tool we use, along with its plugin, to dig deeper into specific device performance or when fine-grained timings are required.
PSO caching quickly emerged as a requirement on mobile devices to avoid hitching as shaders were used for the first time. We developed an automated process that creates a version of the game that automatically renders all possible visuals at all quality settings which is deployed to a physical device. At the end of the automated run, the application publishes the complete PSO cache into our build pipeline to be included in future builds.
Releasing and constantly updating Omega Strikers on mobile devices with a small team is only possible by building for mobile from day one and leveraging the tooling provided by Unreal Engine to optimize our development efforts. Our toolbox contains strategies to remove work on less capable devices, stream assets or data to fit into smaller memory budgets, or use mobile-specific solutions when absolutely necessary - UI or controls are good examples. Routinely validating the game on min-spec devices ensures we know about problems when they are created instead of being surprised by them at a milestone. Planning and testing early in development ensured that we had appropriate strategies and budgets in place before scaling up production. All of these solutions together, along with our amazing team, allows Omega Strikers to thrive on the widest possible range of platforms and to continue operating into the future as a live service about as smoothly as we could have hoped.
Hopefully what we learned is helpful to the games to come, and I can’t wait to play them!
Get Unreal Engine today!
Get the world’s most open and advanced creation tool.
With every feature and full source code access included, Unreal Engine comes fully loaded out of the box.