Author Archives: mzandvliet

Level Design for Wingsuit BASE

After a bunch of play-testing I’ve gathered some notes on what works in the current level and what doesn’t. Eventually these notes should turn into a sophisticated set of guidelines for Volo levels, but right now they are just little scribbles.

Here’s a shot of the island geometry used in the latest playtests:

Perspective view of the island. All atmospheric effects are turned off for clarity.

Graphing flight paths over a top-down map of the island and rating them based on enjoyment helps. Nothing fancy, I just take a rough note of the path taken and whether it was a fun flight or not. This is all manually done in a photoshop file for now, but it’s already clear that an automated tool would be of great use here.

'Fun' map. Green lines represent interesting flight paths, red ones represent boring ones.

Some early conclusions:

  • Long slopes that roughly match your glide ratio provide an engaging flight.
  • Ridged terrain that presents you with all manner of creases and canyons to traverse are by far the most engaging.
  • Short sections of really steep terrain, really flat terrain, or valleys can provide interesting contrast. When these sections get too long they quickly become boring. The give you a relatively calm flight, and because of the limitations of the terrain system they contain very little interesting detail to look at or fly through.
  • There’s a huge steep cliff face and a prominent valley right in the middle of the island. While the valley is interesting enough in a visual sense, the cliff isn’t, and neither are particularly fun to actually fly near.
  • There are additional cliffs that lack visual appeal, and are cast in way too much shadow to boot.
  • Player’s usually to fly in parts of the island that are well-lit, avoiding the side of the island cast in shadow.
  • The ocean sucks, but I knew this already. It’s not interactive in the way you would expect, and it reveals itself to be quite ugly when you get close.

Most of this common sense, but if I can formulate these rules clearly I might be able to bring them straight into World Machine. 🙂

 

P.S. The earlier title, “Level Design for Proximity Flight”, might’ve made it seem like this post discussed level design for Skydive: Proximity Flight. Sorry about that.

Progress, and a Thank You

(Shame on me, and egg on my face; this blog needs a new post so very badly.)

First, it’s video time!

This is a new level I created for the Think Design Play conference, where I was showcasing my game last month. It’s an 8km square island with a large peak and some valleys. I made sure there are plenty of interesting creases and paths to explore no matter where you look. It uses some assets from the Unity Asset Store: The Nature Pack and Cloud System to be precise, both of which I haven’t explored to their full extent yet.

A user on the Unity forums asked me for some details on how I achieved this look, and if you’re interested you can find my answer here: Unity Forums: What do you guys use for realistic terrains?

Anyway, the game was very well received and I got lots of great feedback*. A crazy amount of kind comments on the video, too! Thanks everyone.

I’ve been looking into the physics and aerodynamics again. The main problem I have with it is that the current components make it almost impossible to make the wingsuit aerodynamically stable to a satisfying degree. They lack some properties that make it hard to achieve this effect. When you play for the first time this is not too much of an issue, but after a while you can notice that the amount of oscillation and illogical stalls really get in the way. I’ll stress that I don’t want to get rid of the struggle for control, as that’s one of the most interesting things about the game, but right now some of the difficulty in control is unfair and unfun.

The last couple of days I’ve been experimenting with techniques that analyze a mesh for its aerodynamic properties. For example, using a matrix of raycasts to determine profile drag in high resolution:

Using raycasts to sample a mesh for its profile area in the relative wind.

This goes some way towards the techniques X-Plane uses for its simulation. It uses an offline phase in which it analyzes aircraft geometry in painstaking detail, storing coefficients of motion that can be looked-up while the simulation is running.

I can tell that this is not the way to go for Volo. For one, a typical aircraft has a mostly static shape, whereas a wingsuit flyer’s shape continuously changes in profound ways. The aerodynamic properties of someone curled up in a ball are completely different from someone flying in normal position. Doing this kind of analysis in real-time, say on a deforming cloth mesh and animated character would be very costly in terms of performance.

My current flight model might not be the most physically accurate, but one of its major qualities in terms of play is that every microscopic limb movement has a definitely noticeable effect on play. This nuance is exactly what I want to preserve, since it is what makes playing the game so much fun. So instead I will focus on patching the largest holes in the current system.

The other issue is that my brain is too small for the fancy tricks X-Plane does, or at least lacks the necessary training in aviation to pull them off within the foreseeable future . 🙂

 

Other than Volo development I’ve been freelancing a lot, and its finally started to resemble an actual job. I also have some things underway for the Unity Asset Store! Landmass is almost ready for release, for example.

 

Thanks for sticking around, everyone! Your kind words have motivated me to get back at it, I owe you one.

 

* I have this video of a kid playing and having the most exuberant reaction when he crashed into the completely faked ocean, he felt so cheated there wasn’t any actual water! He liked the game a lot though, came back a couple of times. I must remember to upload it.

