640 likes | 797 Views
CSCE 552 Spring 2010. Animation. By Jijun Tang. Announcements. Homework #3 due Mar 19 th Group based A model to be used in your own game Second demo Very Early April A demo is needed. Animation Overview. Fundamental Concepts Animation Storage Playing Animations Blending Animations
E N D
CSCE 552 Spring 2010 Animation By Jijun Tang
Announcements • Homework #3 due Mar 19th • Group based • A model to be used in your own game • Second demo • Very Early April • A demo is needed
Animation Overview • Fundamental Concepts • Animation Storage • Playing Animations • Blending Animations • Motion Extraction • Mesh Deformation • Inverse Kinematics • Attachments & Collision Detection • Conclusions
Different types of animation • Particle effects (fire, smoke, etc) • Procedural / Physics • “Hard” object animation (door, robot) • “Soft” object animation (tree swaying in the wind, flag flapping the wind) • Character animation
Quaternions • Quaternions are an interesting mathematical concept with a deep relationship with the foundations of algebra and number theory • Invented by W.R.Hamilton in 1843 • In practice, they are most useful to use as a means of representing orientations • A quaternion has 4 components
Keyframes • Motion is usually smooth • Only store every nth frame (key frames) • Interpolate between keyframes • Linear Interpolate • Inbetweening or “tweening” • Different anims require different rates • Sleeping = low, running = high • Choose rate carefully
The Bézier Curve • (1-t)3F1+3t(1-t)2T1+3t2(1-t)T2+t3F2 T2 t=1.0 T1 F2 t=0.25 F1 t=0.0
Animation Blending • The animation blending system allows a model to play more than one animation sequence at a time, while seamlessly blending the sequences • Used to create sophisticated, life-like behavior • Walking and smiling • Running and shooting
Blending Animations • The Lerp • Quaternion Blending Methods • Multi-way Blending • Bone Masks • The Masked Lerp • Hierarchical Blending
The Lerp • Foundation of all blending • “Lerp”=Linear interpolation • Blends A, B together by a scalar weight • lerp (A, B, i) = iA + (1-i)B • i is blend weight and usually goes from 0 to 1 • Translation, scale, shear lerp are obvious • Componentwise lerp • Rotations are trickier – normalized quaternions is usually the best method.
Quaternion Blending • Normalizing lerp (nlerp) • Lerp each component • Normalize (can often be approximated) • Follows shortest path • Not constant velocity • Multi-way-lerp is easy to do • Very simple and fast • Many others: • Spherical lerp (slerp) • Log-quaternion lerp (exp map)
Spherical lerp (slerp) • Usual textbook method • Follows shortest path • Constant velocity • Multi-way-lerp is not obvious • Moderate cost
Log-quaternion lerp (exp map) • Rather obscure method • Does not follow shortest path • Constant velocity • Multi-way-lerp is easy to do • Expensive
Which is the Best • No perfect solution! • Each missing one of the features • All look identical for small interpolations • This is the 99% case • Blending very different animations looks bad whichever method you use • Multi-way lerping is important • So use cheapest - nlerp
Multi-way Blending • Can use nested lerps • lerp (lerp (A, B, i), C, j) • But n-1 weights - counterintuitive • Order-dependent • Weighted sum associates nicely • (iA + jB + kC + …) / (i + j + k + … ) • But no i value can result in 100% A • More complex methods • Less predictable and intuitive • Can be expensive
Bone Masks • Some animations only affect some bones • Wave animation only affects arm • Walk affects legs strongly, arms weakly • Arms swing unless waving or holding something • Bone mask stores weight for each bone • Multiplied by animation’s overall weight • Each bone has a different effective weight • Each bone must be blended separately • Bone weights are usually static • Overall weight changes as character changes animations
The Masked Lerp • Two-way lerp using weights from a mask • Each bone can be lerped differently • Mask value of 1 means bone is 100% A • Mask value of 0 means bone is 100% B • Solves weighted-sum problem • (no weight can give 100% A) • No simple multi-way equivalent • Just a single bone mask, but two animations
Hierarchical Blending • Combines all styles of blending • A tree or directed graph of nodes • Each leaf is an animation • Each node is a style of blend • Blends results of child nodes • Construct programmatically at load time • Evaluate with identical code each frame • Avoids object-specific blending code • Nodes with weights of zero not evaluated
Triangles • Fundamental primitive of pipelines • Everything else constructed from them • (except lines and point sprites) • Three points define a plane • Triangle plane is mapped with data • Textures • Colors • “Rasterized” to find pixels to draw
Vertices • A vertex is a point in space • Plus other attribute data • Colors • Surface normal • Texture coordinates • Whatever data shader programs need • Triangles use three vertices • Vertices shared between adjacent triangles
Textures • Array of texels • Same as pixel, but for a texture • Nominally R,G,B,A but can mean anything • 1D, 2D, 3D and “cube map” arrays • 2D is by far the most common • Basically just a 2D image bitmap • Often square and power-of-2 in size • Cube map - six 2D arrays makes hollow cube • Approximates a hollow sphere of texels • For environmental
High-Level Organization • Gameplay and Rendering • Render Objects • Render Instances • Meshes • Skeletons • Volume Partitioning
Gameplay and Rendering • Rendering speed varies according to scene • Some scenes more complex than others • Typically 15-60 frames per second • Gameplay is constant speed • Camera view should not change game • In multiplayer, each person has a different view, but there is only one shared game • 1 update per second (RTS) to thousands (FPS) • Keep the two as separate as possible!
Render Objects • Description of renderable object type • Mesh data (triangles, vertices) • Material data (shaders, textures, etc) • Skeleton (+rig) for animation • Shared by multiple instances
Render Instances • A single entity in a world • References a render object • Decides what the object looks like • Position and orientation • Lighting state • Animation state
Meshes • Triangles • Vertices • Single material • “Atomic unit of rendering” • Not quite atomic, depending on hardware • Single object may have multiple meshes • Each with different shaders, textures, etc • Level-Of-Distance (LOD)
LOD • Objects have different mesh for different distance from the player • The mesh should be simpler if object is faraway • Many games have LOD, for example, Microsoft Train Simulator
Volume Partitioning • Cannot draw entire world every frame • Lots of objects – far too slow • Need to decide quickly what is visible • Partition world into areas • Decide which areas are visible • Draw things in each visible area • Many ways of partitioning the world
Volume Partitioning - Portals • Nodes joined by portals • Usually a polygon, but can be any shape • See if any portal of node is visible • If so, draw geometry in node • See if portals to other nodes are visible • Check only against visible portal shape • Common to use screen bounding boxes • Recurse to other nodes
Volume Partitioning – Portals Node View frustum Portal Visible Test first two portals Invisible Not tested ? ? Eye
Volume Partitioning – Portals Node Portal Visible Both visible Invisible Not tested Eye
Volume Partitioning – Portals Node Portal Visible Mark node visible, test all portals going from node Invisible Not tested ? ? Eye
Volume Partitioning – Portals Node Portal Visible One portal visible, one invisible Invisible Not tested Eye
Volume Partitioning – Portals Node Portal ? Visible Mark node as visible, other node not visited at all. Check all portals in visible node Invisible ? ? Not tested Eye
Volume Partitioning – Portals Node Portal Visible One visible, two invisible Invisible Not tested Eye
Volume Partitioning – Portals Node Portal ? Visible Mark node as visible, check new node’s portals Invisible Not tested Eye
Volume Partitioning – Portals Node Portal Visible One portal invisible. No more visible nodes or portals to check. Render scene. Invisible Not tested Eye
Volume Partitioning – Portals • Portals are simple and fast • Low memory footprint • Automatic generation is difficult, and generally need to be placed by hand • Hard to find which node a point is in, and must constantly track movement of objects through portals • Best at indoor scenes, outside generates too many portals to be efficient
Volume Partitioning – BSP • Binary space partition tree • Tree of nodes • Each node has plane that splits it in two child nodes, one on each side of plane • Some leaves marked as “solid” • Others filled with renderable geometry
Volume Partitioning – BSP • Finding which node a point is in is fast • Start at top node • Test which side of the plane the point is on • Move to that child node • Stop when leaf node hit • Visibility determination is similar to portals • Portals implied from BSP planes • Automated BSP generation is common • Generates far more nodes than portals • Higher memory requirements
Volume Partitioning: Quadtree • Quadtree (2D) and octree (3D) • Quadtrees described here • Extension to 3D octree is obvious • Each node is square • Usually power-of-two in size • Has four child nodes or leaves • Each is a quarter of size of parent