Skinning. Ännu fler koordinatsystem att hålla reda på. SUPPLEMENT 2 till "So How Can We Make Them Scream?" 1. Olika metoder för kroppsanimation

Relevanta dokument
Skinning and Animation

Spelutveckling 3d-grafik och modellering. Grunder för 3d-grafik Blender Animering

Försättsblad till skriftlig tentamen vid Linköpings Universitet

C-Uppsats i Datavetenskap. Skinning på GPUn. Med dubbel kvaternioner. Författare: Björn Overå Handledare: Martin Blomberg Termin: VT12 Kurskod: 2DV40E

Robotarm och algebra

Tentamen TNM061, 3D-grafik och animering för MT2. Tisdag 3/ kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43. Inga hjälpmedel

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Vektorgeometri för gymnasister

5 Linjär algebra. 5.1 Addition av matriser 5 LINJÄR ALGEBRA

FFM234, Klassisk fysik och vektorfält - Föreläsningsanteckningar

Vi har väl alla stått på en matta på golvet och sedan hastigt försökt förflytta

Spelutveckling - Scenegrafer. Scenegrafer Optimeringar Culling

Inledning. Kapitel Bakgrund. 1.2 Syfte

Ansiktsigenkänning med MATLAB

Mer om analytisk geometri

Basbyte (variabelbyte)

International Olympiad in Informatics July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor

Vectorer, spannet av vektorer, lösningsmängd av ett ekvationssystem.

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

MMA132: Laboration 2 Matriser i MATLAB

1. Inledning, som visar att man inte skall tro på allt man ser. Betrakta denna följd av tal, där varje tal är dubbelt så stort som närmast föregående

MULTIPLIKATION AV MATRISER, BASER I RUMMET SAMT FÖRSTA MÖTET MED MATRISINVERSER = = =

Information Coding / Computer Graphics, ISY, LiTH. Bump mapping!

Vektorgeometri för gymnasister

LYCKA TILL! kl 8 13

Vektorgeometri för gymnasister

Lösning till tentamensskrivning i Diskret Matematik för CINTE, CL2 och Media 1, SF1610 och 5B1118, onsdagen den 17 augusti 2011, kl

TANA17 Matematiska beräkningar med Matlab

Logging Module into the PRIME Core

Determinanter, egenvectorer, egenvärden.

Omtentamen. TNM077 3D-datorgrafik och animering kl 8-12 Inga hjälpmedel. (samt även TNM008 3D-datorgrafik och VR)

LINJÄRA AVBILDNINGAR

Manual för ett litet FEM-program i Matlab

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Np MaB vt Låt k = 0 och rita upp de båda linjerna. Bestäm skärningspunkten mellan linjerna.

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer

1 Duala problem vid linjär optimering

Det ska endast finnas två bilder av samma typ på spelplanen.

Fingerprint Matching

Självkoll: Ser du att de två uttrycken är ekvivalenta?

1 Minkostnadsflödesproblem i nätverk

DERIVATA. = lim. x n 2 h h n. 2

Kurvor och ytor. Gustav Taxén

Bildmosaik. Bilddatabaser, TNM025. Anna Flisberg Linne a Mellblom. linme882. Linko pings Universitet

1. (Dugga 1.1) (a) Bestäm v (3v 2u) om v = . (1p) and u =

Riktlinjer och mallar för betygskriterier inom grundutbildningen i biologi (beslutat av BIG: s styrelse den 13 juni 2007)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Procedurella Grottor TNM084. Sammanfattning. Alexander Steen

MATEMATIK GU. LLMA60 MATEMATIK FÖR LÄRARE, GYMNASIET Analys, ht Block 5, översikt

Explorativ övning 7 KOMPLEXA TAL

Lutande torn och kluriga konster!

Sidor i boken f(x) = a x 2 +b x+c

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

RTG-formatet Gustav Taxén,

Sitter och klurar på jordtag; Hur skulle en matematisk uppställning av ett jordtag se ut med homogen mark?

Tisdag v. 2. Speglingar, translationer och skalningar

e 3 e 2 e 1 Kapitel 3 Vektorer i planet och i rummet precis ett sätt skrivas v = x 1 e 1 + x 2 e 2

Transformationer. Translation. Skalning. Homogena koordinater. Rotation. 2D-grafik. x y. Inom datorgrafik är transformationer den. Många. bevaras.

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Modul 1: Komplexa tal och Polynomekvationer