Landscaping: Importing & Streaming Tiled Terrains

Completely out of the blue, here’s something I’ve been working on for the past month or so that might interest you:

Landmass Screenshot

A test landscape for the system

The above landscape might seem like a single, solid piece of geometry, but it isn’t. Instead it consists of many smaller peaces that are seamlessly stitched together as you move through the world.

How does it work? The import tools takes chunks of heightmaps, splatmaps and any other relevant maps, and loads them into Unity. The streaming system dynamically loads and unloads these chunks around the player.

The view from up really high

What’s so cool about this? It allows games that use it to have much larger areas of play! The system only loads the parts of the level it needs, while the rest just sits on your hard disk. Now, it won’t quite give you the whole surface of the earth to explore, but you can certainly spend ages walking towards a far stretching horizon of a level.

The test level I’m working with right now uses heightmaps with a 1 pixel-per-meter resolution to form an island of about 16 square kilometers. The individual chunks have either 1 or 2 splatmaps assigned to them, with 4 channels each. Compressed on disk this results in a package of around 200MB, so a full game could have a lot more of it. Plus, a game like Volo could easily manage with a 2 pixel-per-meter resolution, doubling the potential size. I have yet to explore the idea of having different map resolution for different tiles, but such a thing would make sense for chunks of terrain that you don’t expect the player to get close to.

Both the importing and streaming system are built to be highly configurable and extensible. More on this later, but right now I’m interested to hear what other developer would want from this tool, so I can make sure everybody’s happy. If you have any suggestions: Let me know!

An early snapshot of the editor, to be overhauled later.

Note: I was originally developing these systems for Creath Carter, a fellow indie developer. He has kindly let me develop this into a tool I can use for Volo and sell on the Unity Asset Store as middleware. The terrain meshes in the above screenshot were generated by him using World Machine. The textures and engineer character are some default Unity assets.

Volo Modding

Wooh! Exciting techno-mumbo-jumbo coming up! 🙂

Unity’s game object system has a base-class called MonoBehaviour, and every script you want to use in your game scene has to derive from it. Thus, you use it for everything, it is your hook into everything that is Unity.

Mod makers for a Unity game would need to write their own MonoBehaviours and plug them into an existing game, but earlier versions of Unity did not allow the use of MonoBehaviours loaded from external libraries (those .dll things). This meant that for modding you either had to provide a system to link MonoBehaviour stubs to externally loaded behaviours, or just let go of your big ideas altogether. With Unity 3 though, it now appears that you can spawn MonoBehaviours loaded from external libraries directly into a scene! Score!

Admittedly, I only did an absolute minimum of testing. I created a subclass of MonoBehaviour like so:

Then I built this into a library, imported it in Unity, and lo’ and behold: The editor even allows you to drag and drop classes from the library straight into the Inspector! Dragging it onto a game object and running the scene results in a printed message, as expected.
I believe this means several things:
  • I can let the Volo application load user-made scripts at run-time.
  • I can let users create their mods using the Unity editor.

I can even do this without having to give modders all of the source code. Instead, I just compile all Volo code into a library of its own, so people can link to it from their Visual Studio or MonoDevelop projects.

I’m really curious to see where this goes, and whether other Unity developers will do something  like this. As far as I know nobody is doing it yet. 🙂

Drawing Plans

Long time no blog, high time for an update!

First off, here’s the trailer I made a while back, it conveys a lot about the current state of the game: Volo Trailer. (You’ll have to forgive me for not embedding the video, wordpress won’t let me for some reason.)

Yeah, that's totally Bispen!

The first proper Volo Airsport trailer! Click the image to see it.

I did an experiment with Unity’s cloth physics, of which you can get some impressions here: Cloth Physics.

Look! Wouldn't that be just the best thing since... since blocky wings?

Using cloth this way would likely result in a unified approach for modeling all ram-air surfaces in the game, in a way that its easy enough for players to design & tweak the shape of their own canopies and suits using an in-game editor. How cool would it be to try and make that Vampire3 fly faster? Mind-blowingly cool, that’s how. Unfortunately it turns out Unity won’t let you read vertices back from the deformed wing mesh, so there’s no way of analyzing a cloth wing for its aerodynamic properties. Not yet anyway, I have good hopes that this feature will become accessible at some point in the future. In the mean time I’ll have to think of something else, so back to the drawing board!

As for the grand scale of things, I’m looking into setting up my own business so I can continue work on the game. Next to working on the game I will spend considerable time doing freelance game programming to build up some funds. I will also be setting up a little online store where you can buy early access to Volo, and some Unity scripts that people have expressed interest in such as scalable input and GUI systems.

That’s it for now. 🙂