Last week at the Windows Phone Mango event, Microsoft showed off a fantastic virtual check-in demo for British Airways. The demo couples a traditional UI for ticket confirmation / flight details with an interactive 3D world for seat selection. The 3D world is powered by the SunBurn Game Engine, developed by Synapse Gaming and John Kabus—who recently spilled all the details about developing his part of the 3D demo from scratch in only two days.
Creating the Demo
Knowing their SunBurn Game Engine already included code for many of the capabilities needed for the British Airways app, Microsoft reached out Synapse Gaming with the core goals they needed help to accomplish:
>Run the demo on Mango with full integration of the Silverlight UI
>Provide an interactive top-down 3D view of the plane for initial seat selection
>Provide a 1st person flythrough to the selected seat
>Allow selecting a different seat while in the 1st person perspective
>Deliver this in 2 days to meet the deadline for the Mango event.
The Silverlight integration was surprisingly easy. While conceptually Silverlight’s 3D rendering and game management is very different than XNA, its design is exactly like the standard xaml page layout.
After checking out a lot of examples that showed how to modify a game to match the new Silverlight design, the team opted to connect Silverlight to the existing XNA Game class, allowing both the new and old designs to work together.
The starting point was the default Silverlight Windows Phone 3D Graphics Application project template, added the default SunBurn Starter Kit Game.cs to the project, and wired up Silverlight to XNA. (For the actual code used, visit the Synapse Gaming blog) So why use this method? In addition to integrating Silverlight and XNA it has the added benefit of:
Simpler integration – allows you to maintain the game’s existing XNA design
Compatibility – allows you to run the same game on Windows, Xbox, and WP7 (pre-Mango)
This is helpful because you can run full Silverlight integration on the Mango developer tools – yet still test 3D performance on existing non-Mango phone hardware. It also allowed the Synapse Gaming team to run the SunBurn editor on Windows for editing – and would have made an Xbox build easy. And all without any duplicate code.
The performance of the final demo was very smooth, however there were a few performance issues along the way – oddly all of them related to the number of vertices in the cabin model.
Unlike a more traditional gpu, phone hardware operates on very, very ,very little power, and unfortunately has similarly low performance. This makes minor issues like overdraw and vertex count much more noticeable than on Windows / Xbox.
It was determined that a cabin model around 30K-40K polygons (~32K vertices) would keep the scene running smooth even at full resolution and with some overdraw (from the overlapping seats).
However the model still needed a second uniquely mapped uv channel for light mapping, and this would split vertices at the edge of light map uv islands, increasing the vertex count (and reducing performance).
To get around these issues, the team manually unwrapped the second channel and wasable add light mapping without affecting the vertex count and performance very much.
The possibilities with XNA, Silverlight, and Microsoft’s mobile hardware are endless. To learn more about SunBurn, and how the team created this app’s interactive flythroughs, seat selection and highlighting, and final polish, visit the Synapse Gaming blog.