So, as I mentioned on Sunday, this August I did something I’ve never done before: I made a game. For those who don’t know who I am: I’m a professional Machinima film producer. I make the kind of animated movies you’re probably most familiar with from AAA in-game cinematics.
I’ve been involved in Machinima, and through it the games world, for nearly 15 years. We worked on the cutscenes for an AAA title with Electronic Arts and Ritual Entertainment back in 2001. We’ve had source code access to enough cutting-edge 3D engines that I’ve actually forgotten how many it is in total.
But I’ve never made a game. Movies are my passion, and frankly, I’ve been close enough to AAA game development to appreciate just how much insanely hard work it is.
So why the hell did I break that streak for the VRJam? Read on…
Game Development Has Been Revolutionised
I had no idea how advanced game development tools had gotten.
Old-school Web developers will remember the time before there were any Web-specific languages, and you had to code everything in Perl or C. When we founded Machinima.com back in 2000, that’s how we did it - and it was a nightmare. The moment when tools like PHP, and then later Ruby on Rails and Node.js, arrived was a revelation.
There’s a reason the famous Ruby on Rails “blog in 10 minutes” video caused Web developers to gasp. All of a sudden, the languages and tools you were using understood what you wanted to do.
Rather than having to write 40 lines of code to pull info from a database, the tools assumed you’d want to do that. It felt like a Star Trek moment: “Computer, make me a content management system. Name, content and date fields. Make it so.”
Well, game development tools have gotten to that point.
Six HOURS For A Basic First-Person Shooter?
This is actually the reason I decided to enter the VRJam at all: I’d been doing development with the Oculus Rift as part of a different project, and needed a 3D engine to work with.
I chose Unity 3D because it supported the Oculus Rift, and because I’d had a brush with Unreal’s import tools and didn’t want that experience a second time. I wasn’t expecting much out of it. Based on all my previous experiences with 3D engines, I was expecting to spend about 10 hours getting my viewpoint moving on a flat plane with the Rift, and to then evaluate if there was any chance of actually making something useful.
Six hours of development time later, I had a working first-person shooter.
It was controlled using the Razer Hydra. It had an animated opponent, simple AI, a map, multiple projectiles, movement, and game mechanics.
I’d managed to test everything I had loosely scheduled for the first month or so in an evening.
That’s what made me enter the VRJam.
Previously, I would have assumed that a three-week development cycle was only really open to people who could work on it as a team, full-time: hardcore coders and dedicated art guys working their asses off for those three weeks to make a demo.
Turns out, one numpty with a half-forgotten knowledge of C and about a day a week spare can now not only enter a contest like that, but actually finish a reasonably entertaining game.
From the point of someone who has been watching this stuff for the past two decades, that’s a revolution on the level of digital video or the word processor.
Game development has been democratised.
So What Makes This So Possible?
I can’t speak for other modern engines right now, but the startling things about Unity, for me, can be broken down into three parts: streamlining, user-generated content and community.
Designed For The Job
The basic tools within Unity are extremely well designed with small indie game development in mind as their primary purpose.
From previous experience, that’s not something that most game engines have focussed on - hardly surprising, because they’re designed for multi-million-dollar projects, not tiny, underfunded indies. They focus on the complex toolchains that big games need.
Unity, by contrast, has clearly been designed to Get Shit Done Fast.
Creating the bones of a first- or third-person game takes minutes: there are built-in, intuitive tools to create lights and a level.
The UI just works if you’re at all familiar with 3D design. And built-in prefab libraries mean that enabling first-person controls, for example, is as simple as dragging a box marked “first-person controller” into the game world.
The code design is tremendously intelligent. Programming is graphically linked and referenced within the engine.
Once you’ve written a simple script to fire a fireball, for example (about 6 lines of code - the engine natively understands physics, so you can just say “give this a force of 10 in the X direction when the fire button is pressed”), you can adjust all the variables from within the GUI, without having to touch the script. You can cause a script to reference other objects by creating a variable in the script, then dragging the object into the box which appears in the GUI.
And I found that - much like my first experience of Ruby on Rails - everything I needed to do for my application had already been considered in the engine.
Need to check what 3D object is under the mouse click? Two lines of code.
Need to create an expanding sphere which does damage to any object inside it then vanishes? About 5 lines of code.
Want to fire a projectile which bounces off static objects and knocks moving ones back depending on their relative weight? Three lines of code.
The Asset Store
Unity’s clearly learned from the modding community around games like Quake, Skyrim and Neverwinter Nights. They’ve managed to set their asset management up such that add-ons can just be dragged and dropped into a project and they’ll work.
(Again, this is very reminiscent of Ruby on Rails and its “gem” architecture.)
That’s how the Oculus Rift support works, for example. No recompiling, no fiddling around with .cnf or .ini files - just drag the package file into your project, grab the “OVRPlayerController” prefab and drop it into your scene.
Bingo - you’ve now got an Oculus Rift game.
Added to that, Unity has a marketplace where developers can sell their tools. It’s astonishingly active: if you want to write a Minecraft-a-like, for example, you can just search for “voxel” and 8 different solutions for generating voxel terrain in Unity pop up. Want an orc model? I stopped counting around 15 different orc options.
Hundreds of developers have figured out that indie game development is a thing, and that they can make money off that thing.
And Unity provides a way for developers to sell tools for game development without having to build an entire damn engine.
That means that hundreds of tools, add-on libraries and ready-made art assets are just sitting there, waiting to be used.
Some of these tools are practically full-fledged engines on their own - like the UniRPG framework, which transforms Unity into a startlingly simple-to-use RPG creator.
Others are extremely advanced in other ways - there are no less than two voxel cone global illumination projects coming in the next month or so, for example.
Practically speaking, the Asset Store means that provided you don’t mind using pre-canned art, you can make $100 do the work of $10,000 - or a few hundred hours of artist time - in your development process. (I’m not kidding - some of the $100 art packs would easily take 300 hours of artist time to assemble.)
Many of the assets are even free.
Rather than having to painstakingly assemble a whole bunch of terrain textures, for example, I could just search for “terrain texture”. There was a free pack of a bunch of good ones - three clicks and I had them in my project.
Finally, the fact that Unity’s so good, and that a whole lot of people are getting into game design right now, means that there’s a massive, massive community out there. And that hugely cuts down on development time.
It was my experience that it’s very hard to hit the point where you can’t find an answer to a problem whils using Unity.
In previous 3D engines, I’ve spent a lot of time re-reading and re-re-reading minimal, out of date documentation. I’ve spent time experimenting and trying to understand why something that clearly should work doesn’t.
At one point when working with the Neverwinter Nights engine on our Creative Commons feature film BloodSpell, for example, we only discovered how to turn off an annoying haloing effect right at the end of 4 years of project development.
With Unity, I’d have just googled “turn off selection halo unity” and had 25 answers, three videos, and a Kindle ebook showing me how to do that in seconds. I know I sound like a bit of a cheerleader here, but seriously, it’s true.
There are tons of tutorial videos out there showing, step-by-step, how to make everything from an RPG to a tower defence game to a Call of Duty clone. There are discussions and Stack Overflow-style posts on every programming question I managed to think of in three weeks of development. And if you manage to come up with a question you can’t answer, there are about a dozen places you can post that question and get answers in a few hours.
Frankly, coming from a world where that sort of documentation just doesn’t exist, it’s incredible - in the sense that I can’t quite believe it.
Neither Machinima nor professional 3D graphics have anything like this - try finding a comprehensive guide to Motionbuilder’s motion retargeting controls, for example. And it makes the game design process more democratic, faster, and - yes - more fun.
Sometimes It Doesn’t Work
Unity certainly hasn’t managed to revolutionise everything.
Graphical effects, for example, are still pretty hard work - I gave up on getting ground fog working as I wanted it to (although that may have been a Rift problem), and projectile trails didn’t work at all as advertised. I still ended up hacking shader code - although that was made easier by the millions of community answers - and generally found that graphics were a bit of a roadblock.
There are specific points in the scripting where the easy-to-use framework breaks down somewhat - for example, I found it a pain in the ass to reference variables within one script from another script if they were both prefabs.
And I notice that 3D art assets, particularly characters, might be available on the Asset Store, but they’re often expensive.
My understanding is that Unity has some performance issues if you push it hard, particularly on mobiles.
Finally, the Unity renderer itself doesn’t exactly cover itself in glory.
There aren’t shaders for cutting-edge techniques like Screen-Space Directional Occlusion shader available, to the best of my knowledge. Their Screen-Space Ambient Occlusion shader - pretty vital for competitive graphics quality - is fairly terrible. Overall, getting Unreal- or Cryengine-quality graphics out of Unity will be … tricky.
But that’s not really the point: whilst Machinima types like me might obsess over high-end graphics, for indie games, good enough is good enough.
Are Games Further Ahead Than Films Now?
Yes, I think they might be.
The indie gaming scene appears to have stolen a march on just about everyone over the last 10 years. Fueled by the mod scene and successes like Braid and Minecraft, game development seems to have gone from something even more inaccessible than film production to an artform that anyone with a few evenings available and some willingness to learn can participate in.
Sure, big games still take forever. And game development boards are still filled with threads about keeping up motivation and not quitting when it gets tough.
But so are messageboards for novellists.
At this point, it looks like game dev might - for well-chosen projects, at least - be the third artform after writing and music to become truly democratic in the digital age.
Art should be democratised.
Everyone should be able to tell their story or make their experience.
And it looks like the last 5-10 years, whilst I was looking elsewhere, have seen that become true for games development.
What do you think of all this? Have games really been democratised? I’d love to hear from you!