DICE has taken the first person genre to new grounds with the free running first person adventure MIRROR'S EDGE. Learn what some of the challenges were and how we successfully overcame them when creating a believable first person full body experience. There will be a demo of the animation tools and pipeline that were used to create all of the in-game animations. The session will also cover what DICE did to create and sustain a creative environment throughout the project and see examples on how some of our moves evolved from prototype to a final feature.
Hi everyone it’s really nice to see so many of you coming here today! My name is Tobias Dahl I work at DICE as a Lead Animator at DICE, Next to me is Jonas Åberg Lead Programmer. We are here to talk about Mirror’s Edge, more specifically, First Person Movement and Animation for Mirror’s Edge that we worked on. So before we start, how many of you have actually played the game? For you who haven't, here is a quick movie that shows the game.
Tobias
The agenda for the presentation is as follows: * First of all we would like to tell you briefly about DICE, the company we are working on * Then we will move over to start talking about the Vision for Mirror’s Edge * Then about our production method and team structures * Then we will dive into how we prototyped our vision * Then how our tools and pipeline looked like * Then the iterative process to come up to the right quality of our moves * Then end with some final thoughts and questions if you have any
Dice is located in downtown Stockholm, that is the capital of Sweden We got bought by Electronic Arts in 2006 We are around 260 employees The games that we are known for is Battlefield and Mirror’s Edge
Jonas
design changed shapeNot going to go We came up with four KAOF, encompassI'll go Through each, try to describe, thoughts behind
most important, sums the focusbattlefield games, through the gun, game should feelby that, present on the battlefield, through weaponfeel the trigger, recoil, bulletIn ME, focus was, more body and movement, less weapons and fightingwe wanted to create a true feeling of immersion in the world and character.feel each movement, height on high rooft, satisfaction of defyingfeel the ledge when grabbingSo we came up with, TCEE, became a mantra, frame of reference, discussing featuresUse as a razor to cut through
this early concept, hard to see, describes navigate urban rooftop landscape, signature settingfocus more on movement than other FPSmore like a 3p adv, mechanic, translatedparkour like experience, do everything they wishedfor instance, when running up to a fence, ratheralso perform on all ledges/walls
able to capitalize, incentive, keep movingbuild features, around momentum, keeping, rewardwhen encounter enemies, element of choice, outnumbered, chase beginssince the player had their back, sensation of, bullet, VO, soundeffects
To actually put the player, faith, visually decribe, percievedstrong vibrant colors, illustrate, focus enviroment, relevant, peripheralrunner vision, highlight certain objects, red thread, guidingon top of that, the clean and pristine, visual edge, stand out
Tobias
To actually implement this vision we needed a strong team.
formed team, 5-6 people, focus on movementnumber of member change, iteration to another, core of 2 anims, 2 eng, 1 designer stayed sameall seated together, group, worked closely1 anim, 1 coder, feature, same timeThat way, bounce ideas, try stuff, short turn around at this time, our studio, more agile dev, for ME, scrum process.For those of you, experience, imagine quite a few?, might have realized, powerful if properly, might not apply to all partsIn our case, perfect fit, scrum format.Two week iterations, 2-3 moves each it,daily scrums, seating, maximize commun./transp, team membersAll of this, combined with fast pipeline, tobias, iterate, refine, low costvaluable for us, didn't know, look, until started working
Tobias
So when we had our team and production method nailed we needed to start prototyping our Vision for the game. First we did some concepts, then we animated some pre visualizations in Maya. We needed to found out how we were going to animate the perception about you being Faith, the main character of the game and not a floating camera that flyes trough the world. We also developed a highres solution for the first person mesh and we created a Whiteroom where we easily could test and iterate on our assets
The first thing we did was to put the concept artist on doing some simple sketches on how we could develop the first person movement. The cool thing about this is that we very quickly saw that all of the stuff we did we have never seen in a first person game before. Looking at existing 1p games there is really not much happening apart from a floating gun on the lower right part of the screen and some reloads and fire animations. Introducing new more natural movement was not very hard at this stage.
We have to prove to ourself that this is something we actually can animate and we also needed a visual target for our game, something to look at and have as a goal for the final game. This is an example of the first animation test we did in Maya, here we were just trying to block out some movements and it’s really rough and a early test
This is the result after a couple of days of iterations, same movie but with some new moves.
Even though this were something that we did for ourself and never was meant to be shown outside the team, we actually ended up selling the whole idea of the game by showing this movie to people inside EA and DICE. It’s pretty cool considering that we just spent a couple of weeks animating and rendering it. This is the final version of our previsualization....
Since we wanted to do something new with the first person animations and not only have a static camera while Faith was moving, we needed to prototype how to do this. The first idea was really simple, just apply motion capture to Faith and then parent the camera to her head. This is the result of that idea.
As you all can see, not very good. On the upper part of the screen we have Fatih’s POV and on the lower screen its just her running from a perspective view.
So we figured that the eyes have to do a really good job of compensation the movement that the head actually do while running, that lead us to the second idea of adding an aim constraint to the camera aiming at a point in space around 15 meters in front of the camera. This is the result of that test.
This gave us a better result, but also a really dull and boring result, this is not how I perceive a run when Im out running, no we were looking for something more. That lead us to the third idea.
The key is to not animate the movement but to animate the perception of a movement, how your eyes compensate for the body movement is not something you find in a book about animation, or something that they teach you in the animation school, that was something we had to come up with ourself trough a lot of iterations. So basically we just had to take each and every move and just massage it until we liked what we saw in the screen. This is how the final run looks in the game.
Tobias
Same thing was for all the first person animations, we just had to try what worked, some ideas on the drawing table sounded nice but just didn't work in Maya, so a lot of testing and ideas started of in Maya directly, here is one example of a test that didn't make it to the game, but I like it!
Tobias
Very important for us were the First Person Mesh, we really wanted to have appealing arms, hands and fingers for this game with: No volume loss Muscles and tendons during movement of the arms, hands and fingers We also wanted to have an illusion of something happening under the skin
Here is a movie showing three versions of the same mesh, to the left we have an standard hand with volume loss on knuckles and lower arm, plus that nothing is really happening under the skin. The second version we did some experiment with blending different normal maps dependent on the rotation of the finger joints, suddenly we got some more realism due to that something is actually happening under the skin, there is an illusion that the mesh has some kind of muscles and tendons there. The last version we added some blendshapes or morph targets to remove the volume loss from the earlier examples, so the lower arm keeps it volume and the knuckles gets more defined when the fist is closed.
And here is the final result with two hands
Since we found that iteration was the key to success for the first person animations we created a so called Whiteroom. It’s really nothing fancy but its a fast loading level that is designed to test all of our moves and something for animators, animation SE’s and designers to go in and test their tweaks to the game. For us in the animation team it was almost as an animation editor. Here is an old movie showing how it looked. Racetrack with all our moves
Since we found that iteration was the key to success for the first person animations we created a so called Whiteroom. It’s really nothing fancy but its a fast loading level that is designed to test all of our moves and something for animators, animation SE’s and designers to go in and test their tweaks to the game. For us in the animation team it was almost as an animation editor. Here is an old movie showing how it looked. Racetrack with all our moves
Tobias
Early on in the pre production we needed to start developing new animation tools, earlier at DICE we created new tools per project and there was almost no sharing between them. My goal was to create a package of animation/rigging tools that we could use all over the studio. So whatever project an animator or technical animator is working on, he/she we work with the same tools. We also needed to have support for multiple engines that are used at DICE, like Frostbite, BF2-Engine, and Unreal3. Since these engines handle different amount of joints, we needed to be able to scale that amount, but still not changing what the animators see when they open up an animation file We created all our tools for Maya using MEL and API for some more writing and reading animations, since MEL is too slow.
Since we work on a variety of different style on our projects, we also needed to support things like 1p and 3p anims, Weapons, Mocap, Realistic and Stylized (cartoon) animations we needed to keep that in mind while designing the rig. We also have projects that have cut scenes so we needed a system that can handle many characters in the same scene. Since we had used referencing in Maya with bad result in earlier projects we decided to avoid referencing as far as possible in this tool.
So here is a demo movie of what we ended up simply calling ArtTools First we will go through the rigging part in ArtTools The first thing you do when you start is to choose project your working on, choosing one will automatically set all the Maya preferences for that specific project. We choose Mirrors Edge Then you import your model in this case Fatih the main character for Mirrors Edge, the tool automatically checks the mesh for any possible errors. When we have imported the mesh we need to import a rig template that contains the left side of the final rig, then we adjust the sizes of the selection handles and place our joints to fit the mesh. When that is done we Save the rig and automatically it creates the right side of the skeleton according to the adjustments we just did, it also imports the skin weights. In the next step we can adjust our skin weights by painting them or what ever method preferred, when we are happy with the deformations we save the skin weights And finally export the result into a animation file that the animators use to create the animations. So we always build our animation file from this tool instead of using references that we had on earlier projects but had a lot of issues with. During this process we also create an proxy mesh, its a split-upped version of our character mesh that gives us a much higher frame rate while animating The tool that the animators are using is simply called the ClipManager, from here we can access the Animation Rig that we just created. We can also from the list in the window access all the animations that are associated to this specific character. In the example RunFwd,WalkFwd and WallRun. By a simple the animation is assigned to the animation rig and the animator can start working with it. We also created some screen short cuts that the animators easily can access by right clicking on the screen here is one example show when the animator are using our offset tool, offsetting an existing animation. We also have the possibility to switch spaces for our arms, you can switch from weapon, world or body space dependent of the needs for the specific animation We also have a FK/IK-switch that blends nicely between the two. The head is animated in IK and the legs have the possibility to be stretch, the stretching is an example of the diversity of the rig, some projects like realistic ones we do not use the stretching that much, but some others all the time. When we are happy with our new animation we save it right from the tool, using our own animation format. When we use motion capture in our game we have a tool for importing .fbx files into the scene and apply it to our character, we built our own remapping tool to apply the animations independently of the characters proportions, so we can easliy share motion data between all our projects. In this example we apply the animations from a SWAT character onto Fatih by some simple mouse clicks, when that is done we can delete the swat character and continue to polish our motion capture data. In our ClipManager we also have the possibility to select all the different animations control by clicking on a graphic representation of the character, this helps the animators that dont like having all the NURB’s-handles cluttering the screen. We also have a pose tool, that helps us export and import poses, its pretty straight forward, you pose your character when your happy with the pose you just save it and when you want to apply it to the character you just select the specific pose and the import it onto the character. Since we have many situations with multiple characters in the game we need our tool to be able to handle that too. We can simply create a new animation file with two characters and then from the ClipManager open up that file, in this case we have the first person mesh and the third person mesh of faith in the same Maya scene. Dependent of what character you want to work with for the moment you select that one from a drop down menu. In this example we apply the run forward animation for both the 3p rig and the 1p rig, the 3p animation we used for the shadows. Lastly I wanted to show you how a normal iteration of one animation, first we start up the whiteroom level, as you all can see the loading time is really fast. Lets say we dont like the Run Forward animation, we quit the game and go back into maya open up our Animation file that we want to work with, in this example the 1p Faith scene. We apply the animation and look at it through the first person camera. Lets say that we want to raise the hands a little bit in the animation and when the animator is happy with the new animation its just to click the export button in the tool, then the animation is being digested by the game exporter and finally exported to the game. Then we start up the whiteroom level again and take a look at the new version of the animation.
Tobias
movement key area of focus, spend time, iterationall moves in 1 year before, gradualy raising qual. 5-6 times. all this time, a lot of attent, love, this was key, solid fluid.another thing, lot time, prevent motion sick, moved around camera way more, big problem in begining. seems moves wasn't able to conv. led to. ties in to tobias trial error find convinsion anim.before and after clips, final game, really early prototype,
most basic, used by far. spent a lot, finding a good basic jump, ended up, long jump, that in place, context sensitive, for instance, detect, long high, unique. result in a grab. for every jump a land, effort. show in movie.
another core move, cross gaps impossible to jumpcamera impact, hit wall, guided camera helped aligning, prepare*play*aiming, turn out, while runningchanged how trigger, instead of run, press jump, detect, mid airmore fluid and dynamic
start, plan, fixed heights, different animssome time into he prod, props and buildings came back, all different height, dimensionscheaper to change in code/anim, that changing contentturned out a good thing, became, more dynamic and exciting.*play*choose anim, dep on height shape obstacle, speed angle approach
Last example, time to conclude, talking about
happy scrum format, worked in our favor, flesh out Finally, this whole project was a big learning experience. A lot of the things we have done, we're really pleased with and proud of, other things we feel we could have done differently. All in all, I'm really happy that we stayed true to our original intentions and that we have created something fresh and unique.