Earlier this week, GDC Europe took place in Cologne, Germany. I wasn't planning on going, but in the end I went there for two reasons: first to discuss options for our Game AI Conference next year, and second to find a large list of interesting projects for the mentoring program! Having these specific goals in mind for the whole time made the trip very succesful.
That said, from a pure content perspective, I felt this year's GDCE was not up to the standards of the GDC Lyon in 2007 which had many tracks from research and related industries that were very useful [1, 2, 3], or GDC Paris in 2008 with more value-packed talks which we complemented the day after with our inaugural Game AI Workshop [1, 2]. This year's GDCE in Cologne was lacking a bit of direction; as a small business owner in the industry and independent developer, there's typically a wide range of talks that interest me. However, many talks were simply soapbox rants or thinly veiled PR sessions — more abstract than the typical project-specific talks.
There were some noteworthy sessions though! In this article I'll cover the talks I found the most useful, and of course add my interpretations and thoughts on the subject.
Procedural Content Generation
Dierk Ohlerich talked about the process of generating geometry, textures and sound procedurally. In the past, he and his demogroup worked on .kkrieger, a FPS in 96kb and .debris, a graphical demo in 177kb. This kind of compression, according to Dierk will help most games reach high-quality graphics in the 10-100 Mb range.
The approach that Dierk describes is a set of operators connected in a graph that process information and incrementally build up objects in a more and more complex fashion. These operations for example can be the typical Photoshop filters applied onto pixel maps, or creation and manipulation of 3D geometry. Dierk claims that artists become comfortable with this technique, as it only involves tweaking parameters for the operations and the skills are similar to those used in traditional graphics programs.
I asked Dierk about the animations in .kkrieger, and apparently these are built using a simple physical simulation driven by some procedural controllers. He says, however, that this approach can only apply to robotic creatures and would never be as realistic as traditional animation. Likewise, speech won't be able to work procedurally at the quality levels of voice capture. It's safe to assume the future of AI in games will be more example-based!
Off Road Physics
This was a presentation by Jim Buck about the physics in PS1 cult-classic Rally Cross. This session was a breath of fresh air compared to most of the other talks; the problem was introduced nicely, and the solution was well motivated, there was a demo, good slides with graphics. It's the kind of stuff you expect from presentations, but few developers have the ability to do it in practice.
I picked Jim's brains about the AI in the Q&A after the talk, and briefly outside. The racing AI does not cheat, it also controls the same "jelly" box made of 8 point masses attached by springs. This is done by a manual local controller that can steer towards points in the world, and these points were apparently placed by designers playing the game. This seems like a very innovative workflow, especially considering this was over a decade ago! That said, Jim did admit that the AI regularly needed to be tweaked and fixed as the physics model changed — although there's rarely a good solution to this in physics-based games.
Cars in front would pick worse racing lines, while cars at the back would make better choices. Since there was no cheating, this was in effect a step towards what Black Rock is doing with Pure today.
Natural Motion's Morpheme
I'm generally skeptical about Natural Motion's most famous product, euphoria. It's a noble goal, but I'm not sure the implementation lives up to the hype — as I described in much more detail in this editorial. However, with many more iterations I'm sure Natural Motion will get this right eventually! I went to this session to find out where they stand generally...
This sponsored presentation by Simon Mack was about their other runtime product, morpheme. I didn't know anything about the tool before, but it's basically a state-based blend tree. This is pretty much the standard industry implementation for a low-level animation system these days. I was impressed to say it doesn't seem to be aiming up in the clouds like euphoria and what it does it seems to do well. It'd be interesting to take a look at the SDK.
One part I found interesting and very familiar is that they're using morpheme as a platform for optionally including more advanced animation features, such as picking a transition from rag-doll based on the nearest posture, or lining up the feet using their feature-based footplant detector.
AAA Automated Testing for AAA Games
I was very much looking forward to this talk since a lot of our own AI Sandbox code is automatically tested. Unfortunately, Francesco Carucci's talk was more about production than actual development with automated tests, and focusing exclusively on unit tests. He spent more time convincing the audience and helping producers convince their developers that testing is a good thing. A talk explaining exactly how they actually do unit testing at Crytek would have been much more valuable for people getting started with tests.
Luckily, the audience questions were much more practical:
Francesco's project is one game team that's being used as a test at Crytek for automated testing.
Currently, there are over 1000 unit tests that run in about one second after compilation.
Francesco thinks it's better to throw away legacy code and rewrite it test-driven rather than trying to incrementally test it.
Concerning functional testing, his approach was to write a custom framework within the game and different from the unit test framework.
Personally, having been using unit tests for over 4 years now, I disagree with Francesco's last two answers. First, like any huge rework of the codebase, it's dangerous to just throw out code; I'd bring it under test incrementaly by refactoring and adding functional tests to make sure no in-game result is broken in the process. Second, at AiGameDev.com we use a functional test framework that's exactly the same as the unit test framework; the only difference is that functional tests run longer and can load data from disk, use non-interactive graphics, etc. If automated functional tests require a different framework, then it's probably the engine that isn't built for automated testing.
Advanced Racing AI in Pure
Eduardo Jimenez gave this exact talk at our Game AI Conference in Paris a few months ago, but I too busy with organizational stuff to really appreciate it and question time was limited. As it turns out, there was a speaker change also which gave me the opportunity to meet Iain Gilfeather briefly — as well as ask tricky questions!
Some of the additional topics that came up during Q&A that weren't in Eduardo's talk:
Someone claimed the idea of adjusting skills to a race script was just like rubber banding, and asked if Iain had thought about profiling player skills and adapting the AI based on that? Iain answered no, and I'd question whether it would be anywhere near as good in practice. That question seemed rather academic more than anything, there's lots of research to be done in player profiling, but there are only poor results so far.
I asked Iain how they approached the play testing process, and if there were any programmer-type players who tried to break the AI. Iain mentioned they used mostly players of beginner- and intermediate-level, and nobody had managed to expose the AI like this.
Someone in the back asked about the skills that were adjusted by the race management. Ian explained these included four skills in total: the ability to follow the racing lines, jumping skills, tactical selection of paths and one more skill that wasn't the throttle.
I asked if they avoided using the throttle as a skill on purpose, since it'd be much closer to what traditional rubber band AI does. And indeed Iain confirmed this; it's particularly obvious if you overtake someone in a straight line that's going slower than you! Iain did mention that there was some threshold set though, presumably the ability to accelerate.
Generally speaking, I think the Black Rock team are right about the applicability of these ideas to other genres and experience management in general.
Building a Level in 45 Minutes
Sascha Gundlach did a sponsored session about creating a level in the CryEngine 3's latest Sandbox editor. He chose to make a simple island that would be the first tutorial level for a FPS, basically teaching the player how to master the game's controls. The bulk of the presentation showed off the variety of terrain editing features they have in place, for example height maps, road tools using splines and the magic Far Cry™ jungle brush that creates a lush forrest in a couple clicks.
From the game logic side, you can basically drop AI NPCs into the game and have them behave correctly by default without any scripting. All that's required is a simple navmesh pre-process that only takes a few seconds, and is accessible from the Sandbox's menu. For level scripting, the Sandbox uses a node graph system that allows trigger shapes (e.g. a polygon on the floor in this case) to send events to other nodes. Sascha wired up a physics trap using such a trigger that would then send a physics impulse to a set of physics objects that would then go rolling down the hill towards the player.
The biggest take-away from this session, apart from the fact it's easy to create Far Cry and Crysis levels in CryEngine, is the power of WYSIWYG for gameplay. Sascha could create a section of the level and play it instantly without having to wait for anything to load. This kind of workflow is probably one of the biggest things we can do to improve AI design and development.
Keynotes and Other Talks
These high-profile sessions left many attendees with mixed feelings...
EVE Online and DUST
The EVE Online keynote stole the show, partly because the game and topics discussed were interesting, but also because it was a very professional presentation with some exclusive gossip. The slides looked great and did not have pages full of cut 'n paste text like most other keynotes.
On the technical side, I've always been impressed with CCP's approach of using Stackless Python on top of a cutting edge graphics engine. Thanks to this, they are making MMO innovation seem like a simple process! It'll be interesting to see how the company ties together their console FPS along with the PC game, and how the simulations evolve.
Interactive Narrative for Mature Audiences
In this presentation, David Kage from Quantic Dream made the mistake of taking almost double the time slot than he had available to him. Many attendees found this a little rude and unprofessional (especially for a keynote speaker), which didn't leave a very good impression. The cause of this was too much content: the presentation was a melting pot of topics, most of which have been discussed to death before online in blogs or game development forums. While insights into Heavy Rain would have been very welcome, David could also have talked about his design decisions on Farenheit in more depth — which would have been more useful for developers.
This talk left me with two big impressions:
Many of the topics David brought up I didn't feel were anywhere near as controversial as he thought they were. Most developers in the room agreed with him! Maybe 5 years ago he had to fight to get his point across, but now most topics he brought up are increasingly common (e.g. use social emotions in games).
I don't believe the way forward is making more roller-coaster type games, as David suggested in contrast to open sandbox games which he thinks are not fun. While my own motto is that "Emergence is not good enough," there are many ways to direct gameplay in a fun way within a sandbox; that's the whole point of good AI.
All in all, I can't wait to see what he and his team have done with Heavy Rain!
The Past and Future of Crytek
Cevat Yerli's talk was also long and packed with summaries of topics that have been also discussed online on blogs and news sites over the past few years, but unfortunately presented in a bit of a chaotic fashion. However, there were some interesting example photos and their corresponding rendered version in CryEngine 3. Like the Quantic Dream keynote, had this talk focused a bit more and used more real-world examples from Crysis, it would have worked much better.
Most importantly for game AI developers, Yerli suggests focusing on AI for the next few years as we're pretty much reached the video card's bottleneck for this generation of graphics. Even the CryEngine 3 may have extended a bit too far for this console generation with certain features combined with MSAA — at least if 30 FPS is the goal!
For the talks I didn't mention, there are some slides available online. You can find them on this page in the GDC Europe 2009 section. Only some of the sessions have PDF or PPT files available unfortunately.
The whole experience in Cologne was interesting for me, including the parties for meeting friends, talking business, and even getting to know other developers! What goes on outside the sessions is often the most important part of such events.
It'll be very interesting to see what happens next year for GDC Europe. The focus did seem to be on the business side of the industry, but it's unclear whether it was by choice or if there simply weren't enough developer submissions. Either way, this event felt a little disjointed because of the move from Leipzig, but ultimately the content wasn't quite there.