1 kipa game engine seminars jonathan blow seoul, korea december 7, 2002 day 11

36
1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

Upload: shana-sims

Post on 23-Dec-2015

215 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

1

KIPA Game Engine Seminars

Jonathan Blow

Seoul, Korea

December 7, 2002

Day 11

Page 2: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

2

Character Animation

• The goal: let artists make animation, and get it into the game

• Usually animation is made in a separate tool– Maya / MAX

• Made out of hierarchical transforms• Probably we need to write an exporter

plugin and some game-engine import code– Unless we use a licensed character animation

system (like Granny)

Page 3: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

3

Goals for in-enginereproduced animation

• As much like the art package’s version of the animation as possible

• But small (low memory) and fast

Page 4: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

4

How animations are authored

• The artist sets up a bunch of keyframes for transform data– Usually separated into translation, rotation,

scale

• The art tool interpolates between these keyframes at runtime

• Maybe we should export the keyframes and interpolate them in the engine

Page 5: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

5

Why you don’t want toexport the keyframes (1)

• They can be in weird formats that require confusing code to interpolate– 3DS max TCB curves

• They can be in formats that are slow to interpolate– Euler angles

• They are not necessarily well-compressed– Keyframes get fragmented over time

– What happens when you import an animation from another package

Page 6: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

6

Why you don’t want toexport the keyframes (2)

• Artists use IK tools to help create animations

• You would have to reconstruct all this IK functionality exactly for the animation to look right– Footstep controller– Guy grabbing something from a table

Page 7: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

7

A better solution:Sample the transforms

• Don’t worry about the original keyframe data, just evaluate the transforms at some sampling interval

• Save those transforms out, interpolate them at runtime– Sample at perhaps 30Hz

Page 8: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

8

Interpolating transforms?

• We don’t want to interpolate a 4x3 matrix– It will denormalize, introduce shear

• Break it into intuitive pieces (translation, rotation, scale)– By matrix decomposition– But… which decomposition you choose

matters!• Shear easily confused with rotation

• Use the polar decomposition

Page 9: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

9

Interpolating transforms? (2)

• If samples are close together, our interpolation will not diverge much from the art tool’s– Euler vs slerp for small angles

• But those samples take a lot of memory!– Example of how much

Page 10: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

10

Want to compress those samples

• Hopefully at export time (small file size)

• How to compress?– Fourier / Wavelet compression– Curve fitting

• Performance ramifications of each method

Page 11: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

11

Compression

• Probably, curve fitting is the best choice

• Each curve stored as an array of unevenly spaced knots

• At runtime we just evaluate a simple polynomial to reconstruct values– For linear values like translation and scale– What about rotation?

Page 12: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

12

Rotation interpolation

• For interpolation between two rotations, slerp is the “right answer”

• This may be too slow– Review of slerp code

• Can we do something else

Page 13: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

13

Different kinds of rotation interpolation

• slerp

• exponential map

• lerp– lerp approximates slerp for small angles

• sin(x) = x as x -> 0

– It’s not that bad for large angles either

Page 14: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

14

Re-derivation of slerpin 2D

• Did this once before, but will do it again quickly, as an introduction to the lerp derivation

Page 15: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

15

What happens when welerp two quaternions?

• Assuming they don’t differ by more than 90 degrees– double cover!

• We can analytically quantify the distoritions in angle and length

Page 16: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

16

Using lerp as asubstitution for slerp

• Probably we have to renormalize

• Maybe we have to compensate for the angle

• Discussion of fast unit vector normalization– Newton-raphson approximation to 1/sqrt(x) in

the neighborhood near 1– Walk-through of code

Page 17: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

17

How to compensate forthe angle

• Discussion of approximating the inverse of the angular distortion

Page 18: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

18

Maybe we don’t have to compensate for the angle

• When curve-fitting, we measure our error with respect to the lerped/normalized reconstruction of a spline (not the ideal slerp solution)

• This causes us to insert more knots in the curve when we might need better angle accuracy

• So maybe there is a trade-off here, memory for runtime speed

Page 19: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

19

Fitting algorithm

• (discussion on whiteboard, including quirks)

Page 20: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

20

Data structures

• An animation structure contains:– Number of nodes, names of the nodes– Keyframe data for compressed curves– Information about how to blend in/out of

animation, when to start/stop

• Explanation of some different ways you might want to arrange things

Page 21: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

21

Data structures

• A mesh contains:– Number of nodes, names of the nodes– Vertex data– Vertex weight information

Page 22: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

22

Binding data structures

• A lot of systems work by building a table that cross-references between node names in the animations, and node names in the mesh– Animations might not be stored in the same

order node-wise– Some might have nodes that the others don’t

• This is called the “bind step”

Page 23: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

23

I don’t like the bind step

• It means that you can’t have animation playback without a mesh attached

• I want animations to be meaningful without meshes yet, i.e. I want to be able to play them back and mix them– Though there are bone length assumptions built into the

animations

• Lately I rewrote my animation system to not use a bind step

Page 24: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

24

What I do• An “animation player” class handles animation

playing• One “channel” per animation on the same figure

(so, 2 channels for upper/lower body)• The player has a string hash table that keeps track

of values, and maps each channel’s nodes to a central node array

• To animate an object, we map that object’s node names through the hash table (every frame, potentially)

Page 25: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

25

Structuring node orderby dependency

• So you can compose a bunch of relative transforms into object-space transforms in one pass– Only constraint is that any node’s parent has to

have an index less than its own

• If you mix two arrays like this, it is easy to maintain this constraint– So the player’s central animation array will be

correctly ordered

Page 26: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

26

Mixing Animations

• Sometimes you want to play back two different animations on various nodes of the body– Description of how this reduces data size and

artist time

• This will produce inappropriate results for some actions– Because the meanings of various rotations

depend on what’s higher up in the hierarchy– Example: Guy swinging a sword

Page 27: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

27

Mixing Animations

• Interpolate transforms relative to a common root between the two animations

• Put these into the relative transform slots during animation playback– Or else interpolate in object space, but that

might be inconvenient

Page 28: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

28

Brief discussion: quaternion splines

• Very hard to precompute, not cheap to evaluate either

• Though Casey says you can do a de Casteljau-like formulation, using slerp instead of lerp

• I am not sure if this is the “right answer” but it seems to work in many cases

• So if lerp is not good enough, think about using this layered slerp technique

Page 29: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

29

Mixing IK withplaying animations

• Evaluate the animations first

• Solve IK given those object-space coordinates

• Mix the IK back in as though it were an animation channel

Page 30: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

30

Putting sound effectsin animation data

• Only robust way to generate sound cues at appropriate times!

• Put tag names in the animation; these tags are later converted to sound effect names– based on material contacted, etc…

• (example of footsteps)

Page 31: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

31

Putting other auxiliary datain animations

• Example of “attack strength” in swordfighting game

• Advantage: Easy for animator to change this without programmers, easy to keep in sync with animation

• Disadvantage: Maybe animator should not be in charge of this; might be better to have a separate specification system

Page 32: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

32

Instead of IKfor aiming things…

• Blending between pre-generated animations

• (Example of aiming a gun)

• Can do an iterated search through the animation space until you find something “close enough”

Page 33: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

33

Reasons you still mightwant IK

• Example of two-handed weapon– Shows why requiring a tree hierarchy is bad

Page 34: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

34

Facial Animation

• Probably should use morph targets, not a bone system

• Each facial expression is probably a short animation (not a frozen mask)

Page 35: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

35

Code Inspection

Page 36: 1 KIPA Game Engine Seminars Jonathan Blow Seoul, Korea December 7, 2002 Day 11

36

Questions?