Skinning and Animation Skelett Keyframe animation BSpline Quaternioner Kinematics Animation Blending Skinning Skinning på GPU:n
Skelett Hierarkiskt Kan närmast liknas vid en trädstruktur Ben och leder (bågar och noder) Rotationer och transformationer relativa förälder
Skelett Varje nod innehåller Namn Id Förälders id Translation relativ förälder Rotation relativ förälder Ofta identitet i grundposition Alla barns id Rotnod Känd i globala koordinatsystemet Kan också innehålla information om maximal rotation för varje led samt olika vikter (tröghet att röra sig)
Svårigheter Svårt producera realistiska rörelser, särskilt om det är ett människoskelett Vi är så bekanta med människans rörelser att även ett otränat öga kan urskilja orealistiska rörelser Människokroppen är oerhört komplex med över 200 frihetsgrader och 600 muskler Finns ingen väldefinierad beskrivning för människorörelser Finns ingen specifik rörelse som representerar en människorörelse, ingen människa rör sig likadant som en annan
Animering av Skelett Keyframe animation : Gör av en animerare i en Animerings mjukvara (tex. Maya) eller Motion Capture Inverse kinematics : Var hamnar lederna om man ska sträcka sig efter något. Physics :Låta klasisk fysik påverka karaktären (ramlar död från en byggnad)
Keyframe animation Key Frame Rotation av ett ben vid en viss tidpunkt Track Flera key frames för ett ben vid olika tidpunkter Ben id Key frame 1 Tid Rotation Key frame n En animering består av tracks för alla ben som den influerar Behöver ej nödvändigtvis ej ha tracks för alla ben i ett skelett ( Keyframe + IK)
Animerings mjukvara
Motion Capture Fånga rörelsen av ett riktigt objekt och överföra den på en datorgenererad modell Kan användas för att spela in en persons rörelser Utvalda kroppsdelars transformation spelas in och lagras med tidstämpel i ett givet format Denna data kan sedan överföras på ett skeletts korresponderade delar för att producera datorgenererade rörelser
Motion Capture
BSpline Linjär interpolation mellan Keyframes i en animation kan se hakigt ut. Kurva med kontinuerliga andra derivator löser denna lilla artifakt Där OBS detta andväns i många.
Bas polynomens grafer
p0 p1 p2 p3 P = 4 i = 1 wi * pi
Bas polynomen i en spline
Varianter på Splines Catmull-Rom Splines interpolerar exakt varge keyframe. En variant av Hermite splines:
Quaternioner William Rowan Hamilton (1805-1865) 4D vektor (w, x, y, z) En utökad variant på komplexa tal x+iy -> w+xi+yj+zk där i^2 = j^2 = k^2 = ijk = -1
Quaternioner Givet en rotations axel v och en vinkel rotation a är quaternionen q = (cos(a), sin(a) v )
Quaternioner Ortogonalitet Många små inkrimentiella rotationer av en rotations matris => numreriska fel => matrisen inte blir ortogonal=>konstigt! Interpolation mellan olika rotationer på ett snabbare sätt än att multiplicera med en rotations matris Plats effektivare 4 <-> 9 skalärer Snabbt och enkelt konverterade till en rotations matris
Rotations Interpolation SLERP: spherical linear interpolation Interpolation av kortaste sträkan mellan 2 punkter på en sfär Givet 2 quaternioner q0, q1 och en interpolations parameter t=[0,1] så är den interpolerade quaternionen sin( α (1 t)) sin( α t) q( t) = q0 + q1 sin( α ) sin( α )
Konverteringar Konverteringar quaternion -> matris 1-2qy 2-2qz 2qx qy + 2qz qw 2qx qz - 2qy qw 2 2qx qy - 2qz qw 1-2qx 2-2qz 2qy qz + 2qx qw 2 2qx qz + 2qy qw 2qy qz - 2qx qw 1-2qx 2-2qy 2 Konverteringar rotation -> quaternion q = ( cos( 0.5 α ), sin( 0.5 α ) v, sin( 0.5 α ) v, sin( 0.5 α ) v ) x y z
Användning Använda quaternioner vid positionering av skelettet Konvertera varje bens quaternion till rotationsmatris efter positionering Varje ben ska transformera flera vertexar, vilket matriser gör effektivare än quaternioner Rotmatris: 9 multiplikationer, 6 adderingar Quat: 32 multiplikationer, 24 adderingar
Kinematics Forward kinematics Sätta rotationer mellan lederna för att få fram lövnodens (hand/fot mm.) position Inverse kinematics Motsatsen till Forward kinematics Position/rotation av lövnod känd, vad blir vinklarna mellan alla benen Ett robotik problem De flesta algoritmer för hur problemet ska lösas kommer från robotiken
Inverse kinematics Ett optimeringsproblem
Inverse kinematics Iterativ lösnings gång
CCD för IK lösning CCD: Cyclic-Coordinate Descent Itterativ algoritm som passar bra för realtid Börga med sista leden, rikta den mot målet, samma procedur med nästa osv.
CCD fort. Viktigt att ha bra restriktioner för vilka vinklar en led kan anta. Förhindrar att figuren hamnar i en position som är fysiskt omöjlig. restriktioner måste nästan alltid anges i Eulervinklar (vinklar i enherssfären). Vikter för varje nod CCD:n tenderar att favorisera senare leder i kedjan för att undvika detta införs vikter, som talar om hur delaktiga varje led ska vara i lösningen. (ovanstående information lagras i per ben)
Animation Blending Olika delar på spel karaktären gör olika saker Det är önskvärt att animera karaktärens rörelse samtidigt som man vill att IK ska placera foten bra i tex en uppförsbacke. Att kunna blanda flera animationer springa och gå => jogga Att dö och låta gradvis fysikens lagar ta över karaktären?!
Animation Blending i MechWarrior engine Mechen är sammasatt av 152 animationer Mech karaktären kan spela upp 15 samtidiga animationer Mech karaktären påverkas också av IK samt fysik
Animation Blending Föregående påstående kräver någon slags animation Blending system:
Skinning För att geometrierna ska följa med figuren när den rör sig, måste de på något sätt vertexerna vara knutna till skelettet Varge Vertex punkt knyts till ett ben => meshen kommer att deformeras effter skeletet Neg: i varge led kommer defekter att Ge varje vertex möjlighet att påverkas av två eller flera ben Övergången mellan benen blir mjukare och geometrierna ser mer naturliga ut Den här processen kallas vanligen för skinning eller vertex blending
Skinning
Skinning De nya vertex positionerna bestämms av Där: n v = w M v w = 1 n v w i M i i i i med är antalet matriser. är vertex positionerna. är vikterna. är transformations matrisen för ben i. i i
Skinning De nya vertex positionerna bestämms av Där: n v = w R v w = 1 n v w i R i i i i med är antalet matriser. är vertex positionerna. är vikterna. är Rotation matrisen för ben i. (delmäng av M) i i
GPU arkitektur Vertex shader Pixel shader Lite repetition
Skinning på grafikkortet Travarsera skeletet och ta fram quadrioner till samtliga ben Gör om dessa till rotations matriser och ladda upp den till Vertex shader konstant registrerna Transformera sedan vetexes beroende på vilka ben som de påverkas av, enligt: n v = w M v med w = 1 i i i i i
Skinning på grafikkortet Begränsat antal konstant register => ibland nödvändigt att splitta upp meshen Det går åt 3 st float4 register för att lagra en transformations matris (rot + trans) Vertex attribut (16 float4 attribut per vertex): Vertex position Vertex vikt (upp till 4) Index till konstant matris för transformationen (upp till 4) Normal behandla vertexar som påverkas av samma antal ben samtidigt
Nvidia G80 new Mitt Nya Antal M Trans 301 681 Minnes bandbredd 38.4 GB/s 86.4 GB/s Minnes Bitbredd 256 Bit 384 Bit Shader core Clock 430 1350 Gigaflops 165 510 Integer och Bit-instruktioner No Yes Gratis bilinjear Interpolation 16 Bit 32 Bit Aritmetiknivå Vector Skalär
NVIDIA CUDA CUDA-enabled GPUs support the Parallel Data Cache and Thread Execution Manager for high performance computing Standard C programming language enabled on a GPU Standard numerical libraries for FFT and BLAS Dedicated CUDA driver for computing Optimized upload and download path from the CPU to CUDA-enabled GPU CUDA driver interoperates with graphics drivers Supports Linux and Windows XP operating systems Scales from high performance professional graphics solutions to mobile and embedded GPUs
END