Game Tech 2004 Featured Talk - How a Character Should Walk - Tom Forsyth of RAD Game Tools
Game Tech Talk
Game Tech 2004 Featured Talk - How a Character Should Walk - Tom Forsyth of RAD Game Tools
it's not quite so important though you do spend a lot of time looking at people walking around
but in third-person games the thing that most people spend most of their time doing is looking
at your walk cycle so that's got to be a really good walk cycle it's just like it's got to be the
best because when they're not looking at your walk cycle they're actually playing the game
shooting at things picking up things um half the time they're looking at the the hud so you know
it's got to be nice and stuff but it's crazy the amount of time people spend just looking at the
the back of their character um walking along so be nice to do it well so yeah these two main
things running and walking and shooting at the player take up the vast majority um sorry yes
this is ai shooting at the player take up the vast majority of the time of what's going on on screen
um we're pretty good at doing people shooting at you it's kind of simple
um
it's an animation um rubbish at walking and running i've seen like two games that have
even half impressed me and the rest is just like i mean it's it's not that easy which is probably
why people just go ah whatever um but let's let's do it right so normally we use uh granny
is our favorite model um she's got this big long dress rubbish for showing a walk cycle
plus she sort of minces along like that
um so so we got a slightly different variation and uh
so this is uh the uh the unique imagination of steve theodore um thanks steve you should have
seen it when i was modeling he starts with no clothes on then puts it's not a pretty sight
anyway so this is granny uh warrior sort of queen mom or something and um so she's just doing her
walks i don't know if you can see her she's just doing her walks i don't know if you can see her
cycle
and uh you can speed her up and she can go jog like a fast run
so you can do all sorts of running around and stuff like that
so you get the idea it's a pretty simple demo or so you'd think so let's let's start with a
couple of principles i wanted to make this realistic so it's not uh it's as little like
a game demo as possible i mean obviously it is a demo but
it's got to be something like what you put in the game and the principles of a well-natured
animation system are that it doesn't take control character movement the the movement of like the
the center of gravity or the pelvis or you know whatever you sort of take as the middle of your
like collision bounding box or whatever is is determined by the player the game logic
the collision system which then prevents some of those movements
then the physics system which does like crazy stuff. And the thing that doesn't influence
it is the animation system. It's the animation system's job to take this highly responsive
player that's doing exactly what the player wants to do and make it look as good as possible.
It is not the animation system's job to make it sort of flow really beautifully but lose
control. Now it works for some games, Prince of Persia is probably the best known example.
But a lot of people really just hate the spongy feel. Oh and fighters as well are much more
indirect sort of style. So this doesn't mean that the animations have no control, they
determine a bunch of sort of default things. So the artist makes a walk that looks natural
for the character.
And then at the start of the day, when you load the walk cycle in, you go, oh, how fast does that move?
Okay, so let's make that the standard walk speed.
Now, in some cases, you might say, you know, look, you can't speed it up or slow it down too much.
It'll break the game.
You know, one character can run much faster than the other.
So those are constraints.
But they're constraints that, you know, the designer says to the artist, it's like code doesn't care about that.
It's like, and even if you did enforce that, there's a problem that, you know, if you say, well, that's a very nice animation you've coded, but it's too fast, so I'm just going to slow stuff down.
And then the animator's going, hey, you're not playing the walk cycle that I actually made.
You're doing some weird lerp stuff most of the time.
So that channel's going to be used anyway.
Complex motions, getting in and out of cars was the one I forgot.
Just, yeah, okay, let it do its stuff.
And that's just too tedious to do properly.
Sorry, in code.
We've got these weird unnatural gamisms that you need to respect.
Players expect it.
Zero wind-up jumps.
I hit the jump key.
I should be going that direction instantly.
None of this wind-up.
I don't care if, you know, you're in this weird pose here.
I want you to be moving there, that way.
So stand to runs.
It's like I have a D-pad.
I'm pushing it, or I'm not.
None of this speed-up rubbish.
And nose-scraping on walls is, we're all sort of kind of cool players.
We have instant sort of, we automatically straighten up because it looks good.
Novice players will just, like, run at an angle of 10 degrees to a wall
and just scrape their nose along it and go, wow, this looks really shit.
It's like, well, you're running into the wall.
What do you want?
I want it to look good.
You can cheat with AIs because you can just say, hey, no,
you're going to be in this weird pose.
You have to do the wind-up.
No instant jumping.
That's rubbish.
Looks awful.
Let's start with the basics, just walking forwards, constant speed.
So this demo allows me to change the speed of the walk.
Not applicable to every game, but it's kind of nice.
So we have multiple walk cycles, in this case three of them, slow, medium, and fast.
The medium is kind of the default speed, and then, you know, if you're walking uphill,
you might slow down.
I don't know, things like that.
Each of the actual animations is just a single walk cycle.
They all, in fact, they all are single walk cycles.
They all start and end with the left foot down, mid-stride.
So they're all starting and ending in this reference pose,
which means they all start synced.
You then, when you load them up,
you calculate their actual speed in meters per second for each of the animations
because, obviously, they're different speeds.
They're also different cadences.
So they have different...
They have different numbers of strides per second.
So they have these two different numbers,
which is actual obtained speed and number of steps per second.
And you can have animations that have a lot of steps per second,
but are the same speed as one that has a few steps,
like a big, long stride is about the same speed
as, like, a slow sort of jog type thing.
So, anyway, you find out the actual speed that this covers.
You then say, well, for each...
Separate animation, you say,
well, how fast do I need to play this animation to actually get, you know,
the player says they want to do 0.8 meters per second,
so for each of these slow, medium, and fast animations.
And, obviously, the slow animations,
we're going to need to speed them up quite a bit,
and that's going to look unnatural.
And the fast ones, we're going to have to slow them down for a medium one.
So we find the animations that are, obviously, closest and use those.
I just use the nearest two and do a lerp.
But you also lerp this frequency to find a global cycles per second.
You then make all the animations that you're playing
go at this number of cycles per second.
Because if the animations are not synced, you can't blend them.
It doesn't mean anything.
It doesn't mean anything to blend something with the left foot down
and something with the right foot down.
You get this sort of weirdly hovering thing.
So they must always stay in lockstep, in phase,
even though they're different lengths, which is why I do all this.
I'm just faffing around with frequencies.
So it does sound complex, but it does cope with animations
that have this sort of wide variation in the gate.
And it means that the animators can compose pretty much what looks good.
And you're not saying, no, no, no, this animation is 29 frames long.
It needs to be 28.
This isn't working.
Look, it's drifting out of phase.
Oh, and now all this sort of stuff.
And it copes with just as many animations
as you'd like, which is nice, rather than forcing two.
So this is the kind of medium walk.
And I can slow it down to, this is a completely different
animation, which is just a sort of slow little doddering walk.
You see the cadence doesn't change much.
It's mainly a change in the stride length.
And then as we, oh, sorry.
Oh, sorry.
Too smart.
And that's the sort of fast walk, which is really quite a long stride length.
I think it's slightly faster frequency.
But still, all the change in speed is done by the stride length.
And also, she does different things with the sword, how amazingly she holds it and stuff.
So I don't know if you noticed, but when I changed speeds, there was a lean,
forwards, and when you decelerate, there's a slight lean backwards.
There's a whole variety of effects that this has on the body.
You dig the heels in for a slow down, and you get up on your toes.
And this happens even at walks.
It is very subtle for walks, because there isn't a great deal of change of speed.
But it is actually there, and I find it very difficult to actually see the thing.
But if I turn it off, it looks wrong.
You get this sort of robotism thing.
It sort of magically speeds up, it looks very strange.
It is a subtle effect, but so you have two more walk animations.
One is a speed up one, one is a slow down one.
The important thing is they don't actually speed up or slow down.
Both these animations have exactly the same constant ground speed as the medium speed
walk.
They just have the motions.
So it's this sort of weird thing that looks like it should be speeding up, but isn't.
So it's not a big difference.
But it's not a big difference.
Debug keystrokes.
I hope these are all written down on a piece of paper.
Don't worry.
Lost it there.
There it is.
Okay.
Let's see, let me just show you.
I can't see it.
I can't see the key.
So I'm just gonna throw it down.
I'm going to turn it off.
I'm gonna close this one.
There it is.
I'm going to close it.
Okay.
I'm going to close this one.
And I'm going to close this one.
And now I have a button.
And I'm going to close this one.
So this is the slow walk, but it's been sped up because she needs to do that.
This is the medium walk, which is about correct speed.
And this is the fast walk, which has now been slowed down because she actually wants to travel slow.
And this is the speeding up walk, which is absolutely constant speed.
It's just this lean.
And as you can see, they're very exaggerated.
And she's doing the sort of balance thing.
So they're very exaggerated.
And in practice, you never blend all the way to them.
They're very slight little things.
But you do the exaggeration just because then you've got the blend space.
It's hard to extrapolate beyond the blend space.
You could if you wanted to fill in some more realistic ones.
But I've got the key now.
So this is fairly obvious.
You extract the acceleration.
You take the acceleration from some heuristic from the game.
You want to damp it fairly heavily otherwise the lerp kicks in very suddenly, and she sort of goes jerk.
So you want to damp that quite a lot.
The heuristics depend on what your control scheme is and all that sort of stuff.
So that's ...
So, again, we play these two animations in just lockstep phase.
And just blend towards them.
it does mean that if you're accelerating hard the three walk speeds that we had they all get
blended away from towards the acceleration one and there's only one of those and in theory you
should have a fast medium and slow one of those but it's just not worth the effort especially as
you almost never get towards the full one you're always somewhere in the blend space in between
them so the small fraction blended in it's it's like a hint or the the displacement map stuff
that was talked about last night it's it's it's more the difference between a normal walk and a
and a slowing down and speeding up so walking and running so if we accelerate a bit faster she just
breaks into a run and slow down quite a bit and she keeps up the run she keeps this gate but it's
a
it's just a jog now and um and there's a manual toggle and there's quite a lot of overlap between
run and walk so because changing gate is kind of unnatural and we don't don't tend to do it much
so you want to make sure that the runs and the walks overlap quite a bit uh this is the this
is to stop unnecessary transitions but also just because that's the natural thing once you're
running you tend to stay running it's just a different animation set
exactly the same five animations fast medium slow accelerate decelerate do exactly the same math
it's just all the speeds have changed slightly according to the animations so in fact as far as
this is concerned you could swap the two animation sets around it would just work so
the transitions are the only thing that care if you try and run uh yes if you're in a run
and you slow down slower than the slowest run you switch if you're doing a walk and you go faster in
the fastest walk it switches to a run the uh you don't have to do the specific transition it's a
fairly quick transition so you can just just blend at any time that looks fine i i think was mentioned
yesterday crossfades between two animations you're doing quick it's fine no one cares but the the
sort of physically correct thing is to not do it in the middle of a walk you wait until one foot
just lifts off the chain and you're ready to go so you just wait until you're on the left foot for the right foot
and then you do the next東西 and then you do another fast transition and then you do the next switch
the second one is the not the first one it's all about the speed you're doing a pertama
the fastest walk it switches to a run the you don't have to do the specific transition it's a fairly quick
the ground. That's when you started. You transitioned while the foot is in the air, and the transition
must have finished by the time that foot hits. So it's a simple matter of timing when the
foot comes off, when the foot goes down. This sounds complex, but actually this thing of
being able to extract foot, the times and durations of when foot feet leave the ground
when they hit, we're going to extract all that later anyway for the footstep IK, so
it's actually really simple code. Oh, and I just do a simple look. You could actually
have an animation that says this is a hand-authored transition, but it's a really fast transition,
so it's fine. So turning, the other effect is turning. Now, walk speeds are just, she
just turns. You could do a slight lean, manual sort of code lean in IK, but it's not too
bad.
When she runs, though, I actually have, speed her up a bit. There's a decent bit of body
lean. You kind of see the effect kicking in. And there's also two different animations
for left and right lean because she does slightly different things with her arms. I can accentuate
this, I think. Oh, I see. I'm going to turn it down. Hey.
There's quite a lot of lean. You can see she's really digging into that corner with
that inside arm and shoulder. And there you can see the arms sort of coming out like that.
So for walking I just ignore it. It's just not worth the animation effort. You typically
got like 30 of these things to do. Adding a couple more here and there. This is where
you get the most of your animation effort. You just don't want to do it. You want to
more animations is just tedious so these two animations are medium run speed
again they're extreme left and right leans again the animations actually go
straight they don't do it do it in a curve I think they were actually authored
so they go in a curve and then he just stopped the bone the root bone turning
and just did it straight so you calculate the turning amount from the
game input again in whatever heuristic you have you know if it's a d-pad then
it's kind of you just get this binary left right and you want to damp that a
lot and so on that's all kind of stuff you just need to play with according to
your control scheme just to emphasize when I say the rotation or the the
acceleration is damped I mean the effect on the animations the gameplay the
actual effect she instantly just turns right that's the game's problem how fast
she's moving which direction she's turning
I mean the effect on the animations the gameplay the actual effect she instantly just turns right that's the game's problem how fast she's moving which direction she's turning and
animation system doesn't control that that's just like this is what the game
does so it's purely the effects that the animation plays so in this case it's
just to stop you know she's running along and then you suddenly do a hard
turn and the body just sort of goes pop as very unphysical looks very strange
so the that's all the animations I have it's twelve animations in total
so the actual blend space is 4d so there's the linear speed blends in one
direction there's the turning speed acceleration and deceleration and the
gate which is simply walking or running and transitions between now in theory I
have three three stops at each of these I have a steady state I have an
acceleration I have a deceleration at a no turning turning left turn right
linear speed I have three walks and gates I have two so that's like
nine eighteen eighteen animations so I don't have an awful lot of these only
have twelve and wait that's 2054 something crazy like that on the fly math so most of the corners
of the blend space do not have an animation associated with them because most of the
time you don't get there you don't have like a fast acceleration with a hard left turn you know a
you never actually get to that blend space
and even 12, maybe you don't want that
for some of the simpler characters
you just go, oh you know what, I don't want the lean animations
I'll just IK something in, it'll be fine
so here are the 12 animations
this is basically how you calculate the blend weights
and these are the blend weights on the left
with the name of the animation, they always sum to 1
so I have walk and run, which walk is
1 minus run and so on
slow, medium and fast walks, which is derived from
what's my speed, what's the speed of the walks
ok, find the nearest 2
and the runs are exactly the same thing, only with run speeds
steady acceleration, deceleration
again, this column sums to 1, this column always sums to 1
no turn, left turn, right turn
multiple altogether, it's fine
you notice that only the runs have the turns
on the walks there are no turns
so I just ignore that
interpolation value
she just rotates
strafing's kind of an odd thing
gamers expect it
they don't want to, they want to adjust slightly right
to actually, you know, they're walking forwards, there's a doorway
they don't quite fit, they just want to sidestep right
they don't want to turn, do all this sort of stuff
so in an RPG like this where she's wielding a sword
the direction that she's facing in isn't too vital
so what you'd probably do is say
ok, he was walking forwards, and then he applied a bit of strafe
so the composite motion isn't that way, it's now that way
so all I'll do is I'll just turn the character
and walk them that way
so strafing leads to turning
which means that you can completely ignore strafing because
you don't have any, you just have a bunch of turns
in shooters, it's a very different situation
in shooters, the guy's got a little rifle there
over the shoulder or something
and the direction the weapon is facing in
that's it, that's the game
is which direction this weapon is facing in
you must not change this
now to be realistic
the shooter's pose is like that
and you can't really turn the body all that much
and still remain in a proper shooting pose
so people do actually strafe
they just walk around like this
it's kind of bizarre
so the easy thing is the actual RPG
the thing to just do a turn
that's too easy, so I did the strafing
so it looks kind of goofy with her waving a sword but
I'll just show you
so here we have Granny
and we strafe to the left
so yeah, it looks kind of strange with the sword
but it is
oh hey
and the animation system is again doing its best
she's instantaneously changing strafe positions
so you can make her do weird little dances like that
as the animation system tries to keep up
but that's because I'm being a pathological user
so for strafing you could have
actual ape animations
in each walk direction
lurk between the two
8 extra animations is kind of a lot
especially if it's not a particularly important part of the game or something
so here I don't do anything
there's no extra animation
I just move the body
and the foot IK, which I'm going to do
just copes, which is kind of nice
the only modification I needed to do
was the footstep prediction that says
hey, where should I be planting this foot?
on the ground
that looks at the strafe
and takes that into account
so there's this concept of footfalls
a footfall
slightly vague terminology
I call a footfall the time when the foot goes down
or comes up indeed
so when I talk about that it's always a time thing
this is similar to the constraint intervals
stuff that was talked about before
it is a binary thing
the foot is either down or not
it's either constrained or it's not
and it's just represented by two times
for each single walk cycle
an up time and a down time
and you have one of these per foot
the way it's actually authored
is you have an attribute per foot
in the art package
and it just goes from 0.0 to 1.0
you can use the fractional stuff for like
a foot slip
in a fast run
as the foot comes off
it can like skid across the ground a bit
so you can use that
there to just say
oh yeah, there is a bit of foot slippage here
and for static poses you can say
these would both be half
because I'm equally balanced
sort of lounging around on one foot
there's like a 0.1 on there
because I probably should keep it stationary
but if you want to move it
well, it's not a big deal
if I want to move this one
I really should shift my gait
and do that
so I just load these in
and at the start of the day
I just sample them
and find where they go
above and below like 0.95
and that produces two times
and then there's a bunch of utility functions
so I can say
hey, I'm currently here in the cycle
is my foot down or up
how long is it till there's the next
up or down transition
and what fraction of the way through
the current state am I
and this is all the stuff that
when I talked about
you want to do the walk to run transition
this now is trivial
it's just like
okay, hey look
a foot just went from down to being up
I can start my run transition
how long till it goes down
oh look, this just all comes out very easily
I can just
make sure that the scale offset works
for that transition
blending multiple footfalls
you could
these constrained intervals
you could do something fancy
I just blended the start and end time
and that seems to work fine
seeing as all the animations are synchronized anyway
that seems to work fine
probably if you're doing different animations
maybe you need to do something smarter
but different animations kind of don't
don't work very well together
so it's just a bunch of utility functions
but it's
it's something you don't think that you'll need
but incredibly useful once you go
alright, let's just write this code
hey look, I can now just feed it a signal
and I can ask things about signal
so the next concept is a footstep
again, sorry about the terminology
so a footfall is a time thing
a footstep is a position
and it's the position when the foot first hits the ground
if the foot then subsequently slips
I don't care, that's encoded in the animation or whatever
but it's when it first hits the ground
so when the footfall goes from 0 to 1
now each foot has two footsteps
they have a future one
which is always being continuously predicted
it's like when you're walking along
you're scanning along to see where you're gonna walk
and a past or current one
if the foot is down then it's obviously the current one
as soon as the foot comes up, it's the past one
so you always have two
the instant the foot touches down
the currently predicted one becomes the past one
you start predicting the next one
in this demo, as soon as the foot goes down
that's it
that is the past footprint
it can never move again
if you're sliding
or you got knocked off your feet by a physics thing
then obviously you don't want to glue that foot down forever
but, yeah
it's a simple demo
so, I'll show you the footprints
there we go, so
this is showing
all four footprints
the past or current
and the future for each foot
so you can see that her feet are
so these leading ones are the predicted ones
you can see that her feet are actually getting there
oh, yes, sorry
yes, this foot slip you're seeing is in the animation
I'm not entirely sure where you put it in there, but
I'll just change to the walk, which doesn't have one
yeah, the walk doesn't slip, the run starts slipping
and that's because you said that you were putting one number there
yeah, well, the curious thing is the slow run slips
and then the medium run doesn't
so that makes no sense to me, but I'm not an animator
so you can see as I start turning
these
the prediction footprints
turn with me
or turn ahead of me, in fact
and as I speed up
they'll get longer
and then as I slow down
they get closer together
it's kind of a subtle effect with the walks because
they're
it's the
no, it is the stride length, sorry, you can see that
stay with the walks
the slip is distracting
so
the way I
the future footstep is always continuously predicted
it's not like
I predict it once per cycle or something
so you find the time
until the next foot down
which is
which is the place where the footprints are
where the footsteps are nominally at
so you predict the current motion of the root bone forwards to that time
and you also sample the animations at that time
and then you know
so I may be here in the middle of the cycle
my foot in the air
but I look ahead
I say, when's the next footfall?
it goes, well, it's at this time
so I go, okay, the animation at that time
is in this state
I move my hips forward to that time
and then I go, right, that's where the footprint is
so I'm here and I can
forward predict
and then
I have this
what on earth is that?
oh, I know what the key does
don't do that
always keep your debug keys useful names
oh, there we go, there we go, right
so I have this
landscape that is curiously popping
but
oh, yes, yes, there's some
some teapots
that great bit of coder art
so there's this
so there's a variety of landscape waveforms
and there's a random one
and a flat one
and some sine waves
and some steps up and down
so I'll do the steps up and down
because that's kind of easy
so anyway, yes
sample the landscape height at that
and just move the predicted one up
to the right foot
and then the IK is obviously going to do some seeking
which I'll get on to
so strafes and turns are special
you don't predict
when I said you predict the motion to the
to the next foot fall
as the foot just goes down
in fact
strafes and turns you predict to the next
mid-step
so it's quarter of a cycle on
and you do this because
when you're strafing or turning
what you want is that
when you're doing the action
by the time you get to mid-step
that foot should be straight
and directly under your body
otherwise you're going to fall over
or if it's not straight you get extra torsion
which is just uncomfortable
so people tend to plant their foot
so that by mid-stride
the foot is straight ahead
and directly under the body
or it'll be slightly offset
because you're doing this walk thing
but anyway, so that'll be the natural pose
so if I'm walking in a circle
I will look ahead
I will pre-turn my foot
so that by the time I get there
and ditto with a strafe
I'll step further out
so you do further prediction ahead
so you can see a rear view
as I strafe
the footprints move quite a bit
the predicted ones
and you can see her stepping out
if I slow down time
so you can see
the instant the foot touches down
she's actually now wider
now if you turn this down
so that
sorry, so that at mid-stride
it's actually under her body
I'll find a key
there we go
so if I turn this off
and she just predicts to the
to the next footfall
so you can see that
as she plants it
it's underneath her body
the problem is
that at mid-stride
it's like
oh, it's holding her up
she's leaning over weirdly
so yeah, that's a subtlety
and you can see if I
come up to normal speed
it kind of looks sort of odd
she's just like
permanently off to one side
whereas that looks much more balanced and natural
so there's this problem with
discontinuities
as I
as I, the pathological user
discontinuously change my
user inputs
so the predicted footstep
at least moves
smoothly
there's never any
abrupt move
but a smooth change in x, y
x, z
can change the predicted height because
somewhat foolishly
I have chosen to have a discontinuous height field
but I thought hey
that's a pathological case
I can get this right
anything will work
so I damp the predicted foot
sorry
I should damp the predicted footstep height
to prevent this pop
I actually don't
now the interesting thing is I only notice
this very occasionally
even on this sort of landscape
which you think hey look
it's got tons of little steps and stuff
but
it actually doesn't happen that often
for example in a completely straight walk
you can see
although the steps up and stuff
the predicted footprints are never actually
moving
because
I'm not applying user input
so I apply user input
and you can sometimes see that
the
one of these two footprints ahead
is sort of popping up or down
it has very little effect
so that's a subtlety
so you might want to damp that
or you might just want to go
yeah whatever
it's fine
the problem with damping is of course
it might mean that you put your foot down
and actually
it's interpenetrating the landscape
so there's that annoying trade-off
the other cute thing is that
it's not very fussy about
I mean I've moved the height
so that it follows the landscape
but you could move the x, z as well
I mean there's
according to the strafe and stuff
but you could do it in other ways
so you see that they're about to step on
like someone's head
which is kind of unfriendly
so you just move it to the side
and that's fine
so little adjustments
or they're about to step on
actually step on like a coke can or something
and you go well no
in real life you'd just
you'd like
just move your foot slightly to avoid it
so maybe we can get a bit more realism this way
to just avoid small things
probably the biggest one is
is if you
if you've got someone sidling along a wall
so they're right
they're very close to the wall
and the game design says
hey they've really got to be able to get their shoulder on the wall
but the
you know this is a big beefy bloke
or maybe a cowboy or something
so he's got this big wide stride
so when he's up against the wall
the right foot actually goes into the wall
or it just looks wrong
so now maybe the collision system can go
hey that foot's actually inside the wall
can we just shove it sideways a bit
or for
you know
or if it's a cliff
you don't want it hanging off the edge of the cliff
so you can tweak it in little ways like that
I put down dancing as a rather optimistic
optimistic one
dance granny dance
so the footstep position only describes one instance of time
in the entire cycle
one instance when the foot went down
the
as mentioned yesterday
there's actually two constraints on most feet
which is when the heel strikes
and when the ball of the foot strikes
and those are regarded as two separate constraints
a good thing for walking
is you can mostly do everything as a delta off
like some nominal position
you simply say
well as long as I nail the heel
then the ball of the toe is going to be pretty good
because I'm not doing any
sort of huge changes like
like sort of that
or the martial arts moves that they were doing
where you do an awful lot of rotating on the ball of the foot
so it's slightly simplified
but it's an awful lot better than most games are doing right now
so that's fine
so the IK needs to be applied to the feet at all times
rather than just when it's down
because otherwise it's going to pop on and off
and you're going to be seeking there
and just go
as soon as it goes down
so there's three distinct phases to this IK
same end logic
same complex stuff
you just feed different stuff to it
so all three phases
have the desired position and orientation of the footprint
which is usually this predicted position
or the previous footprint
they have a reference position and orientation
which is
if I did nothing
if I just played the animation a straight line
where would the foot hit?
so it's just a straight line thing
where's it going to go according to the animation?
and then there's this desire factor
of how much I want to play with the foot
so when the foot's down
that's the easy case
the foot's on the ground
you say
well
that footprint
I've got the actual position
it wants to be there
so the reference is the animation starts
when you just planted the foot
and then the desired position is the
the actual place it got to
despite where you've moved in the
in the meantime
so it's pretty simple
the nice thing about this is that
these two are
talked about at the same time
these are both that
when the foot goes down
now the fact that you're like mid-stride
as you'll see that doesn't matter
even if the animation puts some foot slip in
it still works
so that's when the foot's down
we're just taking another look at it
so if the ground
the foot is in the first half of the swing forwards
exactly the same two inputs
it's the last foot plant
for both the reference and desired
and the desire simply starts at one
as the foot comes off
and then fades to zero at mid-swing
so at zero we're doing no IK at all
so
when you're in this pose
this foot is completely unconstrained by IK
there's no
it's now in the animation neutral pose
and then as we go through the
second half of the swing
we start using the forward predicted footstep
we look forwards in the animation to see where
that would strike normally
and then the desired
starts from zero again
and fades up to one
so that at the point of impact
we should actually hit
the predicted footstep
these desire curves
just piecewise linear
kind of simple
actually work
I was expecting to have to like smooth step them
or get the artist to author these or something
but they actually work fine
so why overcomplicate it
but you could obviously do that
one thing about doing them in an art package
how do they preview them?
it doesn't mean anything
so the way you actually do the foot IK
is you've got this reference position
you've got this desired position
you find the delta from one to the other
just to transform the
linear offset and the rotation
you scale by this desire factor
and then you just apply this delta to the ankle bone
so again
this delta
that's the delta
as the foot hits
wherever you are in the cycle
that's what we're talking about
as the foot hits
it's that delta
now if you're in mid cycle
then that's why the desire factor kicks in
so here I'm unconstrained
and as I go forwards
the desire factor increases
and I seek towards
the right delta
and again during
while the foot is on the ground
if the animation says
hey I want to slip the foot
well that's fine
you say okay
I don't actually care where you want to put it
I just know it's got to be like
two centimeters to the right of where you think it should be
but what you're doing with this slip motion
that's fine
you've just got to be two centimeters to the right
and one up
because it's higher than you think
so actually applying the position delta to the ankle is easy
you move the
this is a standard
two bone IK solver
knee pop control was mentioned
this is
I don't know
if you've ever done any IK on legs
it's really obvious
as you swing forwards
this knee goes bam
and it's really bizarre
locks out
and then as it comes up
it just sort of goes
it's very strange
and it's because
as the
as you move the
ankle further and further away
as you get here
to the near extent
a tiny movement in the ankle
requires a large movement in the knee
so although the ankle is moving at a linear speed
the knee sort of accelerates
and slams against the stop of the leg
which as humans we never do
you don't want to stress the knee that much
so what we actually do is damp that
and just say
hey
the knee is not going to get
the foot is not going to get there
in the right way
now
the guys last night
what they did was actually just
they damped the motion of the knee
from frame to frame
and then they actually just lengthened the bones slightly
to make sure the ankle
went in the right direct position
I did a
much simpler version but
it's all kind of
the position deltas we're talking about are very small
in fact that's the problem
if it were larger it would be easier
so all I did was I said
in the IK solver
I said well beyond like
an angle of 170 degrees
just whatever
angle you wanted
whatever deviation you wanted from 180
just I think I divided it by four
and did a scale so it's continuous but
but what it means is that the ankle doesn't actually get to where you want it
but it's a pretty small
small error
you know as you can appreciate the difference between
170 degrees and 180 degrees is a very small movement
so that's your maximum error
and it just slows the knee down into that
to that crucial
going straight phase
works
very nicely
so you can see she's
there's no
knee pop even if you sort of slow it down
it's when she's swinging the foot forwards there
is when you get the knee pop
so
that seems to do the trick
it's kind of cheesy
the nice thing about it
there's no like smoothing or annoying
frame to frame coherency
which in general you want to avoid this as much as possible
obviously I have to have some for this
footprint prediction but
but I do as little as possible
oh and
so that's just the position applied to the ankle
and then the actual orientation
the twist is just applied to the
the main foot bone
so this was also mentioned the hip height
if
if you vacayed
a foot down
say you're stepping down onto something
well
so this foot needs to go further down
but it can't
I haven't got a longer leg
so you can easily make legs shorter
you can't make them longer
so what you need to do is you find
the
in practice you could do it in 3D
and stuff like that
you'd need to do that for a martial arts move
for walking you can just do it all based on height
and
it's not strictly correct because
a large angle is
there's
like it's not quite right
you don't see that
the effect is timing
so you just say
well
you look at the lowest foot
of the two
and then you say well that foot is
two centimeters lower than my reference pose
so I need to move the hips down by two centimeters as well
now that moves the other foot down
but it's okay it's IK'd
it'll IK back up again
so that's fine
now this does break one rule
which is as I said
the game controls where the character is
well now I've said hey
but the animation system wants to move you up and down
okay so that's a fight
put the animation coder and the gameplay guy in a room
and whoever comes out alive
it's a trade-off that needs to be made
in many games
the actual vertical height of the character is not important
in some shooters it will be
so that's just
it's one of those reality games
the gameplay trade-offs you need to make
so always at least as low as the lowest foot
this does cause bumpiness during foot swings
so if I'm stepping up to something
then obviously my right foot is the lower one
as soon as I step up
it's going to swing forwards
and it's going to be higher
so very quickly my hips are suddenly going to go boing
and then as I step
and if I
the next one is down
so like I'm just stepping over a temporary obstacle or something
so I step up and then down
the problem is
normally the motion would be fluid throughout the cycle
you'd step up and then down
problem is this transition
this foot almost immediately goes higher
and then this is the lowest foot for
like 80% of the stride
and then it almost immediately goes lower
so instead of a nice curve like that
it goes
bam
looks weird
so instead of the actual foot height
which is the virtual foot height
which is just
very simply
it's the linear interpolation between the previous footprint
and the next footprint
I have all this data
I just learnt between that
so if you temporarily step up onto something and down again
it acts as though that foot just moved in a straight line
it didn't go up or down at all
but this also looks wrong
because that means when you're stepping over an obstacle
your hips don't move at all
this foot, the previous and last positions
are the same height
I do a lerp
same height
it's always the last one
so that looks goofy as well
so I did this blend to the other foot
so you do at least get a blend up
and a blend down
that looks much better
again
these are very hand-wavy explanations
there's no hard math behind this
it just looks better
sometimes this is animation coding
this one I think I actually did do a smooth step function on
so that it was continuous
rather than piecewise linear
because you can see that
nasty
the change in
the abrupt change in speed
smooth steps just like you apply this cubic thing
so
if you notice the skirt
I'll turn the footprints off
so this fetching skirt that she's wearing
and in fact these show
shoulder straps here
though they don't move nearly as much
so this is kind of cool
and it looks like a cloth sim
and it's not
or at least it sort of is
so it's not a runtime cloth sim
you're doing 30 of these
that seems too expensive
especially if you've got all the collision stuff to do
and it's just a pain
what we wanted to do is say
look, you can have any sort of animation you want
so as well as just being a cloth sim
it could be any hand authored
or very complex system
that you want to do
certainly for like a t-shirt
you can have all the crinkles around here
and even just things like
when my arm is up
the t-shirt sort of hangs down
when my arm is down
it sort of hangs the other way
not hangs but yeah
so anyway this is just purely
the animator says
hey I've got this cool thing
and it's not representable in bones
because there'd be bazillions of them
so I want to record it as vertex animation
okay, says I
little knowing
so we record it as a vertex animation
just each frame you just capture the vertex positions
and then for each vertex
it's positioned through space
I just encode that as a spline curve
because you store the raw keyframes
that's huge
the spline curves aren't that much smaller
sorry, I mean they're a lot smaller
they're still kind of big
but we shall see a way to do that
so one of the problems is that this cloth sim
which was just the Maya standard one
which isn't that great
but it doesn't loop properly
which is the problem
it'll forward predict all day
and it'll do kind of the same thing
but it's not a perfect loop
so each animation was actually 12 cycles
or this was kind of tweakable
10 seemed to be about good
and then the next two
so from the standing start
the skirt's just sitting down there
you start walking
the skirt kind of does random stuff
because you just applied energy into the system
and it takes it
so she just keeps walking for about 10 cycles
and finally the skirt sort of calms down
to this proper swish motion
regular swish motion
without any weird movements or anything like that
so that's the settle down phase
and then the next two cycles
you kind of hope are the right thing
and practice some of them
like especially the run animation
which is very energetic
every now and again
a couple of the straps
are sort of ballistic
and you know stretch off to infinity
and come back again or something
so we'd like edit this
of which two cycles you picked
but you picked one
two cycles anyway
so to do this loop
this is a standard trick from audio processing
see this cross disciplinary stuff
very useful
so you just copy it and offset
so these are the original source data
I've just offset one
and then you just
and then I cross fade this
so that you get most of this bit
and most of this bit
and because we get most of this bit here
and this bit's the same as this bit
well obviously that transition works
because that was just part of the animation
so this now loops seamlessly
so that's a neat trick
as I said they're kind of big
every vertex has a spine curve associated with it
gets kind of heavyweight
so I only did it for the six major animations
which was the three walks
and the three runs
no leans
no accelerations
none of that
you could do them for the other ones
but you know what
the effect on the actual skirt
just kind of doing this noisy random thing
you don't notice that
it's not leaning the extra
you know three degrees over or something
and it would literally double the memory
you know six atoms to twelve
so there's this problem
blending vertex animation doesn't work
bones slurp and preserve length
when you move your leg in a circle
it actually preserves the length
the knee moves in a circle
if I encoded that as vertex animations
and had a pose here and a pose here
and did a lerp
my knee would shrink
but there's nothing else you can do with vertex animations
all you have is a bunch of positions
you have no
well I mean you could get connectivity information
but it's
it's not very
like there's a lot of it
it's just a polygon soup
and besides this is cloth
this is deforming in weird ways
good luck with that
that's what a cloth sim does
so this wouldn't probably be a problem
I mean you know
if you played back just the skirt
it'd be fine
because you know it's doing something noisy
the problem is where they meet
which is around the hips
they need to actually meet
so what you could do
is you could have
the actual vertices where they meet
boned normally
the next vertex down on these
highly tessellated strips of cloth
could be vertex animation
so that top segment would stretch like crazy
in places
and the difference is quite big
it's on the order of 10 centimeters
the difference between the slurp and the lerp
so you'd see this
and the skirt would obviously look kind of disconnected
it's really weird
and there's this other problem
when you IK the leg
so when I lift my leg
from the IK
so the original animation is down here
the skirts are lying along it
I IK the foot up
oh
it just goes straight through my leg
it's bizarre
so we don't do object space vertex animations
you get the artist to skin the skirt
just like it was like a tight miniskirt or something
so there's bone weightings on the hips
there's bone weightings on each thigh
for the relevant bits
and then he just turns the
there's a blend shape in Maya
and there's a
there's a cloth sim
and so you just turn the influence of one of them
just down to nothing
so it doesn't actually change the animation
it's just so that this post process
would use this data
so now for each of the vertices
for each of the poses
as a preprocess
I transform it back into the default pose
because I know how to get from default pose to animation
that's what I do every frame at runtime
so I just invert that matrix
move the vertex back into the default pose
so now I've got this swishing skirt
but she's in the standard da vinci pose or whatever
and it's swishing around there
so this actually makes sense now
we can
you can
you're lerping these things in the same space
and she's just like standing there
with this skirt swishing magically
but that makes sense
and better yet
if you have two bits of
two vertices
they're out here
when you do that swish
it won't interpenetrate the legs
because all the preceding ones
now you can actually get
as fine interpenetration as
like a cloth
in one frame it's around here
and in one frame it's around there
and it goes through the leg
but that's kind of rare
so that's fine
so it's just the effect of being cloth
that is preserved
the gross movement of
oh this lot sort of moves generally forwards with the leg
and the up and down motion as she jogs
that's all removed
that's the big effects
and that is preserved in the bones
so the runtime's really simple
you replay the vertex animations
into your vertex buffer
you throw it at the vertex shader
and you bone it as well
so you do all the standard boning stuff
but your position has actually come from an animation
rather than just being static
again yeah
lerps make sense here
all the animations
even when I'm blending
between a run and a walk
the vertex animations
are both recorded in this default pose
so again the lerps make sense
even though they're in world space
so that's kind of cool
and the IK just works
when the knee comes up
that bit of the skirt comes up
now it's still not obviously technically correct
because it should be sort of splitting and hanging due to gravity
but it doesn't interpenetrate
it doesn't look goofy
that's fine
there's a nice side effect
the vertex animation is simpler
if you've got a vertex that just kind of moves with the leg
that motion gets completely removed
if it's nice and flat
we use fewer knots for the curve
so it does actually come out with less memory
this is a cute trick
you can use it for a lot of fine vertex stuff
facial expressions I think would be cool
it means you can get the jaw movement as a bone
so you can lip sync with that
but then the actual expressions on the face
can be vertex done
rather than having to encode them as bones
which typically gets bigger than the vertex animation
which is kind of annoying
depending on the tessellation of your hands as well
it can be cheaper to store them as vertex animations
rather than every single little bone in the
there's like
sort of A20 or something like that
if you have not particularly well tessellated hands
then you just go
well I'll just store them in position
that's fine
and obviously cloth of all sorts
anything physically simulated
that you don't want to do at runtime
and this is kind of good
because
you've still got the gross movement in the bones
that all happens
if you have an animation
if you have vertex animation missing from one of the animations
fine, you just take it from the others
and it'll look kind of swishy
it'll look kind of clothy
it'll be fine
you'll still get the
the effect of the
second animation applied
you just won't get like
fully perfect
per vertex stuff
so this demo is still kind of a working process
things I want to add very quickly
more emotions
that was a
a good one talked about very briefly yesterday
in that it's not enough these days to just have a walk
and you go
hey look the feet are stuck brilliantly
okay but I don't care about this character
let's have some emotion so
so we've got like a
you know granny's really
you know
poised and ready to kill you
before she's like
whoa
that's a big dragon
so stuff like that
and lerping between those
obviously this demo didn't have any standing
and if you slow her down she just sort of stops
that's right
so I want to do some standing stuff
which prompts a problem
I'm standing there
and the user taps forwards
so I go okay
well I better start walking
and then
and then you go
oh user's not pressing forwards
oh they just wanted to like hop forwards
now
if you're in a sword animation like that
a hop forwards
you lead with the left
a walk forwards
you start with the right
so there's this problem of like
well
I know the user has just started pressing forwards
which is it
so I don't really know how to stop that
so that's going to be an interesting thing
my current best thought is that
you hack it
and you start the step
and if at this stage
the user hasn't taken their finger off
you go okay it's a walk
and you do this
so it's a slightly odd start to a walk
because it's like this
but hey at least it's smooth
and it's not like some sort of
and then you just sort of magically swap legs
or something crazy like that
um
standing pose transitions
no one does these right
so I'm standing around like this
sorry
I'm standing around sort of on one foot
and then I do something like
I want to kick with this foot
so what you need to do
is transition
and then kick
so that's
so what the artist really wants to do
is give you a couple of poses
like that one
or an even one
or that one
or you know your fighting ready stance
or something like that
and then you need to be able to do transitions
but the feet will always be planted differently
so you need to move at least one foot
and if you're taking this strict thing
that the game controls the centre of mass
then you can't move that
just because the animation says
hey you know I'd like to
I'd like to move one of the feet
so what you need to do is
move one foot and then the other
and it's like this
it's an automatic adjustment
that humans very easily make
but it's
it seems to be difficult to do that automatically
so I'm hoping that some sort of weight distribution
means that I can choose sensibly which foot to move
or which foot to move first at least
turning on the spot is the pathological example of this
I'm standing here
and I want to be standing here
so you've got to do this weird foot shuffling thing
and which one do you move first
and how much and stuff like that
the attacks
I catered to precisely strike the target
I was going to kind of fudge this
but the animation by example stuff
well that's how you do it properly
so I've just changed my mind on that
so yeah I might be implementing some of that
and the big thing is
with these sword things
I don't know if you've noticed
the only attack you can do is a big slash
and that's because
well they're never quite sure where the bad guy is
so as long as we do like a big slash like that
he can be anywhere and there you'll hit him
there's never like a
stab
because if you stab
and he's just slightly to the left
you missed
a little red number appears above the head
hey but I missed
what
so if you can do like the various stabs
you know
and then do this blending
smart blending
so you precisely hit them
you know for a critical attack
you actually hit them straight on the voice box
they fall down dead
and you go yes
rather than going
well you didn't actually hit him
but hey I'll take the loot anyway
it's not like the
yeah
so
that should be kind of cool
getting decapitations actually on the neck
it's taken a tricky because
it's like well they could hit you anywhere
so that's going to have to be
some sort of physics rag doll
and I might kind of just ignore that
because I don't feel like playing the physics engine
through a demo
but that's how I think you'd do that
with
in a game
looking around
you know she's just
fixedly ahead
you want
you know her to be looking around at random objects
literally random objects
sort of
godsim we did
called startopia
we just
someone just hacked in one day
as the characters were wandering around
we had this movable head
which was intended so that when you talk to them
they'd actually look at you
which is kind of nice
but someone just hacked in one day
that
as they're walking around
they pick a random object within a certain range
and they look at it
until it goes
until their neck just
can't move anymore
and then they pick another object
wow
these things were alive
as they're walking around
they just go
huh
hmm
look at that
and one of the
one of
it's just like wow
look he's a real person
he's looking around
he's looking at stuff
and one amusing thing was
the users actually interpreted this
in some cases
as like a slight obsession
so
it happens that two characters want the same thing
they both want some food
and there's only one food thing
in the entire universe
because you've forgotten to put down more
so they're both going on a long journey
over there
so they're both walking
now as he's going around looking at this stuff
one day
one of the objects he'll pick
is the other person
they're both walking the same thing
the neck never gets over torsioned
they will stare at this person
forever
this is like this horrible stalker type thing
so people love that
they'd say yeah I got this really evil guy
and he was just like following this other guy
and just staring at him
so
it's just like a
whatever
okay
we don't have a stat for like
obsessiveness
so stuff like that
just improves it
this would be with the standard
like nine head poses
and you do your lerp
and then you just
bone mask it onto the
sort of
the V of the shoulders and the neck muscles and stuff
to look around
upper and lower body anims
at the moment I just have the whole anim on the thing
just to do moves and attacks at the same time
pretty standard stuff
each attack has a
mask per bone
to say how much this attack needs that bone
so if it's just like a simple parry
my left hand
my left arm basically isn't involved
it can do whatever walking stuff it needs
if it's a big swing
it's you know you almost take over the control of the hips
and the foot IK just has to
like try and cope
and the jumping
which I hate
I mean trying to get jumps looking good
yeah
I don't know how to do that
I'll find out
noise
there's a whole bunch of noises
this is quite interesting
if you add position noise
you get this sort of doddery thing
it looks very odd
and you can tone it down
but you just get slightly less doddery
until you get no noise at all
so you never get like
oh it's kind of
they're a real person
kind of doing the right thing
you just
like they're either old or not
that's not very good
they're either old or a robot
which is
not good
so for cyclical motions you can change the phases of
the motions in each bone
so the nice thing about that is
your foot always still gets there
it's not like some random jittery thing
it's just
each time you swing it forwards
well maybe the knee comes in a bit earlier this time
or maybe it comes in late
or maybe the foot sort of does something slightly strange
because it's out of phase with the stuff
so it's still a cyclical motion
it's just kind of
it's just sort of like
slight discoordination in the movements
so that looks a bit better
doesn't work for standing still there
because there's no phase
and whenever you add noise
you'll need IK fix-ups
even if the native animation works fine
so
quick summary
walk cycle's really important
we've kind of got the stationary pose stuff
pretty good
they're not too bad
walk cycle's still terrible
terrible marks all around
apart from like two examples
which are actually
pretty impressive
we need some more people in the middle please
it's like
wow I can't break this at all
and yeah well
you're just changing your feet all over the place
the most benefit
number number one is sticking the feet down
that is the most obvious thing
when people see the feet suddenly
changing
it's just like
there goes your suspension of disbelief
you fix that, that's fine
that's easily the best one
good transitions
are nice
so again
just stop the rest of the body popping
strangely when you change
stuff
and then
the correct prediction of foot plants and stuff
copes with rough terrain and so on
it's kind of
it's kind of the icing on the cake
but it really does make it look good
oh the difference between sticking the feet down
and the correct prediction
is you might not actually be sticking them to the real terrain
you might be just like
sticking them somewhere arbitrary
but that's still better than
not sticking them
even if it's the wrong position
so again
I'll just say this again
the golden rule
the AI does not control the character
the AI must cope with whatever
character movement it's given
thank you
applause
so uh
any questions?
yes
um
alright
have you thought about
doing foot path protection
because like when you're walking up the stairs
you're getting just as bad
artifacting
yes
the foot path
yes
at the end
so the problem here is that
uh
she only ever looks
where her footprints are
at the actual footprint
right
um
find the key
there we go
so the only
the only
the only place I'm sampling the
the height field at
is the
footprint
um
so the lerp in between
means
oh there we go
she uh
she moves the foot
through the
should probably do it again there
work
yes
um
so yes
yes you could do
the problem with that
is
so what do I do about it
I know my path's going to intersect
do I just keep moving
like moving up the midpoint
because I can't move the endpoints
they've got to actually hit
so the only thing I can really move is
like
the midpoint
or the
first quarter
or the
mid quarter
and like draw a spline through it
do I just keep moving them up until
until
it doesn't hit or something
uh
like sometimes
it seems like you want
you want
the path
you have some
you have some spline
that is the end effector path
right
it's not it's not necessarily one of your joint splines
but it's like you know
it's some nonlinear function
of whatever's happening
right right
and you want to perturb that
until it doesn't collision
with that
collide
with the ground
oh sure
for us at least
it's major
yeah
right
so
I would do
in practice
I'd do two things
number one
I'd manually do stairs
right
just like
hey it's stairs
let's play the walking up stairs animation
and
it's really easy for the animator
to just make sure the foot moves vertically
and then horizontally
magic
end of problem
um
and second I wouldn't
yeah
wouldn't do this
crazy gaps like that
um you still
still do get them
in real life
uh
curbs
sidewalk curbs
um
that's probably the
the major thing
um
again
I don't know how to solve that
it's
it's very very tricky
um
hey you know
in real life
I
don't solve it terribly well
fall over a lot
but
certainly
you know
it's something that it takes us like
uh
it takes kids like
10 years to learn
is not
how to
not fall over
uh
steep steps
so um
yeah
it's a tricky problem
um
kind of related to the same thing
um
it seems like you're
turning on the IK
for the foot down
events
and blending it off
right
so that the IK is not anticipating the foot up
you're not raising the knee
in advance
you know
if the
if the next foot step
is going to be higher
you're still just kind of turning on the IK
to compensate for that
as the foot is coming down
you're not
anticipating that height change
yeah
so the
the problem is that
if my next step is
is a high one
what I should be doing is
lifting the knee at
this point
I should lift it here
and then step up
um
that
that's all to do with the
um
the three phases of this foot IK
and the fact that it only changes from the previous one
to the next one
in the midpoint
now
instead of having these two distinct phases
with
one
bottom
and
one
foot
you could have a two-way blend
between the
like the animation neutral one
and either one
you'd probably have a three-way blend in some way
um
and you'd need some heuristics to say
well
was I stepping down from something
is that the most important part of this animation
so I'm stepping down to something level
or I'm stepping from something level upwards
and
and then you've got the weird case of like
well I'm
I'm stepping up for this step
but
ne
so
um
yeah
I think you probably just changed the
the blend curves for that
um
but
I
I haven't played with that yet
that is something I'd like to get right
because the step ups and downs
still don't look great
for large step ups and downs
uh
let's go over
I had a question while we're transitioning to
I noticed
when you were doing the IK prediction
for the foot placement
and I don't know if it was during just your debug stress test
but you'd get some feet
crossing through the other legs
and I know my animators would scream and say
that wasn't in the original motion
why am I seeing that
you know
I think the only time
so did you look to avoid that at all
I think the only time that happens
is when you strafe
so
there
um
and that's basically cause
this is not a real animation
this is just the walk forwards animation
that I'm just moving the body sideways
so you can definitely
uh
instead play
the strafe animation
that
instead of just going
like
smacking one knee through the other
would like
move the foot round
um
if they wanted
but
again
that's
that's like
the
I mean
it's easy to blend in
I know how much I'm strafing
I can just blend in
it's like turns and
everything like that
but
hey guys
it's another
however many animations to do
so
that's your choice
um
yeah
uh
just curious
what are the two
good examples of walking you've seen
so one of them was this game
um
I think it was Half Life 2 or something
that was quite impressive
um
we've been swapping tails
of trying to break that
by
you know
there's a cut scene
and you know he's gonna do something
and you rush in
and you put crates in the way
and see how he responds
and they always do the right thing
I mean they don't do the like
the high level smart thing
which is just a
yeah
but they like
they either clamber up on the crates
and then still correctly pick the object up
or
or they now round them
and
it's like
it's impressively hard to break the animation system
I mean
yeah they still look goofy doing it
but they look
they look like a goofy human
rather than just like a
completely broken
uh
computer animation stuff
so so there's good stuff there
I was quite impressed
um
so about your golden rule
that uh
the animation should not be driving
the object
uh
the game object
um
so how do you author your animations
uh
to avoid foot sliding
in the case when you're not doing IK
do you make it so
do you assume that they're going to be moving at a
constant speed
and you adjust your feet that way
well I
I do what
um
so
first the designer and the animator
agree on a speed
and then the animator does an animation that
kind of gets that speed
but he doesn't have to be spot on
um
and then
when you load the animation
you actually measure
okay so I know it's one cycle long
because otherwise I'm
going to get out my
my stick
um
so I know it's a cycle long
and I know how far it moved
so
um
because you've got the
the motion of the root bone
extracted
and it says
hey this is how I'm moving
uh
you need this for complex animations anyway
so
for a walk it's just kind of
dull
but you just measure the position between the
start and end points
and you just go
okay
now I know how fast it moves
so I'm just saying
hey
if the character's walking
Mr. Game
this is kind of how fast it's moving
is that okay with you
the game probably says
yeah yeah that's fine
or it like throws it
throws up an assert saying
dude this guy walks really fast
or just
break the game
what about for a cycle
of an animation that moves
very regularly
like a limp
thing that you know
for most of the cycle
you're not advancing
and then you move forward a bunch
well any
any cyclic thing is fine
because
I just measure the start and end
um
and
for those
uh
granny
the
um
the animation package we have
is uh
has a variety of ways
of extracting this motion
um
and one of them is
this
uh
thing where the root bone
is
linearized
so it assumes it just moves linear
and then
the difference between that
and the real motion
is encoded actually
just into the animation
so
um
so if the game just moves
the object forward at a
steady pace
that's fine
and then
the object
might offset itself a bit
because of the limp
so
um
so all the delta
is in the information
is in the animation
as far as the game's concerned
hey this guy's just moving
straight forwards
in some cases
that's not a good idea
because
his collision volume
is moving
steadily
whereas it is
um
the real one isn't
and in that case
the game then goes
okay
so it's a
it's really
like a mantling thing
or getting into a car
or something complex like that
where
you still want the bounding volume
to be right
so you can like
shoot him in the head
or whatever
um
but the game really doesn't want
to have to go
okay
so time is less than blah
so it's this position
tell me where it is
and that's fine
I now cede control of
it to you
because usually
when you're doing those
uh
the player is also given up
their control
right
they said get into the car
they don't expect to be able
to do anything
during that period
so
so that's fine
so the game
and the player
implicitly give up control
so
same with things like mantling
and commando roles
and stuff like that
it's complex animation
that's when you hand it over
to the animation system
I haven't looked at
going backwards
or even standing still yet
so
uh
yeah
yes
agreed
um
that
the
the step up and down
for the extreme cases
um
that was a perfect segue
into my question
uh
which was
uh
some of the animation stuff
last night
and you a bunch of times today
have basically mentioned like
oh well if you want a better effect there
just have the animators
do more animation
for that specific effect
or movement
which is totally valid
uh
you know
data drive
driven way of approaching it
but
that fill in process
is going to replace code
like you've got special hacked
I mean not hacked
you've got special code
to deal with
no strafe
walk
doing some IK
um
uh
have you given any thought
to like
how to data drive
the process of fill in
and put all of the fill in
in the hands of the animators
like
to know when that's there
to turn that code off
or that kind of thing
like how do you
instead of going like
oh
okay
the animators have decided
that the walk strafe
looks horrible
so we're going to have
we're going to fill all that in
um
oh
okay
I got to go comment
on a bunch of code now
so the
the way
if they say
oh that looks horrible
look let me just do one
so
all the sort of
the steady states
like walk
and run
and so on
have standardized names
and then you want to do a transition
from walk to run
you actually look for an animation
called
walk to run
you just do the string
concatenation
and
if it's there
that's cool
I'll use that
and just transition into that
if it doesn't exist
for this character
okay
I'll do my code thing
um
and so for the strafe
it'll be the same thing
you look for an animation called strafe
okay
well
I'll just move the hips
because I'm going to move the hips anyway
right
again
game's in control
it wants to move the hips
okay
so the animation says
okay
game moved the hips
have I got a strafe animation
okay
well
I'll just IK the feet
and do the prediction
and hope it works out
if it looks rubbish
well
the animators need to do a thing
but if the animation was there
cool
I'll play it
now I still need to do this prediction
and IK
but the nice thing is
if you're also playing this animation
well
the prediction's going to be pretty accurate right
I mean
otherwise the animation's rubbish
sorry
absolutely
but the thing there
is
it's the same with the walk speeds
um
the game's idea of how fast a character walks
has to match
you know
roughly
the animator's idea
of how fast the character walks
otherwise it's going to look rubbish
I mean
it's just going to look rubbish
and it doesn't matter
how good your animation system is
you've got this mismatch
right
so
but at all times
so what I'm saying is that
there's got to be this connect
between design and animation
fundamentally
the animation system
the actual code
doesn't care
it will just cope
right
now
if it's fed junk
but hey
it's going to get junk
but hey
it's going to get junk
but if
if the
two match
um
so
yes
you're right
that these two have to match up
but
they don't have to match up in code
they have to match up in
like design
and
you know
the parameters that are put in
to how the model moves
so yeah
if
if the user says
so if the game says
hey
we want to strafe at
you know
a metre a second
and the animation only strafes at
half a metre a second
well animation code doesn't care
it's still going to do the foot fix up
but
but there's not a lot you can do about that in code
and nothing
none of that is hard coded
it's all just like
this is the game design
this is the animation
they've got to
agree somehow
no
that's correct
yes
so the
um
so
come on
this
slideshifting
where are we
um
this
foot
ok
so where I have this
I have this desired position
which is obviously the
the prediction
and
the
actual orientation
so the actual orientation
is
so I actually go forwards
and
whatever animations are currently playing
I
actually
do
this
so
I
if
playing, I sample them at that future time. So if there's no strafe, the foot will just
go straight forwards. If there's a strafe animation playing, the foot will actually
go out to the side. Either way, I also forward predict and I say, well, the foot actually
needs to be over there. Now, if the two match, hey, that's cool. I have to do hardly any
work with the IK. If they match completely differently, which is what happens here when
she's strafed, because it really is quite different, then it just goes, okay, I'll do
my best. But yeah, if there's an animation there, it'll just go, it'll play it. And then
this coder just doesn't care because it just goes, hey, what's currently playing? Okay,
we'll look ahead and see where the foot would naturally fall. So if they agree, that's cool.
The IK doesn't have to do much work at all.
So I have a very similar kind of question that was actually inspired by a conversation
which I had last night, which is sort of at a more philosophical level.
There's a decision, definitely, as to whether you're going to use data or some kind of a
hack. So from, say, the kind of position that we were showing yesterday, walking up the
stairs is a completely different kind of thing than walking on level ground. If you've watched
you, a person do it, there's no way you'd ever say they're the same motion. You need
to record both of them.
Absolutely agree.
So the extreme point in that philosophy, you would have lots and lots of motions.
What you've sort of have been showing here is animation is so, so precious. I can get
these nine loops. I'm never going to get any more. I've got to squeeze every last little
bit out of them.
Yep.
So I guess I don't have a feel for that tradeoff. As Chris mentioned, some of the
classic arguments of, well, data takes memory footprint. Well, big code, you know, it's
really takes memory footprint. The other argument of, well, as data are expensive, smart programmers
to do this kind of stuff are expensive. So how do you see that tradeoff playing out?
You're right that it varies a lot by project and company. Something like Eco, there's two
characters. So, well, okay, there's the shadow guys as well. But there's two characters,
and they've probably got a fleet of animators. Great. They can animate absolutely everything.
There's so much more, there's more animator time than there are, like, animation time.
Vastly more. So you can do that all custom. But what seems to happen in games these days,
and increasingly, it's not a good thing, but it's just kind of inevitable, is that every
time you iterate a game, it's like, oh, this game's got 20 characters, so we need 30. And
this game's got some, like, really cool mantling animations, so we need that. Like, so there's
50% more characters, and there's 50% more animation. Okay, I'm now bottlenecked on animation.
My animators just can't do every combo. That's, like, I need to squeeze out those resources.
Obviously, that needs to stop somewhere, but, yeah, there's, but the thing about 30 characters,
it's the same code. So you do it once, and it works for one character or 30. So, yeah,
it's an absolute tradeoff.
But...
I just wanted to add that on the console projects I'm working on, memory footprint
is a huge issue. We have 20 character types, each of them very different. You can't run
a female walk on a male or a male walk on a female. It looks silly. So we have, you
know, 4,000 animations, and to define the whole animation space for all those, we just
don't have the memory. And we're even banking and streaming in styles.
With the same token, you probably also don't have the memory to have 4,000 separate code
pieces to deal with all of those things.
Well, we don't. We have a general code blending system that can handle all of them with different
parameters. But, yeah, my point is I agree that having the right example is important,
and we try to bank them up so you can stream them in. But the memory is huge, and it's
a big...
I mean, we had custom pistol rifle strafes, you know, animations that were custom for
that. We ended up having to dump those and say, oh, we only have a pistol strafe that
we play on the lower body, and then we do a single frame pose for the gun, and we IK
it for the upper body, because the memory was just incredibly huge.
That is the number one request. I mean, Granny runs on kind of everything. So the number
one request from the console guys is...
Oh, can you use less memory?
And it's like, oh, kind of, I mean, yeah, but I'll stop throwing stuff away that you
actually want. And they spend hours tweaking, like, the compression parameters to say, no,
no, no, now it looks rubbish, so just turn it down a bit, and yeah, okay, now it's fine.
They spend hours tuning the memory. Memory is a big problem on consoles, even if you're
doing the streaming and stuff like that. Streaming just, like, raises how high you can aim, kind
of thing. It doesn't make it any easier.
For a time, though.
Hang on, hang on, hang on, please.
Oh, sure, sure. Sorry.
Are you sure that's not this one? I was thinking it was this one, too.
Well, state your question, and then tell the talk.
Well, so on that philosophical topic, I think there's a pretty key thing which is missing
from that analysis, which is, like, you don't just have, I have animations, and I blend
them together, or I have some code, and, like, there's a proportional number of, you know,
bits of code to the number of animations. What actually happens when a programmer sits
down, or sometimes an animator, if they're making, like, a complicated rig or something
like this, is they're actually, like, orthogonalizing the parts that make up the animation, so,
like, I'm taking a thing like looking left, and I'm using some, like, knowledge about
how that works to make it so that I can generate looking left for any situation that may occur,
right? And it may not be perfect, but it's gonna do something reasonably good, no matter
what the situation is. Now, with animation, the problem is everything is captured together,
and if you're just gonna do blending, there's no way to separate out what is the part of
the motion that you cared about and what is not. So, I mean, really, the thing is, yeah,
if you could do something like, say, the synthesis by example stuff that you have, there has
been work in the past which goes like, okay, you know what, we've got these examples, and
we're gonna try and, like, extract out part X so that when we blend together, we don't
need to have, like, the total, like, exponential explosion of getting all the corners of all
the different boundary cases of this plus this, and this happens at the same time as
this, which would be prohibitive to store, and we're just gonna try and store, like,
kind of these orthogonal things we can combine together to get to any one of those corners,
and that's fine, but that stuff really hasn't matured yet to the same level as, hey, we
just have some snippets and we blend them, and we're always staying within some of the
convex blend of these things, or very close to it, so everything's okay. So, really, I
mean, that's, like, the missing piece. Like, yeah, we're gonna do something like that,
we'd love to always use animation, but the truth is that when you actually get down to
doing that, you kind of have this problem of no one really has the really solid component-based
separation and recomposition thing that you need there. And we're getting closer, but
it, you know, it's not there yet.
Well, and, and the slightly odd thing is that frequently some of these animations
that are generated, that, that we get from animators, they are actually completely procedural.
They've, they've rigged up this incredible complex rig in Max or Maya so that, you know,
that, like, the, certainly the looks, when I was watching the animator do them, so he
has an object, and he does the whole, like, head and neck and eye rig and stuff, so he
can move, he can just move this object around, and the person, the character is looking exactly
at the thing. Then, he exports 27 animations. And I do the blending. And you go, wait a
minute, there's this, you've got this rig. I mean, he's not adding any, like, well, he's
adding artistic stuff, but it's in code, essentially. It's, it's, it's, it's all procedural
stuff. Then we sample it, and then I try and reconstruct the signal. That seems kind of
crazy.
Right, but that...
We need a converter. The problem is, the two systems are so totally different. I
mean, the rigging systems used in Maya are just, just, like, real hotchpotch of whatever
people happen to like. And you want to duplicate that in code? Hey, good luck.
This was, I, I had another point about another section of it, but just to reply to
it.
Yeah.
I wanted to talk about that really quick, because this, part of what we were talking
about last night was, like, the procedural synthesis version versus the sampling thing.
But, I mean, in the, in the long run, they are, he's able to accentuate that with style.
Absolutely.
Whereas, the straight-ahead code one can't.
Right.
So, like, you want to, there, there's, the style aspects are what we want to preserve.
Oh, you actually want to be able to do that.
Right.
There's no doubt about that.
Right. So, you need to make sure. So, but I, what I was going to say, I was going to
kind of plug tomorrow's, although it's the next two-day conference, but some of you are
going to be here for, tomorrow's got a bunch of postmortems, and one of the ones that I,
that I helped someone rehearse with, Andrew Wilmot from The Sims 2, was talking, and this
answers the earlier question about the, or speaks to the earlier question about the trade-off.
Basically, they were never in danger of missing art lock. Like, the animators and the artists
and stuff were always ahead of code and design. And so, when that, when that trade-off gets
calculated, it's like, actually, just, it does scale to throw another ten artists on
the project, whereas it doesn't scale to throw another ten programmers on the project.
That is true, that, that adding more animators, you actually get more animation.
Right.
That's true.
And that, you know, the mythical man month is for coders. It works a lot better for artists.
And if you're a big company that can just throw animators at it, yep. So, it, yes, it
totally depends on the project and the company. So, yep.
Do we have any?
Yes.
I don't have an answer for this. You probably don't have an answer for
either. I'm just curious if you want to comment on it. You talked about making the walk look
good, and all of these challenges. And I know, with the average first person shooter,
the character goes 25 blocks or runs at 25 miles an hour. And if you, so you labor it laboriously
and then the game designers see it and they're like, well, the guy's moving so slow it drives
you crazy. If they set this standard that is ridiculous, in the end, the result is you've
just got to make everybody skate. And in certain games, they'll live with real time, but that's
just been a frustration for me on a lot of projects.
Yep. And I'm sure most animators, animation coders and animators down the years
have gone, 25 miles an hour? Are you crazy? But, hey, wasn't it like 40 miles an hour
in one of the Quake games or something? It's just like...
You ran it 95 miles an hour.
Really?
Yes.
Okay. So...
You never stopped at one place.
Oh, yes. That's right. Yeah. 90 miles an hour to Nort. It's like, wow, I love those
trainers. Can I get, like, buy lots of them and sell them?
Yeah.
And stick them on my car?
So I guess the question is, given that goal, what you're trying to achieve, do you
have any strategies or thoughts on how you reconcile that, the game design decision with
making it look good?
The short answer is no, I have no ideas. If the game demands that the player run at
these huge speeds, yeah, you've just got to, like, make the animation look kind of cool.
Yeah. Whether any sort of IK or anything can do anything useful at all, or whether the
IK is just going to permanently be out there and out there, and they're just going to look
stupid. Yeah. That is tricky. Yes?
Have you done any experimentation with retargeting the animation, I guess, to do the
skill to get the character?
Well, Granny just kind of does that. So, hey, yes?
So you can take the animation and you define it as a grand skill and then run it
against something with a different number of bones or different moments?
Absolutely. Yeah.
And how do you use that? How does that work?
It's just a name matching. So there's two ways. There's simply, like, oh, I'm a
character, I've got this walk cycle, and now I want to play it on this angel, and he's
got a bunch of wings. So, obviously, well, I've got this animation, it doesn't say
anything about the wings, or vice versa. I actually animated the wings, but now I'm
playing it on a human.
So that's just, that's easy, obviously. You just throw away bones. Different numbers
of bones, you have to do, you have to supply the original skeleton, the new skeleton, then
there's a mapping. Now, it's pretty good. It's not as good as the retargeting you do
in, like, animation packages, because they solve all sorts of constraints and stuff.
But we're talking about, this is basically a memory compression technique, right? Otherwise,
you'd do it offline and just generate all the combos.
Right, so I don't try and solve that, because the art packages have some pretty heavyweight
offline solvers to do all that. So if you want it perfect, you just bloat out and export
all the combos.
But, yeah, you can, you know, normally you can do some runtime stuff that's very cheap.
Do you do some rescaling also? Because it's not enough.
Oh, yeah, yeah.
It's not enough just to do the name matching, because the feed would be in the floor.
No, no, no. So the name matching is only done for, like, bits that are there or not.
The actual, yeah, you do rescaling and stuff. So you can play adult animations on children
and stuff. It still looks like a small adult walking, but that's better than, like, oh,
I've just doubled my animation.
I've just doubled my animation budget, because you put children in the game.
Ted.
Casey.
Yes, Mr. Casey.
With the retargeting thing, the deal is basically that if you don't have the rest of the stuff
that Tom talked about in this slide going on, then it's usually, like, a complete disaster.
Because if you're, like, talking about someone who's even, like, you know, a foot taller
or something like this, then what happens is the feet will skate pretty badly, because,
you know, even though you're going to scale the gross displacement of the guy, you're
still going to have these problems of, like, the actual knee bends and all that stuff are
not going to line up properly.
But if you are willing to do the IK again to, like, fix up the feet, that takes care
of a fair amount of it.
So usually what you end up with is just situations where other things where your system isn't
doing IK fix-up already to keep something planted during blending, like, i.e., oh, I
was, like, bending down to pick up this box, and it's, say, yay big.
Then you end up with these problems of, like, well, his arms are longer, so they actually
close further into the object than I was thinking, and so on.
But, again, like, you know, assuming that you can add those parts to your games because
you want to pick up different sized boxes or whatever, then you start to fix those automatically.
So that's typically the way the retargeting works.
I mean, there's always problems, like, if I'm, like, a man and I've got an animation
where I do that, if you now retarget me to a woman that's the same size, so she's got
the same length arms, but her shoulders are just closer together.
So instead of doing that, you now that.
It's just like, well, this.
The joints and everything are doing the right thing, and the joints are the right length
and stuff like that, but you just forward, and it's just like, what are you gonna do?
The woman's shoulders are narrower, but her arms are the same length, so it's gonna, yeah.
So there's always problems like this.
But, hey, for runtime, it's kind of fine.
If you want to do this properly, you do it offline.
There was some work a few years ago about retargeting physical simulation, like how,
you know, how things move differently when you've got longer bones or heavier or more
mass and stuff like that, and I assume the style-based guys are looking at, like, how
you retarget and kind of add, you know, remap the style aspects of the things, too.
But I was interested, actually, a question for Jeff, because you were saying basically
you can't reuse that many animations.
I assume mostly because of style-based things, like it's got to walk like a girl or a guy
or whatever.
So, like, what kinds, what percentage of your animations can you retarget versus you just
have to have new animations because the artists demand it?
We end up, because there's so many stylized, everything's caricatured a little bit, there's
a lot of stylized stuff, so the only things that get reused are really generic walks,
idols, but even idols become really explosive because you have the stylized idols for females
and different kinds of females and old ladies and things, so, yeah.
But that's where streaming comes in.
You go, oh, I know I only have these in, I'm going to stream, I have my little generic
bank that it plays until the stream is ready, and then we switch off.
Do you do practically none?
Practically none, yeah.
Some.
Luckily, we haven't had to deal with children, so, dogs and cats.
Dragons.
Yeah, dogs are going to be fun, aren't they, because they're going to be all different
sizes.
Yeah.
Wow.
Any other questions?
Don't do a pet simulator.
Oh, we've got one here.
I was just going to ask, there seems to be, the main method in which you blend influences
on the final outcome, the final motion is a linear blend.
Yes.
The problem we were talking about a little while ago with the stairs and so on and so
forth, have you thought of using any kind of obstacle avoidance, fuzzy kind of obstacle
avoidance, flocking type influences for nearby obstacles?
Is that something that could be built in or maybe done by a client programmer using a
system?
Well, first you've got to find the obstacles, right?
So, that's usually pretty expensive in most games.
But assuming you did that, yeah, I'm not sure how you'd do that because all of a sudden
you're actually pathfinding the foot around, and it's a 3D problem.
I mean, the vertical one is kind of constrained because you don't want to move it too abruptly,
but that seems kind of tough considering we're still having trouble getting guys to walk
from one end of the room without, you know, walking through stuff.
So, yeah, I guess you could do.
It seems heavier weight than you would expect.
Yeah.
It seems heavier weight than anyone needs at the moment.
But, yeah, kind of interesting.
The thing is with this is it's only on one of your foot spots that the target goes to
the other.
It's not a case of you have to go .
It's just that little clock the foot goes to.
I noticed that even with the lateness of the position of the foot on the other side of
the wall.
Yeah.
On the upstairs.
It didn't seem to me to be a great problem except the fact that the foot was then going
through the step.
Right.
And that, I was thinking, just totally, really, very, very localized to that.
Well, you can totally just draw a spline through the three points, either end point, which
are fixed, and this midpoint, and you just sort of kind of move the end point up and
down.
And here it's like, well, the only thing I can do is move it up.
So, yep, still colliding, still colliding.
Oh, hey, look.
There it is.
Although, there's probably an explicit way to do that, as well.
You know, I'm sure.
Quadratic spline and make sure it avoids this point.
So, there's probably an explicit expression for that.
But yeah, yeah.
And that would just drop right in to the blend weights.
So, yeah.
Yeah.
A general thing in this is I've got a whole bunch of points.
whole bunch of like linear blends in this and in general linear blends in animation are rubbish
because they're they're discontinuous in the tangents in the gradients and in a lot of places
you can see them so you have a smooth step function which you can just like it's the magic
hey make c1 continuous although not that great because it you know if you've got a continuous
thing like that it sort of wiggles weirdly but at least it's c1 and that removes a lot of artifacts
um what i tried to do is not put any smooth steps in until it looked bad so i think i have one smooth
step in in there um and then the rest look fine which is kind of interesting because i expected
there to be more problems and it's just one function it's really easy but i i just wanted
to avoid putting it in uh and see how much i could get away with uh and and it is nice that that i
think i was at one or two uh compared to the like tens of ones i do anyway it was uh it was pretty
good
you
, just to go back to the retargeting for one second to offer a different data point to jeff's
um we just finished shipping halo and we have male and female marine characters in our game
we found we're able to retarget about 98 percent of that animation and no one notices because they
are military characters laden down with gear then the subtlety of those motions are lost unless you
have something like an idle animation but um it is possible to use retargeting in practice for
characters and even when you're looking at them up close obviously on a console you really need
to get in there and you need to get in there and you need to get in there and you need to get in
there and you need to get in there and you need to get in there and you need to get in there and you need to get in there
as much as that uh it's basically compression technique right so
yeah you you you put uh take a skinny hooker and put on the the big fat guy animation and it works
i mean as you said the feet placement's perfect uh it looks very bizarre any other questions why
don't we oh one more trial
another quick data point on the same kind of issue uh which is what we use in our games for
is an artist interaction layer for plugging in animations,
which allows them to retarget or share animations
or make more blend points as they deem needed.
So we have things like walk and run,
and by default the run is just a sped up walk,
and for characters where that looks fine,
it's good because it reduces the memory use.
The animators, if they want to make more data points
for a walk 45 degrees, things like that,
they can go in and create those extra animations.
Same thing with sharing, you know,
if you put animations from a male to a female,
by default they could just use all the animations
and then they go and plug in the ones
where they think it looks bad.
Is there like a mapping file
that says you use this animation as your map
and then you can fill it in in the script
or something like that?
Yeah, exactly.
Previous projects I've used just the simple naming scheme
like I mentioned.
If there's no thing called walk to run,
then it just goes, okay, I'll do it up.
Obviously as the combination space gets kind of big,
your file names get kind of big,
and the naming scheme,
the naming scheme's rubbish
and animators seem to be unable to spell,
which doesn't help.
Like the number of ways of spelling,
like I can't remember what it was.
We had like four different,
in this whole string thing it goes,
okay, well I didn't find that.
Let's look for this, which is the different spelling.
And it's just, I don't know, some, yeah, anyway.
So that's always fun, but.
Okay.
Probably pluggable stuff would obviously
be slightly more robust.
I think we'll take a break now
and get ready for the next talk.
Thank you very much, Tom.
And we'll try to start up again 11.15 or so.
Thank you, sir.
You all good?
I realize that we're behind schedule a little bit.
Continue listening and achieve fluency faster with podcasts and the latest language learning research.