Teknik för avancerade datorspel!

Gausselimination fungerar alltid, till skillnad från mer speciella metoder.

Linjär Algebra, Föreläsning 2

Diagonalisering och linjära system ODE med konstanta koe cienter.

Faktorisering med hjälp av kvantberäkningar. Lars Engebretsen

Omtentamen TNM077, 3D datorgrafik och animering (samt även TNM008, 3D datorgrafik och VR)

Läsanvisningar till kapitel 4 i Naturlig matematik

PROCEDUELL TERRÄNG. Proceduella metoder för bilder (TNM084) Jimmy Liikala Institutionen för teknik och naturvetenskap

Robotar i NXc. En laboration med Mindstormrobotar. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Programmeringsolympiaden 2008 Kvalificering

1 som går genom punkten (1, 3) och är parallell med vektorn.

SKRIVNING I VEKTORGEOMETRI

Procedurell renderingsmotor i Javascript och HTML5

Optimering med bivillkor

Geometriska transformationer

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Omtentamen i DV & TDV

Optimering av olika slag används inom så vitt skilda områden som produktionsplanering,

a = a a a a a a ± ± ± ±500

inte följa någon enkel eller fiffig princip, vad man nu skulle mena med det. All right, men

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TAIU07 Matematiska beräkningar med Matlab

x 1 x 2 x 3 x 4 mera allmänt, om A är en (m n)-matris, då ger matrismultiplikationen en avbildning T A : R n R m.

Concept Selection Chaper 7

Linjära avbildningar. Definition 1 En avbildning mellan två vektorrum, F : V U, kallas linjär om. EX. Speglingar, rotationer, projektioner i R 3.

Repetition av matematik inför kurs i statistik 1-10 p.

SKRIVNING I VEKTORGEOMETRI Delkurs

c d Z = och W = b a d c för några reella tal a, b, c och d. Vi har att a + c (b + d) b + d a + c ac bd ( ad bc)

1 Positivt definita och positivt semidefinita matriser

Möbiustransformationer.

Tentamen i Grundläggande programmering STS, åk 1 fredag

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Om plana och planära grafer


Teknik för avancerade datorspel!

NMCC Sigma 8. Täby Friskola 8 Spets

Avalanche Studios. OpenGL. Vår teknik. Våra spel. Lite inspiration... Stora, öppna spelvärldar. Sandbox-gameplay. Hög audiovisuell standard

5C1106 mekanik för Mikroelektronik Projektarbete WHIPLASH. Oscar Frick Pavel Delgado-Goroun

Transkript:

Skinning Ännu fler koordinatsystem att hålla reda på SUPPLEMENT 2 till "So How Can We Make Them Scream?" Såhär under kursens gång har jag hittat en lucka till i materialet, nämligen att skinning inte är komplett och väl beskrivet. När jag skrev boken kom skinning-delen in mycket sent och blev ett hastverk baserat på Johans föreläsningsanteckningar, och allt jag ville haft med hanns inte med. Därför behövs detta supplement. 1. Olika metoder för kroppsanimation Det klassiska sättet att animera en människokropp eller liknande är hierarkisk modellering, där varje kroppsdel är en separat stelkropp. Kroppen organiseras hierarkiskt, typiskt med någon punkt på ryggraden som rot, och animeringarna beskrivs med transformationer från varje nod till de underliggande. Detta kallas för parenting [3]. För robotar och insekter är detta utmärkt, men för däggdjur och annat med mjuk hud är det förfärligt dåligt. Därför tog man snart steget till skinning. Skinning är ett knepigt ämne att läsa om, eftersom det är så spretigt i terminologin. Enligt Lewis [1] är grundalgoritmen för skinning aldrig publicerad. Därför finns det ingen given huvudreferens och vi får olika namn beroende på källorna. Lewis kallar metoden Skeleton-Subspace Deformation. Ett annat namn är enveloping. Jag väljer att använda det vanligare skinning, som bl.a. används av Maya [2]. Om du har andra åsikter än jag om vad saker borde heta så är jag öppen för förslag, men jag försöker välja termer som både känns rätt och jag upplever är populära. Att skinning har stökig bakgrund kan också förklara varför litteraturen ofta hanterar begreppet mycket styvmoderligt. Flera av de starkaste böckerna i ämnet ger inkompletta eller luddiga beskrivningar. Ändå är metoden allmänt känd. Det finns säkert böcker med bra beskrivningar, men de är inte så lätta att hitta som man skulle tro. Den enklaste formen av skinning kallas stitching. [4] I stitching binds varje vertex till ett enda ben. FIGURE 1. Stitching - varje vertex följer ett ben Olika metoder för kroppsanimation 1

