In this post I’ll detail the work I’ve done on the game so far.
When I started building this game about 8 months ago I had a couple of years of programming experience, but no extensive knowledge of physics or specific game-related technologies. Thus so far the development process has mostly consisted of learning a whole lot by study, and trial and error.
This is where I am right now:
It features separate rigid bodies for each limb, linked with motorised joints. I’m planning to add knee and elbow joints soon. This will allow greater fidelity in your movement, giving you more fine-tuned control over your flight and enabling aerobatics. Ironically, in real-world flight you get the best performance by keeping your limbs straight and stiff as a board. But not having the option of twisting and turning them currently makes the game feel a little artificial. All the body parts are affected by custom drag algorithms. I needed to do this because Unity’s physics engine does not have any concept of airflow in it, which is quite crucial for any flight simulation.
The wings are still just single sections and completely rigid. In an actual wingsuit the wings consist of a number of flexible ram-air cells (like modern parachutes), and their performance changes continuously as they are twisted and skewed during flight. I’d like to model this eventually, but it is not currently a priority. The wings are linked to the body parts with various anchor points, and apply their generated force to all connected rigid bodies. I’ve built a tool with which I can quickly define a wing’s aerodynamic characteristics, regardless of physical correctness. This allows for very quick prototyping, but leaves the level of realism entirely in the designer’s hands. That will most likely change as the simulations becomes more detailed. 😉
The joints are driven by a controller script that translates pitch, roll and yaw input from a gamepad to joint rotations that are appropriate for any given context. This means that your input is interpreted differently depending on the way you are oriented in relation to the airflow. Think about it like this: flying on your back requires very different movements compared to flying on your belly. But you still want to be able to use the gamepad in a consistent manner: Pressing forward on the stick means you want to pitch your nose down, no matter what your current situation is.
I also have a module that handles artificial stability. We humans are just not made for flight, no matter how fancy we dress ourselves up. Planes like the Cessna 172 are built to be very stable, so if you release the controls it will automatically slip into a stable trajectory. Wingsuits have no such properties, they’re more like a Eurofighter in terms of handling. You have to constantly make very tiny adjustments to your posture to keep flying the same heading; If you don’t, you tumble down uncontrollably! Those tiny corrections are practically impossible to perform using a gamepad or joystick, so you need a fly-by-wire system to do it automatically.
So that’s what I’ve got after eight months of tinkering. I’ve kept a backlog of code and videos of earlier version, and I’m posting the latter here for all to see. I shrug heavily while watching some of them; they seem so utterly inept. Nevertheless, they each represent crucial steps in the development process, and you can clearly see the progression made. I plan to keep this trend going. It serves as a personal reminder that you cannot do big things in single steps. Instead you make small steps and just keep at it, and eventually you get where you want to be. Now, without further ado:
This is the result of several weeks of learning to do some vector manipulation to get my first lift equation to work. It’s basically just a single, solid wing. You literally pushed on the sides of it to make it go anywhere, kind of like a surfboard. At this point I got in contact with Jarno Cordia, an experienced wingsuit flyer and 3D animator. He kindly offered to advise me on the mechanics of flying with a suit, and to join the team as a modeller/animator.
For this prototype I separated the suit into three wings which could be rotated independently. The body was still modelled as a single rigid body.
After some tweaking we felt it was time to show the game to some people and get some responses. I sent some footage to Jarno, and he produced this very slick trailer. He didn’t just stop at showing the current state of the game (which would have lessened the impact significantly), but instead made it clear what we want the game to feel like when it is finished.
After that the goal was to introduce multiple deformable body parts, which is ultimately what separates a wingsuit from a normal aircraft. The first prototype was of course completely uncontrollable and felt very artificial, but it was a start.
After about a week of tweaking and building more intricate control scripts it became somewhat steerable, though it required rsi-inducing practice. It wasn’t just the control mechanisms that were lacking, the simple aerodynamics I had used so far revealed far too many irregularities to stay practical.
This last prototype eventually lead to the one at the top of this post, which is quite playable.
Right now I’m working on the following things:
- A new and robust model for drag calculation.
- Splitting the limbs up into upper and lower sections, also linked by controllable joints.
- Linking up the physics system to an animation system. I’m planning for a lot of the animation to come straight from the physics.
- A basic fluid solver that is scalable by a level-of-detail system. High detail flow around the player, low detail flow in remote areas.
- Linking the physics system up to a prototype version of Singularity for synthesising the airflow sounds in real-time.
- Getting to a level of playability suitable for alpha-testing.
So there, eight months well spent? I certainly hope so. If you have any cool ideas for game play or features: Let me know! I’m always on the lookout for interesting input.
Thanks for reading, and stay tuned for more info!