Plane Panic! is a cooperative game where up to 9 players join forces to pilot a plane by moving across its wing. Players can easily connect using their mobile devices and set off to see how far they can go, working together to survive! Coordinate to guide the plane through speed rings, pull off sharp turns, and extinguish raging fires as a team. How far can you and your team of flightless birds keep the plane soaring?
To play Plane Panic!, start the game on a shared screen and press "Start." In the lobby, scan the QR code in the top left corner, enter your player name, and input the unique lobby code displayed at the centre of the screen. Once all players are in the lobby, press "Start" to begin!
Hold your phone in portrait mode with the screen facing upwards to control your character using the gyroscope. To steer the plane, players must move to specific sides: if more players gather on the right side, the plane will turn right, and if more players move forward or backward, the plane will climb or descend.
As you control the plane, fuel gradually depletes. Replenish fuel by guiding the plane through yellow and green rings, which provide both fuel and a speed boost. Green rings are smaller and harder to navigate through, but reward you with more fuel and a greater speed boost.
Over time, fires will appear on the plane. Extinguish them by coordinating multiple players to stand over each fire. The required number of players, indicated above each fire, must be present to successfully put it out and prevent fuel loss!
At the start of the project I focused on the foundational game architecture by creating a versatile event based system. I then worked on particle effects such as the particles for gaining and losing fuel. Apart from the architecture and particle effects, most of my time was spent on the procedural volumetric clouds. The first step was generating procedural tiling Voronoi textures using compute shaders. The second step was creating a raymarching shader which uses signed distance functions in order to render complex shapes. The third and last step was to combine the previous steps with a shader which uses Beer's law in order to simulate the transport of light within the clouds. This project taught me a lot about working in a larger team with a tight deadline. It also improved my GPU and shader programming skills in Unity.
At the start of Plane Panic, I laid the foundation of the networking code and phone sensor data reading, using Unity Relay to connect different devices. After the first demo, my responsibility shifted to procedural terrain generation. I explored a binary tree implementation for a LOD system but, due to time constraints, later settled for a geometry clip map updated entirely on the GPU using compute shaders. Following this, I also implemented a procedural grass shader, using compute shaders and GPU instancing, which unfortunately was cut due to not fitting our final environment aesthetics. This project broadened my skill set regarding shader programming and Unity's mesh system.
In the Plane Panic project, I led the GUI design and development, creating reusable UI prefabs for the start screen, lobby, main HUD, and results screens, inspired by Mario Kart and Fall Guys. I implemented Lengyel's (2000) shell texturing technique, adapted by Acerola (2023), which I migrated to the Universal Render Pipeline. I combined the technique with the well-known Cartoon Shading and Silhouette Edge Detection from Lake et al. (2000), giving the characters a stylized, flexible look that supports server-side colour changes and real-time lighting. Additionally, I used HLSL to craft fire effects on wings and burn marks, drawing from Simon Trümpler's talk on RiME VFX techniques. This work deepened my expertise in shader programming and game-interface design and development.
In the early stages of Plane Panic's development, I focused on Game Design and Gameplay programming, creating systems for collaborative plane control among multiple players. As the project progressed, my role broadened to include designing and 3D modelling the player characters, hangar environment, and plane, along with implementing a procedural animation system for character movement. I also developed shaders for collectible rings, terrain, and screen-space speed-line effects to enhance visual feedback, contributed to terrain generation through the heightmap function, and assisted with the fuel particle effects.
My focus at the start of the project was on networking and interaction programming, creating a basic phone UI and establishing phone-to-Unity connections through Unity Relay. Eventually this evolved into making use of the phone gyroscope to control the player characters, properly spawning in the players, making a new phone UI, handling player name changing, assigning player colours with a perceptual colour model based on Gramazio et al (2017), adding WakeLock as a jslib, a skybox shader, a toon-style water shader featuring procedural Voronoi noise, implementing the leaderboard, creating the website, as well as assisting with many other areas of the project.