The Paris Game AI Conference took place on June 10th and 11th at the CNAM. It was organised by AiGameDev.com. OK it a little too late for a proper but whatever :) I needed a first real post for the blog ! Almost 200 people from Europe had came to this free event and I had the privilege to be one of them (I was the only one available in the team). The schedule was quite interesting and it was a first for me, quite exciting ! Here's a quick report about my time there.
Alex had the good idea to start the conference by an informal panel were all the speakers talked briefly about them and the challenges they're curently facing in the game industry. From what they say, their major problem isn't technology in itself but more how they can fit this technology to the needs of the game designers and to the constraints of the producers. The first telling them: "I want that to improve the game experience, but I'll change my mind in two weeks !" ; The others: "Don't you spend too much money AI guys, I've already spent everything on the animation/graphics/gameplay". Some of them still talks about technology matters, as they come: NPC emotion, Highly dynamic worlds, Multithreading, Interaction between AI and animation. Great Start, speakers are passionate and seems to enjoy talking with eachothers.
Starts his talk with the bibliography from which I noted two main references. Thomas and Johnston - Disney Animation: The Illusion of Life (1981). It describes the theories and techniques behind Disney characters (on Amazon). Bartneck. Integrating the OCC model of emotions in embodied characters (2002). Features works on the implementation of a simple emotion model in 3D characters. Phil worked himself on the player perception of the NPC non-verbal communication and procedural animation. Too much time was spent on the state of the art so Phil has to rush the implementation part of the talk. However, he manages to talk about how he implemented the OCC model. This model describes a given state of emotion by a few scalars, each valuating a basic emotion (happiness, excitement, anger...). His sytem gather what seems to be the best sellers here: Behavior trees and blackboard. Interesting talk but he tried to put in too much ; he didn't have the time for a proper bibliography. This OCC model I didn't know seems interesting. Those scalars pushed into a fuzzy logic controller linked to motion blending could do the trick...
Ok, so I'm was to meet the famous behavior tree (BT) ! Ricardo gave a really technical talk focusing on real world problematics. His methods introduces collaboration between agnets to traditional BT using a Tactic Manager who assigns roles to the agents fulfilling preconditions for a given tactic, ie a collaborative task. Besides behavior trees mechanisms I didn't knew, my takeaway is that Crytek switched from Lua and state machine scripting to behavior trees because of their readability. Behavior trees seems to be a efficient tool to describe reactive behaviors but goal oriented task planning is not possible. It should be interesting to compare them with our Golaem Activity...
The AI for Killzone 2's Multiplayer Bots - Remco Straatman, Guerilla Games & Alex J. Champandard, aigamedev.com
The speakers gave a very detailed talk explaining the AI architecture used for this particular game. The Killzone 2 bots AI is organized in 3 layers : individuals, squads and a global, per team, strategy AI. The first two levels use HTN planners fed by basic perception and orders coming form the upper layer. The strategy layer uses simple rule based engines (one for each game mode) that handle high level goals. The engine is fed with semantic and topological information, give orders to squad and individuals and handles assignment of individuals to squads. Semantic and topological informations are available trough the strategic graph which is: Generated from the level roadmap and the manually tagged semantic informations (targets, flags to capture, good defending positions, sniping positions...), Updated at runtime by team influences (bots presence and goals, number of death...), The presented architecture is really interesting but suffers from what I think is a major drawback. The bots are used in multiplayer games to complete human teams, but even the strategy layer doesn't take into account human players. The difficulty being evaluating human current goal. The way the strategic map is designed is quite clever though.
This talk was given by an awesome speaker, fun and interesting. Best practices presented in the talk : Use a task manager handling the execution of tasks in threads, Describe calculations in tasks not threads, Separate calculations in two parts, updates on private datas reading public datas and then publish private datas to public datas, Handle conflict via ad hock rules Go error free before performance optimizations
As I'm not that familiar with game industry this panel about how the work is in game studios was very intersersting to me. What they emphasized most was that it is important to have done, and finish, something yourself (a small game for example) before starting to work in a studio. I know they were trying to say "Young programmers you must know and prove that you know how to finish a project and make things work." but to me it sounded like "I prefer a tinkerer who can do everything quick and dirty to a software engineer who knows it stuff but haven't code pacmans since kindergarten". As I am much more the second type of guy, to me, the first type can make things work but doesn't see the big picture, he is unsuitable for a big project ; a teacher of mine use to say "Knowing how to make a toolshed in your garden doesn't help you conceive a 60 story building".
This talk was about an assault planner accessible from a website. The planner finds the best course of action for several units in order to start the battle in good strategical postitions. The whole thing is an A* goal oriented planning inside a graph which vertex are the possibles tasks. Task are described as HTN and weighted by its cost in itself and the distance the unit has to cover to perform it. Simple but good results. My main takeaway for this good talk is that HTN seems to amaze everyone in the audience, seems pretty basic to me but I'm not an expert.
I'm casually interested in virtual interactive storytelling, so I was paying particular attention. The first part of the talk aimed at presenting the academic state of the art on the subject, not quite complete as it ignored the work of Marc Cavazza who is THE reference. The second part, features the presentation of the engine "Gadin" developed by Daniel Kudenko's team, interesting but knowing what is made elsewhere, not really impressive.
Whereas almost every other talk was about action game where the aim of the AI was to kill the opponent, this one is about racing. As presented in this talk, the main problematic of such AI is to adapt its skills to the player's : he mustn't feel alone behind or ahead of everyone. The presented solution is quite elegant:
- Different "skills" are defined;
- Each AI has values between 0 and 1 associated to each "skill" (at 0 the AI doesn't perform well, at 1 he is good);
- These "skill" values can evolve during the game (but the changes can't be instantaneous);
- A scripting language is created to define game scenarios, a scenario describes the evolution of the AI's rank according to their skills during a game;
- During the game the engine trie to match the current state to one of the scenarios and adapt AI "skills" value in order to match it. Another good talk talking about things that works in the real world on a released game.
This talk was the one I expected the most, but I have so much to say about Mikko's work on Recast and Detour that it will be the subject of another post.
That's it for the report of the first conference I ever attend to ! The official report is here, much more interesting than mine (I'm very proud to be cited the end of the article). Thanks Alex and the volunteers for the conference ! Thanks too to the drunk czech student who talk all the evening about linguistic, I had a good laugh !