Cse169 01
Cse169 01
CSE169
Computer Animation Programming Instructor: Steve Rotenberg ([email protected]) TA: Robert Thomas ([email protected]) Lecture: EBU3 2154 (MW 6:30-7:50pm) Office: ??? (MW 5:15-6:15pm) Lab: EBU3 basement Discussion: ??? Web page:
http://graphics.ucsd.edu/courses/cse169_w09/index.html
Prerequisites
Vectors (dot products, cross products) Matrices (4x4 homogeneous transformations) Polygon rendering Basic lighting (normals, Gouraud, Phong) OpenGL, Direct3D, Java3D, or equivalent C++ or Java Object oriented programming Basic physics
CSE 166: Image Processing CSE 167: Computer Graphics CSE 168: Rendering Algorithms CSE 169: Computer Animation CSE 125: Software Engineering (Game Project) Math 155B: Mathematics for Computer Graphics
Reading
Programming Projects
Skeleton Hierarchy: Load a .skel file and display a 3D pose-able skeleton Skin: Load .skin file and attach to the skeleton Animation: Load .anim file and play back a key-framed animation on the skeleton Cloth: Implement a simple cloth simulation Locomotion & Inverse Kinematics: Implement an IK algorithm and use it to achieve a walking character Rigid Bodies: Implement a simple rigid body system with collisions Choose your own project (but talk to me first)
Grading
15% Project 1 15% Project 2 15% Project 3 20% Project 4 15% Midterm 20% Final
Course Outline
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
1/5: Introduction 1/7: Skeletons 1/12: Quaternions 1/14: Skinning 1/19: (Holiday) 1/21: Facial Animation 1/26: Advanced Skinning 1/28: Channels & Keyframes 2/2: Review 2/4: Midterm
11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
2/9: Animation Blending 2/11: Inverse Kinematics 1 2/16: (Holiday) 2/18: Inverse Kinematics 2 2/23: Locomotion 2/25: Particle Systems 3/2: Cloth Simulation 3/4: Collision Detection 3/9: Rigid Body Physics 3/11: Final Review
Motion Capture
The new CAL(IT)2 building is equipped with a motion capture studio The system is capable of capturing 3D motion of a complex articulated figure (such as a human actor) It uses a Vicon motion capture system with 22 4megapixel cameras capable of capturing at 160 frames per second We have an opportunity to work with some of this equipment this quarter Please come talk to me if you are interested in learning more about this
Angel Studios
Movies:
Midnight Club 1 & 2 (PS2, XBox) Transworld Surf (PS2, XBox, GameCube) Smugglers Run 1 & 2 (PS2, XBox, GameCube) Midtown Madness 1 & 2 (PC) Savage Quest (Arcade) Test Drive Offroad: Wide Open (PS2) N64 version of Resident Evil 2 (N64) Ken Griffey Jr.s Slugfest (N64) Major League Baseball Featuring Ken Griffey Jr. (N64)
Angel Games
PixelActive
Currently, I run a company in Carlsbad called PixelActive We make video game technology including a 3D world editor capable of making complex road networks and dense urban areas (cities) We also develop a game engine for the PC, XBox360, Wii, and PS3
PixelActive
Applications
Special Effects (Movies, TV) Video Games Virtual Reality Simulation, Training, Military Medical Robotics, Animatronics Visualization Communication
Computer Animation
Kinematics Physics (a.k.a. dynamics, simulation, mechanics) Character animation Artificial intelligence Motion capture / data driven animation
Animation Process
while (not finished) {
MoveEverything(); DrawEverything();
Character Rigging
Skeleton Skin Facial Expressions Muscles Secondary motion: fat, hair, clothing
Character Animation
Keyframe Animation Motion Capture Inverse Kinematics Locomotion Procedural Animation Artificial Intelligence
Character Animation
Physics Simulation
Fluid dynamics
Articulated bodies
Fluid flow (liquids & gasses) Combustion (fire, smoke, explosions) Phase changes (melting, freezing, boiling) Cars, boats, airplanes, helicopters, motorcycles Body motion, skin & muscle, hair, clothing
Vehicle dynamics
Character dynamics
Physics Simulation
Animation Tools
Animation Production
Conceptual Design Production Design Modeling Materials & Shaders Rigging Blocking Animation Lighting Effects Rendering Post-Production
Video:
NTSC: 720 x 480 @ 30 Hz (interlaced) PAL: 720 x 576 @ 25 Hz (interlaced) 720p: 1280 x 720 @ 60 Hz 1080i: 1920 x 1080 @ 30 Hz (interlaced) 1080p: 1920 x 1080 @ 60 Hz 35mm: ~2000 x ~1500 @ 24 Hz 70mm: ~4000 x ~2000 @ 24 Hz IMAX: ~5000 x ~4000 @ 24-48 Hz
HDTV:
Film:
Note: Hz (Hertz) = frames per second (fps) Note: Video standards with an i (such as 1080i) are interlaced, while standards with a p (1080p) are progressive scan
Interlacing
Older video formats (NTSC, PAL) and some HD formats (1080i) use a technique called interlacing With this technique, the image is actually displayed twice, once showing the odd scanlines, and once showing the even scanlines (slightly offset) This is a trick for achieving higher vertical resolution at the expense of frame rate (cuts effective frame rate in half) The two different displayed images are called fields NTSC video, for example, is 720 x 480 at 30 frames per second, but is really 720 x 240 at 60 fields per second Interlacing is an important issue to consider when working with video, especially in animation as in TV effects and video games Computer monitors are generally not interlaced
Rendering
There are many ways to design a 3D renderer The two most common approaches are:
With the traditional approach, primitives (usually triangles) are rendered into the image one at a time, and complex visual effects often involve a variety of different tricks With ray-based approaches, the entire scene is stored and then rendered one pixel at a time. Ray based approaches can simulate light more accurately and offer the possibility of significant quality improvements, but with a large cost In this class, we will not be very concerned with rendering, as we will focus mainly on how objects move rather than how they look
Vector Review
Coordinate Systems
x z
Vector Arithmetic
[ b=[ b
a = ax
x
ay by
] b]
az
z
[ ab = [ a a = [ a sa = [ sa
x
a + b = a x + bx
x x
a y + by a y by az sa z
a z + bz az
z
bx ay sa y
] b ]
Vector Magnitude
v = v +v +v
2 x
2 y
2 z
A vector with length=1.0 is called a unit vector We can also normalize a vector to make it a unit vector:
v v
Dot Product
a b = ai bi a b = a x bx + a y by + a z bz a b = a b cos
Dot Product
a b = ai bi a b = a x bx + a y by + a z bz a b = a b cos a b = a b
T
a b = ax
ay
bx a z by b z
The dot product is a scalar value that tells us something about the relationship between two vectors
If a b > 0 then _ < 90 If a b < 0 then _ > 90 If a b = 0 then _ = 90 (or one or more of the vectors is degenerate (0,0,0))
u a u
A plane is described by a point p on the plane and a unit normal n. Find the distance from point x to the plane
x n p
dist = (x p ) n
n p
x x-p
a = b = 1.0 a b = cos( )
Cross Product
i a b = ax bx j ay by k az bz a z bx a x bz a x by a y bx
a b = a y bz a z by
Find the unit length normal of the triangle defined by 3D points a, b, and c c
n n= n
c c-a a b-a b
An object is at position p with a unit length heading of h. We want to rotate it so that the heading is facing some target t. Find a unit axis a and an angle _ to rotate around.
t-p
_
h (t p ) = cos (t p ) t
1
Vector Class
class Vector3 { public: Vector3() {x=0.0f; y=0.0f; z=0.0f;} Vector3(float x0,float y0,float z0) {x=x0; y=y0; z=z0;} void Set(float x0,float y0,float z0) {x=x0; y=y0; z=z0;} void Add(Vector3 &a) {x+=a.x; y+=a.y; z+=a.z;} void Add(Vector3 &a,Vector3 &b) {x=a.x+b.x; y=a.y+b.y; z=a.z+b.z;} void Subtract(Vector3 &a) {x-=a.x; y-=a.y; z-=a.z;} void Subtract(Vector3 &a,Vector3 &b) {x=a.x-b.x; y=a.y-b.y; z=a.z-b.z;} void Negate() {x=-x; y=-y; z=-z;} void Negate(Vector3 &a) {x=-a.x; y=-a.y; z=-a.z;} void Scale(float s) {x*=s; y*=s; z*=s;} void Scale(float s,Vector3 &a) {x=s*a.x; y=s*a.y; z=s*a.z;} float Dot(Vector3 &a) {return x*a.x+y*a.y+z*a.z;} void Cross(Vector3 &a,Vector3 &b) {x=a.y*b.z-a.z*b.y; y=a.z*b.x-a.x*b.z; z=a.x*b.y-a.y*b.x;} float Magnitude() {return sqrtf(x*x+y*y+z*z);} void Normalize() {Scale(1.0f/Magnitude());} float x,y,z; };