Stitching är förvånansvärt bra i många fall, när rotationsleder och vertexar passar bra för metoden, med relativt få vertexar och relativt små rotationer. Det räcker dock bara till en viss gräns, och med dagens allt större detaljnivå är det ofta en otillräcklig metod. Lösningen är att låta mer än ett ben påverka vertexar som är i närheten av leder. Varje vertex har därmed ett antal vikter, vars summa är 1, varav varje vikt refererar till ett ben. Antalet ben som påverkar en viss vertex är oftast upp tilll 4. Även detta är inte en perfekt metod. Den har flera svagheter, som beskrivs av Lewis [1]. Därför behövs mer avancerade skinningmetoder, som till exempel att använda flera modeller som man tonar mellan, eller lägga till villkor som ger volymbevarande. Den enklaste lösningen är nog att använda flera ben i varje led. Det har naturligtvis ingen fysiologisk motsvarighet, men det har sällan animationsskelett över huvud taget. Är ni intresserade av skinning så kan det vara intressant att utforska någon mer avancerad metod. 2. Koordinatsystem och transformationer Det mest grundläggande problemet i skinning är hur man finner en vertex modifierade läge när benen flyttas. Detta viktiga och inte helt triviala problem är mycket ofta ignorerat i texter om skinning (tyvärr inklusive skinningkaptilet i So How Can We Make Them Scream ). Detta är därför det problem som jag känner är allra viktigast att reda ut. Alla vertex ges i en enda polyedermodell (mesh) i ett viloläge för vilket vi också känner alla benens lägen. Detta är modellkoordinater, från vilket rotbenets transformation till världen kan föra oss till världskoordinater. Varje ben definierar ett eget koordinatsystem. Dessa koordinatsystem ligger längre till höger än modellkoordinater i transformationskedjan (som den beskrivs i PFNP). Därför anser vi att transformationerna bör ges från dessa koordinater strävande mot modellkoordinater (och därifrån vidare till världskoordinater, vykoordinater etc). Låt oss för enkelhetens skull ta ett exempel, där vi har en rotnod följd av två ben: T ben2 R ben2 modellkoordinater T ben1 R ben1 Viloläge FIGURE 2. Exempelmodell, rotnod (grå) plus två ben (ljusgrå, svart) i sitt viloläge. Benens vilolägen definieras av var sin transformation, M ben = T ben2 R ben2. 2 Koordinatsystem och transformationer

T ben2 R ben2 v m T ben1 R ben1 FIGURE 3. En vertex v m (vit cirkel) angiven i modellkoordinater. Om vi har en vertex v m definierad i modellkoordinater, och vill ha den i koordinatsystemet för ett ben så måste vi multiplicera transformationerna för samtliga ben mellan roten och benet. Eftersom dessa transformationer är givna åt andra hållet så är det inverserna av dessa vi behöver. v ben2 = M -1 ben2 M-1 ben1 v m v m v ben1 v ben2 T -1 ben1 R -1 ben1 T -1 ben2 R -1 ben2 FIGURE 4. Denna vertex transformeras mellan de olika koordinatsystemen. Om en vertex v å andra sidan är definierad i benlokala koordinater så kan vi transformera det till modellkoordinater med: v m = M ben1 M ben2 v ben2 När vi animerar skelettet så modifieras transformationerna, så det defineras av de justerade transformationerna M ben1 och M ben2. För att gå från en vertex v m i modellkoordinater till dess justerade position v m, också i modellkoordinater, blir därmed hela transformationen v m = M ben1 M ben2 M -1 ben2 M-1 ben1 v m Koordinatsystem och transformationer 3

