We're embarking on a mission to update some of the core codebase that makes up our app; something we're calling Project Metal. Infinite Flight is standing the test of time, and we will continue to build on it and improve. To do this, sometimes it's necessary to say 'out with the old'. This is what we're doing now, and here's why.
Those of you that haven't devoured our various developer interviews might not know that Infinite Flight was originally developed for Windows Phone in 2011. There are a few reasons why we decided to target Windows Phone, but mainly it was because we were more familiar with the Microsoft development environment back in those days. This made it easier to ship the first version quickly.
On Windows Phone, we used XNA as our graphics API, since this was the only choice. XNA was a framework that allowed game developers to target Windows PC, Windows Phone, and Xbox with minimum code changes. Yes, we had a development version of IF running on an Xbox 360!
Unfortunately, XNA was deprecated and not long after, so was Windows Phone.
Thankfully, we started working on an iOS version sometime before that, but in order to not have to recode everything, we used MonoGame which is an XNA implementation for many platforms. On iOS (and Android), MonoGame uses OpenGL ES as the low-level graphics API.
Here's Where We Are Now
Unfortunately (again), OpenGL ES has been deprecated on iOS devices and Apple recommends using Metal; a more modern low-level graphics API. OpenGL ES still works but it is stuck at an old version with limited features and there is no telling if it will continue working indefinitely (deprecating things is Apple's favorite).
There are many features we want to do in Infinite Flight that are very complex to implement with the limited feature set we are stuck with.
The only way for us to move forward is to overhaul our rendering backend to be able to take advantage of the newer graphics APIs (Metal on iOS and Vulkan on Android).
This is a pretty complex task that requires a lot of engineering time and won't result in any immediate visual benefit to the end-user. If all goes well, you won't notice anything! The main benefit will be performance; Metal and Vulkan are much more "low-level" than OpenGL ES, meaning they have less processing overhead and are more predictable. This should result in us seeing better frame rates and fewer "stutters" overall. Another benefit will be that it will unlock many possibilities for our developers to implement some cool new features.
Some features we'd like to implement but have been either impossible or too performance-inhibitive are things like:
- Dynamic lighting: the ability to have aircraft lights (airport lights, and more) illuminate the environment dynamically
- Improved aircraft shading that takes into account light coming from the environment around it
- Realtime shadows
- Volumetric effects like dense 3d clouds and better fog
- Texture streaming improvements to allow more visible aircraft in multiplayer
Of course, an update like Project Metal isn't trivial. A lot of work is going on behind the scenes to make this happen. Our developers are hard at work laying the groundwork for the move to these updated graphics APIs. It doesn't mean other work is being abandoned. Work on the B777-200 is moving along at a great pace, as is work on implementing clouds.
Ultimately these changes are great news for Infinite Flight users, even if they aren't immediately visible. As always, we will keep you updated as we go along.
Infinite Flight, Metal, Project Metal, Vulkan, 2020