Ersätt ben1/ben2 med längre sekvenser efter behov. Så hela processen blir: Transformera till benets lokala koordinatsystem med inverserna av bentransformationerna för viloläget. Transformera tillbaka till modellkoordinater med transformationerna för ändrat läge. Så precis som i bump mapping (och många andra situationer) så är det viktigaste att hålla bra koll på vilket koordinatsystem man är i, så blir problemet plötsligt lätt. Ofta framgår denna process bara i koden till skinning-demos, medan artiklar kring det inte diskuterar hela transformationskedjan. Till och med i labben är denna process mer antydd än explicit. Beräkningsordningen har betydelse. Multiplikationen av matriserna görs per ben, och benets resulterande matris multipliceras sedan per vertex. En möjlig optimering är att utföra inverstransformerna i förväg, så att alla vertexar finns i benlokala koordinater. [4] För skinning på CPU är detta inget problem. Skinning på GPU är dock mer minneskänslig. 3. Viktning av vertexar Det bör nämnas att matrissekvensen M ben1 M ben2 M -1 ben2 M-1 ben1 är detsamma som matrisen R i formeln som kommer från SHCWMTS sid 133. v' = n w i R i v Vi påstod att man ignorerar translationsdelen i transformationen. Detta är tyvärr felaktigt. I en typisk animation ändras rotationerna, vilket roterar translationerna, varvid transformationerna naturligtvis måste appliceras i rätt ordning. Därför skall det stå: v' = w i M i v För exemplet ovan, antag att en vertex påverkas av ben1 och ben2. Då blir n M 1 = M ben1 M -1 ben1 4 Viktning av vertexar

M 2 = M ben1 M ben2 M -1 ben2m -1 ben1 och viktningen utförs som 4. Animationsparametrar För varje ben finns alltså en transformationsmatris M ben som definierar transformationen från benets koordinatsystem till ovanliggande nivå. Vid animation skall denna modifieras. Normalfallet för skinning är att vi påför rotationer. Vi kan skriva benets vilolägen som en rotation och en translation: Rotation av benet med R anim ger då 2 v' = w i M i v = w 1 M 1 v+ w 2 M 2 v M ben = T vila R vila M ben = R anim M ben = R anim T vila R vila För beräkningen av en vertexposition gör vi så här: Matrisen för att transformera modellkoordinater till benkoordinater är M mb = M -1 ben,i och transformationen tillbaka till modellkoordinater är och vi får för en sekvens ben indexerade med i. 5. Implementation i shader M bm = R anim,i M -1 ben,i v = M bm M m v För att implementera skinning i en shader så måste vi meddela shadern en relativt stor mängd variabla data. Såväl transformationer som vertexvikter måste levereras. Om möjligt bör dessa skickas som attribute- eller uniform-variabler, då dessa ger högre prestanda än data i texturer. Observera att man kan skicka hela arrayer av data till attribute och uniform, men minnesmängden är begränsad så vi kan inte skicka hur mycket som helst. Animationsparametrar 5

Vi är tillbaka på den här viktningsformeln: Denna formel är uttrycket vi får efter att ha multiplicerat samman alla transformationer. Hela kedjan av transformationer ovan görs per ben. Detta görs på CPU n, inte i shadern. Formeln ovan uttrycker därmed det som görs i shadern. De resulterande matriserna M i skickas som uniform-variabler. Vikterna w varierar per vertex och skickas därför som attribute. 6. Representation av rotation Ovan har jag antagit att rotationer representeras med matriser. Det kan givetvis vara lämpligt att representera animationsrotationerna (de variabla) med kvaternjoner eller rena vektorer, i syftet att interpolera dessa. Detta är dock ett annat problem, vars lösning beror på hur animationerna påförs. Det vore direkt olämpligt att blanda in den frågan här. I stället antar vi att R anim kommer från en extern källa, som till exempel kan vara konvertering från en annan representation. 7. Slutsatser Detta beskriver, i lite mer detalj, den grunläggande skinning-algoritmen. Bortom denna finns många förbättringar som vi inte tar upp här. 8. Referenser Jag har konsulterat följande källor: v' = w i M i v [1] Lewis, Cordner, Fong: Pose Space Deformation: A New Unified Approach to Shape Interpolation and Skeleton-Driven Deformation, SIGGRAPH, 2000 [2] Gould, Complete Maya Programming, Morgan Kaufmann 2003 [3] The Art Of Maya, Alias learning tools, 2005 [4] Game Programming Gems 1, Charles River Media, 2000 Tack till Johan Hedborg för diskussioner och synpunkter! n 6 Representation av rotation