• Non ci sono risultati.

Animazioni nei games

N/A
N/A
Protected

Academic year: 2021

Condividi "Animazioni nei games"

Copied!
44
0
0

Testo completo

(1)

Master Game Dev 2014/2015 Game Engines

Animations

Marco Tarini

Animazioni nei games

Scripted

Un assets!

Controllo da parte degli artisti / creatori (dramatic effects!) Non interattiva Realismo…

dipende dall’artista

Poca customizzabilità

Computed / procedural

Physic engine Poco controllo

Interattiva

Realismo come prodotto collaterale del rispetto leggi fisiche

Si autoadatta

(2)

Animazioni nei games

O… miste

primary animations: scripted secondary animations: computed alive characters: scripted

dead characters: computed (ragdolls)

Tipi di animazioni scripted

1. di oggetti composti di parti rigide

animazione di trasformaz di modellazione (anche con giunti: robot, macchine…)

(3)

Tipi di animazioni scripted

2. di oggetti deformabili articolati

con scheletro interno es: esseri umani

o la maggior parte dei virtual characters!

e.g. games

“skinning”/ o “rigging”

Tipi di animazioni scripted

3. di oggetti deformabili generici

“per-vertex animations” / “blend shapes” / “morph targets”

es…

(4)

Tipi di animazioni scripted

3. di oggetti deformabili generici

“per-vertex animations” / “blend shapes” / “morph targets”

ma anche: volti

Tipi di animazioni scripted

di oggetti composti di parti rigide

anche con giunti: robot, macchine…

animazioni “cinematiche” / “forward kinematics animations”

(mutamenti delle trasformaz di modellazione)

di oggetti deformabili articolati

con scheletro interno

es: esseri umani, virtual characters, animali…

(la maggior parte dei virtual characters! e.g. games)

“skinning”/ “rigging”

di oggetti deformabili generici

es: volti, un ombrello che si apre, cose con membrane…

(5)

Tipi di animazioni scripted

di oggetti composti di parti rigide

anche con giunti: robot, macchine…

animazioni “cinematiche” / “forward kinematics animations”

(mutamenti delle trasformaz di modellazione)

di oggetti deformabili articolati

con scheletro interno

es: esseri umani, virtual characters, animali…

(la maggior parte dei virtual characters! e.g. games)

“skinning”/ “rigging”

di oggetti deformabili generici

es: volti, un ombrello che si apre, cose con membrane…

“per-vertex animations” / “blend shapes” / “morph targets”

Scene graph

TR0

TR1 TR2

TR3 TR4 TR5 TR6

posizonamento della automobile

(rispetto al mondo) posiz. della

ruota (rispetto

all’

automobile)

(6)

Scene graph… animato

(animazioni “cinematiche”)

TR0

TR1

TR3 TR4 TR5 TR6

posizonamento della automobile

(rispetto al mondo) posiz. della

ruota (rispetto

all’

automobile)

Tempo: t0 t1 t2 t3 t4

Trasformaz: TR0 TR1 TR2 TR3 TR4

Cinematica diretta Cinematica inversa

Tipici task della robotica

Forward kinematics:

«da angoli (e lunghezze) a (x,y)»

banale!

soluz univoca VS

Inverse kinematics:

«da (x,y) (e lunghezze), a angoli»

non banale!

soluzioni multiple

(task: scegliere quella “migliore”)

(7)

Animazioni cinematiche:

come

modo 1:

scripting

modo 2:

editing is software di animaz.

cinema 4D, blender, 3D max, … (possono usare I.K.)

esportare animaz

come sequenza di keyframes Files: collada, fbx, …

asset:

lo script

asset:

l’animaz

Tempo: t0 t1 t2 t3 t4

Arco A: TR0 TR1 TR2 TR3 TR4

Arco B: TR0 TR1 TR2 TR3 TR4

DEMO!

Interpolazione di keyframes

(concetto generico) Keyframes

+

inerpolazione

keyframe A keyframe B

0.5 ∙ keyframe A + 0.5 ∙ keyframe B

(8)

Interpolazione di keyframes

(concetto generico)

Modellatore / animatore decide:

set di keyframes con tempi associati

La maggior parte frames effettivi:

interpolazioni

fra

keyframes

risparmio di workload dell’artista risparmio di storage

nota: distribuzione keyframes adattiva

più keyframes dove necessario

“timeline”

key-frames

Interpolazione di keyframes

(caso animazioni cimematiche)

tempo 100

tempo 200 tempo 150

?

keyframe A

keyframe B

T

1

T

2

T

i

= ?

frame interpolato

*necessita (buona)

*

(9)

Tipi di animazioni scripted

di oggetti composti di parti rigide

anche con giunti: robot, macchine…

animazioni “cinematiche” / “forward kinematics animations”

(mutamenti delle trasformaz di modellazione)

di oggetti deformabili articolati

con scheletro interno

es: esseri umani, virtual characters, animali…

(la maggior parte dei virtual characters! e.g. games)

“skinning”/ “rigging”

di oggetti deformabili generici

es: volti, un ombrello che si apre, cose con membrane…

“per-vertex animations” / “blend shapes” / “morph targets”

Animaz. oggetti deformabili:

Blend shapes

A.K.A:

Blend shapes

Per-vertex animations Face morphs

Shape keys Morph targets

(10)

Blend shapes: concept

Amimaz 2D (vecchia scuola):

sequenza di sprites Animaz 3D:

sequenza di mesh?

Walk cycle (Monkey Island

LucasArt 1991)

Come rappresento una mesh?

(quali strutture dati)

Modo

indexed:

Geometria: array di vertici

in ogni vertice, posizione e attributi Attributi:

coi vertici

(e.g. campi della classe “vertice”)

Connettività:

Array di triangoli Per ogni triangolo:

tripletta di indicia vertice

(11)

Blend shapes

(struttura dati)

connettività (es: indexed)

Tri:

Wedge 1:

Wedge 2:

Wedge 3:

T1 V4 V1 V2

T2 V4 V2 V5

T3 V5 V2 V3

Vert: Pos

V1 (x,y,z) V2 (x,y,z) V3 (x,y,z) V4 (x,y,z) V5 (x,y,z) geometria:

UV Col

(u,v) (r,g,b) (u,v) (r,g,b) (u,v) (r,g,b) (u,v) (r,g,b) (u,v) (r,g,b)

attributi:

V2

V3

V5 V4

V1

T1 T2

T3

Blend shapes

(struttura dati)

connettività (es: indexed)

Tri:

Wedge 1:

Wedge 2:

Wedge 3:

T1 V4 V1 V2

T2 V4 V2 V5

T3 V5 V2 V3

Vert:

Base Shape

Shape 1

Shape

2

V1 (x,y,z) (x,y,z) (x,y,z)

V2 (x,y,z) (x,y,z) (x,y,z)

V3 (x,y,z) (x,y,z) (x,y,z)

V4 (x,y,z) (x,y,z) (x,y,z)

V5 (x,y,z) (x,y,z) (x,y,z)

geometrie:

UV Col

(u,v) (r,g,b) (u,v) (r,g,b) (u,v) (r,g,b) (u,v) (r,g,b) (u,v) (r,g,b)

attributi:

V2

V3

V5 V4

V1

T1 T2

T3

V2

V3 V5

V4 V1

T1

T2 T3

V2 V3

V5 V4

V1

T1 T2

T3

(12)

Blend shapes

Una mesh con geometria ripetuta varie volte Cioé sequenza di mesh (‘shape’) con

connettività: condivisa attributi: condivisi

(eccetto normali / direz tangenti) geometria: ripetuta x ogni ‘shape’

(etessiture: condivise)

Varianti (equivalenti):

Modorelativo:

base shape: memorizzato esplicitamente

ogni altro shape: come differenza (x,y,z) con base shape Modoassoluto:

ogni shape memorizzato indipendentemente

o‘morph’

o (key)-‘frame’

o‘shape-key’

Blend shapes

(struttura dati)

Mesh indexed:

class Vertex { vec3 pos;

rgb color;

vec3 normal;

};

class Face{

int vertexIndex[3];

};

class Mesh{

vector<Vertex> vert; /* geom + attr */

vector<Face> tris; /* connettivita’ */

};

(13)

Blend shapes

(struttura dati)

Mesh indexed:

class Vertex {

vec3 pos [ N_SHAPES ] ; rgb color;

vec3 normal [ N_SHAPES ] ; };

class Face{

int vertexIndex[3];

};

class Mesh{

vector<Vertex> vert; /* geom + attr */

vector<Face> tris; /* connettivita’ */

};

Blend-shapes:

file formats più diffusi

Semplici:

.MD5(“quake”, valve)

o, sequenza di mesh separate (es .OBJ) occhio! connettività coerente?

(vertex ordering, face ordering, wedge ordering)

Complessi:

.DAE (Collada) .FBX (Autodesk)

(14)

Interpolazione fra 2 shapes

Geometria interpolata:

Assoluto:

shapeAwA+ shapeB wB

Relativo:

shapebase+ shapeA wA+ shapeBwB

con: 0 ≤ w

A

≤ 0 0 ≤ w

B

≤ 1

wA

+ w

B

= 1

Interpolazione fra shapes

shape A shape B

(15)

Usi delle Blend shapes

Sequenze temporali

shapes = keyframes

Usi delle Blend shapes

Sequenze temporali

blends = keyframes

(16)

Usi delle Blend shapes:

sequenze temporali

Blend shape per animaz

shapeA – tempo tA shapeB – tempo tB shapeC – tempo tC shapeD – tempo tD

attimo attuale: t con t

B

< t < t

C

inperpolare fra le shape: … con pesi : …

shapeB

e

shapeC wB wC

1

wB

Usi delle Blend shapes:

sequenze temporali

Blend shape per animaz

shapeA – tempo tA shapeB – tempo tB shapeC – tempo tC shapeD – tempo tD

attimo attuale: t con t

B

< t < t

C

inperpolare fra le shape: … con pesi : …

shapeB

e

shapeC

wB wC

(17)

Transition functions

Concetto generale nelle animaz

Non solo Linear

1 1

linear

Usi delle Blend shapes

Animazioni facciali

(forse l’uso più comune)

Spesso congiunta con animaz skeletali (mandibola, collo, rotaz bulbi oculari)

(18)

Interpolazione fra più shapes

Geometria interpolata:

Assoluto:

shapeAwA+ shapeB wB+ shapeCwC + …

Relativo:

shapebase+ shapeA wA+ shapeBwB + shapeCwC + …

con:

0 ≤ w

A,B,C, …

≤ 1

wA

+ w

B

+ w

C

+ … = 1

o anche no (estrapolazione).

Utile per…

o anche no (solo in relativo) Utile per…

(19)
(20)

Blend shapes per animazione facciale: workflow

Modellatore 3D fa:

il set di blend-keys

Animatore (delle espressioni) decide:

i pesi

tipicamente: attraverso slider aiutato / sostituito da software

lip sync

espressioni dinamiche e.g. in games

Blending dei keys: in tempo reale

[VIDEO]

Come si ottengono

Manuale per

animazione blend-shape di volti:

“Stop Staring”

(3d edition) Jason Osipa Stile,

espressione…

Non tecnico (alto livello)

No strumenti specifici e.g. Blender, Maya

(21)

Usi delle Blend shapes

Configurazioni di oggetti deformabili Pose «precotte»

Usi delle Blend shapes

Varianti di uno stesso oggetto

(miscelabili!)

outfit maschile outfit femminile

(22)

Usi delle Blend shapes

Varianti di uno stesso oggetto

(miscelabili!)

umano orco goblin nano

Usi delle Blend shapes

Definire morfologia di una classe di oggetti

definire una forma = specificare i pesi modellazione 3D “ad alto livello”

i pesi “spannano” uno spazio delle forme una forma = un punto dello spazio

pesi = coordinate

uno spazio è tanto più utile quanto più : tutte e sole le forme “ragionevoli”

sono punti dello spazio

Es: (ricorrente): morfologie facciali

“face-space”

nota: morfologia facciale ≠ espressione facciale

(23)

Usi delle Blend shapes

Una blend shape per un face space (“face-morphs”)

[DEMO]

Cosa una blend shape non fa

Cambi di connettività

es di risoluzione, remeshing

Cambi topologici

rottura, separazione, fusione di pezzi

Cambi di attributi

(es mutamenti di colore…)

Cambi di textures

usare invece una texture animation, maybe?

(24)

Blend shapes:

come si ottengono

Manualmente:

1. Editare la base shape

compreso:

uv-mapping, texturing, etc.

2. Ri-editare la base shape x ogni shape-key!

…ma preservando:

connettività, textures, etc

low poly editing subdivision surfaces parametric surfaces…

scupting: difficilmente.

Blend shapes:

come si ottengono

Cattura:

aquisizione della base shape

(opz: semplificaz remeshing uv-mapping etc) cattura dei frame successivi

e.g. kinect, o scansione di ogni frame morphing dei frame successivi

“non rigid mesh alignment”

(25)

Blend shapes:

vantaggi e svangaggi

☺ Flessibili, espressive, molta libertà…

troppa?

Consumo memoria Work intensive da costruire

☺ Facili da usare una volta costruite

solo definiz pesi (e.g. sliders)

(anche se non

tanto quanto, e.g., sprites,

xchè frames riutilizzano:

connettività attributi tessiture…)

Tipi di animazioni scripted

di oggetti composti di parti rigide

anche con giunti: robot, macchine…

animazioni “cinematiche” / “forward kinematics animations”

(mutamenti delle trasformaz di modellazione)

di oggetti deformabili articolati

con scheletro interno

es: esseri umani, virtual characters, animali…

(la maggior parte dei virtual characters! e.g. games)

“skinning”/ “rigging”

di oggetti deformabili generici

es: volti, un ombrello che si apre, cose con membrane…

“per-vertex animations” / “blend shapes” / “morph targets”

(26)

Per gradi…

animazioni cinematiche

spazio mondo (globale) spazio oggetto ruota 1 spazio oggetto automobile spazio oggetto ruota 2

spazio oggetto automobile

t 0

t 1

Per gradi…

animazioni cinematiche

T0

T1

T1,1 T1,2 T1,3 T1,4

posizonamento della automobile

(rispetto al mondo) posiz. della

ruota (rispetto

all’

automobile)

spazio mondo

spazio macchina 1

spazio ota 1.1

time

t0 T1 T1,1 T1,2 T1,3 T1,4 t T1 T1,1 T1,2 T1,3 T1,4

trasformazioni

Animazione:

(27)

Un robot

animato…

T

T0

T1 T2

T4 T6

Robot (bacino) spazio mondo

busto1

gamba Sx

gamba Dx

spalla Dx

spalla Sx

polpaccio Dx busto2

T3

T7

piede Dx T8 T5

collo

bones (“ossa”) root bone

Trasf. locale del bone piede (“da piede a polpaccio”)

Quellaglobale (“da piede a robot”):

T2*T7*T8

Scheletro (o rig)

Struttura gerarchica di ossa

Osso:

Spazio vettoriale in cui sono espressi alcuni pezzi del personaggio (l’oggetto aniamato)

Es, in un unanoide: braccio, avambraccio, bacino, … (non centra il significato biologico di “osso”)

Spazio vettoriale del root bone =

= spazio oggetto (del personaggio)

Scheletro di un personaggio umanoide medio:

20-40 ossa (tipicamente)

(28)

Da assemblaggio di pezzi…

Fin qui: una mesh per ogni osso

(es, carlinga, ruota)

Ok per oggetti meccanici con strutture semplici

(macchina, braccio meccanico con 2 giunti…)

Ma, per un “robot” di ~20-40 ossa?

Mesh separate per braccia, avambraccia, falangi, falangine, falangette…

Assemblaggio con le matrici (dopo modellazione 3D)

molto scomodo.

… a skinning di mesh

Idea: mesh skinned

1 sola mesh per tutto il personaggio attributo per ogni vertice: indice di osso un modello 3D animabile!

Ortogonalità modelli / animazioni!

cioe’:

ogni modello skinned: va su tutte le animazioni ogni animazione: applicabile a tutti i modelli (basta che si riferiscano ad una stesso scheletro)

500 modelli e 500 animazioni = 1000 oggetti in RAM invece di 500x500 combinazioni

I task dell’artista digitale:

“rigging”: definizione deloscheletro(riggers) definizione delloskinningsu un modello (skinners)

“Skinning”

della mesh

(qui, ad 1 osso solo).

(29)

Posa

(frame di un’animazione scheletale) Definizione di una

trasformazione

per ogni

bone

Trasformazione locale: (delbone i)

da: spazio osso padrenella posa data a:spazio osso figlio nella posa data usate per costruire la posa

Trasformazione globale: (delbone i)

da: spazio osso i nella rest pose a:spazio osso i nella posa data

usate per memorizzare/applicare la posa

a volte, solo la componente

“rotazione”

(allora,

“ossa rigide”:

estensione costanteosso per tutte le

pose)

Da rest pose a una posa data

bacino (root) busto 1

spalla dx spalla sx R2

R4 R6

gamba gamba dx

sx

polpaccio busto 2 dx

R3 R7

piede collo Dx

R5 R8

R3 R1

bacino (root) busto 1

spalla dx spalla sx P2

P4 P6

gamba gamba dx

sx

polpaccio busto 2 dx

P3 P7

piede collo Dx

P5 P8

P3 P1

trasf. globale olpaccio, da rest pose a posa X = P2P7 (R2 R7)-1= P2P7(R7)-1(R2)-1 posa X

rest pose

(30)

Posa

(per uno scheletro dato)

struttura dati

posa= semplice array di trasformazioni globali costo in ram: n_ossax bytes_per_trasf

per 1 scheletro dato!

Osso i Trasform[ i ]

#0 (bacino, root) T[0]

#1 (spine) T[1]

#2 (chest) T[2]

#3 (shoulder sx) T[3]

#10 (polpaccio) T[10]

es: calcolato in preprocessing come:

T2T7(P7)-1(P2)-1

trasformazioni globali

trasformazioni locali (della rest pose o della posa data)

Animazione skeletale

Array 1D di keyframes (pose)

Costo RAM:

(num key-frames) x (num ossa) x ( bytes x trasf) Spesso tenuto in RAM scheda video

applicato da GPU direttamente a modelli skinned

(31)

Da robot di pezzi, a oggetti deformabili

Idea: più ossa per 1 vertice Trasformazione del vertice:

interpolazionedelle trasformazioni associate alle ossa scelte

pesiinterpolaz fissi (per quel vertice)

Strutture dati: attributi X vertice

Per ogni vertice:

[ indice osso , peso ] x Nmax

(Tipicamente, Nmax= 4 o 2, vedi dopo)

“Skinning”

della mesh

(a Nmaxossa)

Quanti link ad osso per vertice

Dipende dal game engine!

N

max

tipicamente:

1 (sottopezzi rigidi)

2 (cheap, e.g. su dispositivi mobili) 4 (top quality – standard)

Decrementare N

max

in preprocessing

(task per un game tool!)

(32)

(perchè limite superiore a num link x verice?)

Costo in performance

Nmaxtrasformazioni da interpolare in GPU (x vert) GPU = poco controllo:

interpolaz fra Nmaxtrasf (costante) bones non utilizzati: peso 0

Costo in RAM

(della scheda video) strutture dati semplici per GPU-RAM array a lungezza fissa:

Nmaxcoppie (indice , peso)

anche dove, localmente, ne basterebbero meno (pesi 0)

Rigging e skinning

Rigging

definizione dello scheletro

Skinning

definizione delle link (pesati)

(33)

Skinning - how it works (in GPU)

65

model in rest pose

a vertex (in rest pose)

1

Transform:

0 1 2 3 Bone: Weight:

bone a 0

bone b 1

bone c 2

bone d 3

dest.

pose

x vertex skinning

blend

Skinning - how it works (in GPU)

deformed model

vertex (in dest pose)

p p

n n

model in rest pose

dest.

pose

a vertex (in rest pose)

(34)

“Skinning”

(due varianti: “Linear Blend Skinning”

o “Dual Quaternion Skinning”)

+ =

rigged model

skeletal animation

animated model

Skeletal animations:

tre strutture dati

(riassunto)

Scheletro (o rig)

Tree di bones (ossa)

Ognibone => sistema di riferimento (in rest pose) (sistama dell’osso root = sistema oggetto)

Modelli 3D skinned

Mesh con associazione vertici=> bones Per vertice: [ indice osso , peso ] x Nmax

Animazioni scheletali

Sequenza di pose

Posa = trasformazione globale Ɐbone

possibile formati file (per tutti e tre i dati):

(35)

Ortogonalità

animazioni / modelli

RIG

(skeleton) Animation Walk

Animation Jump

Animation Die

Model A

Model B

Model C

Intro: skinning

(36)

Intro: skinning

Interpolazione pose

Due pose si possono interpolare!

basta interpolare le trasformazioni che le compongono

posa A posa B

0.5 ∙ posa A + 0.5 ∙ posa B

(37)

--- --- ---

---

Interpolazione pose (a runtime):

keyframes

Per comprimere animazioni

keyframe A

0.75 A + 0.25 B 0.50 A + 0.50 B 0.25 A + 0.75 B keyframe B

0.50 B + 0.50 C keyframe C

animazione

“corsa”

t = 0 t = 1 t = 2 t = 3 t = 4 t = 5 t = 6

posa memorizzata

posa interpolata (on the fly)

Compressione animazioni

Obiettivo: rimuovere keyframes

quelli “inutili”

in preprocessing (game tools!)

Versione 0.0 di un algoritmo:

per ogni keyframe rimuovi keyframe Px

computa versione interpolata Pi dai keyframe rimanenti

(il precedente e il successivo) se distanza( Pi , Px ) > ErrMax allora reinserisci keyframe Px

(38)

Interpolazione pose (a runtime):

transizioni fra animazioni

Es: da stance a corsa

keyframe A

0.75 A + 0.25 B 0.50 A + 0.50 B 0.25 A + 0.75 B keyframe B

0.67 B + 0.33 C animazione X

“stance”

t = 0 t = 1 t = 2 t = 3 t = 4 t = 5

0.33 B + 0.67 C keyframe C t = 6

t = 7

keyframe D 0.50 D + 0.50 E

0.75 E + 0.25 F 0.50 E + 0.50 F

t = 0+k t = 1+k t = 2+k t = 3+k t = 4+k t = 5+k 0.25 E + 0.75 F

keyframe F t = 6+k t = 7+k ritardo k = 3 animazione Y

“corsa”

0.80 X + 0.20 Y

keyframe E 0.60 X + 0.40 Y

0.40 X + 0.60 Y 0.20 X + 0.80 Y

Applicare le pose:

Linear Blend Skinning

Per ogni vertice della mesh:

) ( ] [

max

1

R N

i

i i

P

w T b x

x 

 

= ∑

=

x

R

x

P interpolaz. delle trasformaz.

legate dal rigging al vertice

posiz del vertice definito nella rest pose.

Skinning del vertice

(con Nmax = 4): ) , (

) , (

) , (

3 3

2 2

1 1

w b

w b

w b

computaz a bordo della scheda video (in GPU)

(39)

Applicare le pose:

Dual Quaternion Skinning

Variante in cui le trasformazioni sono isometrie

storate e interpolate come dual quaternion

in teoria, migliore qualità

(quaternioni interpolano meglio le rotazioni) costo in GPU maggiore

(operazioni necessarie per vertice ~ x3)

LBS o DQS?

scelta del game engine

poses (for each skeleton) poses (for each skeleton)

Skinned meshes (o “rigged meshes”) Skinned meshes (o “rigged meshes”) skeletons

skeletons

Assets di un modello animato:

(riassunto)

Skel Human

rest pose

(o: bind pose) (o: “T” pose)

pose 0 pose 0 pose 0 pose t20

(keyframe)

Skin 1 Skin 2

pose 0 pose 0 pose t18

(keyframe)

Skel Horse

animation 1 animation 2

“skinning”

(40)

Rigging e skinning di modelli 3D

rigginge skinningdi una mesh:

rigging: definizione di uno scheletro per quella mesh skinning: definizione associazione vertice ossa Due dei task dei modellatori digitali!

“skinners” e “riggers”

aiutati (o sostituito) da strumenti automatici

Animatori digitali

Definizione delleanimazioni(scheletali)

Strutture dati: attributi X vertice

Per ogni vertice:

[ indice osso , peso ] x Nmax

(Tipicamente, Nmax= 4 o 2)

Animazioni scheletali (scripted) : come si ottengono

Editing manuale

Animatori digitali

help da: IK, simulazioni fisiche …

Motion capture:

(41)

Inverse Kinematic (IK):

un tool utile

Cinematicadiretta:

“date le trasf locali P1, P2… PN, (es, come angoli) dove finisce il piede?”

(univoco, banale)

Cinematicainversa:

“se voglio mettere il piede nella pos p, quali

P1, P2… PN, ?”

(+ vincoli, es. DoF giunti) (non univoco, non banale)

bacino (root) busto 1

spalla dx spalla sx P2

P4 P6

gamba gamba dx

sx

polpaccio busto 2 dx

P3 P7

piede collo Dx

P5 P8

P3 P1

Inverse Kinematic (IK):

un tool utile

Due tipi di utilizzo:

in preprocessing (durante il task dell’animator) in real time (task da game engine)

Esempi di utilizzo in real time:

Posizionamento esatto piedi su terreno irregolare Mano che raggiunge esattamente

un oggetto da afferrare

Mani che si congiungono esattamente in un’arma a due mani

(es. nonostante piccole discrepanze nella forma dello scheletro)

(es. nelle trasizioni)

(42)

Third person view

spazio mondo

V

T1

= ( T1 x T2 )-1

= ( T2 )-1 x ( T1 )-1

camera T2

First person view

spazio mondo T1

busto 1

spalla dx spalla sx

P3

P8 P10

gamba gamba dx

sx

polpaccio dx busto 2

P4

P7

piede Dx collo

P9

P11 P2

P1

testa

bacino (root)

P12

spazio vista

V

T2 T2 = pos occhi

(in spazio «testa»)

(43)

busto 1

spalla dx spalla sx

P3

P8 P10

gamba gamba dx

sx polpaccio

dx busto 2

P4

P7

piede Dx collo

P9

P11 P2 P1

testa bacino

(root)

P12

Composizione di pose

( di animazioni)

+ =

lower joints

upper joints

busto 1

spalla dx spalla sx

P3

P8 P10

gamba gamba dx

sx polpaccio

dx busto 2

P4

P7

piede Dx collo

P9

P11 P2 P1

testa bacino (root)

P12 busto 1

spalla dx spalla sx

P3

P8 P10

gamba gamba dx

sx

polpaccio dx busto 2

P4

P7

piede Dx collo

P9

P11 P2 P1

testa bacino (root)

P12

busto 1

spalla dx spalla sx

P3

P8 P10

gamba gamba dx

sx polpaccio

dx busto 2

P4

P7

piede Dx collo

P9

P11 P2 P1

testa bacino

(root)

P12

Composizione di pose

( di animazioni)

+ =

lower joints

upper joints

busto 1

spalla dx spalla sx

P3

P8 P10

gamba gamba dx

sx polpaccio

dx busto 2

P4

P7

piede Dx collo

P9

P11 P2 P1

testa bacino (root)

P12 busto 1

spalla dx spalla sx

P3

P8 P10

gamba gamba dx

sx polpaccio

dx busto 2

P4

P7

piede Dx collo

P9

P11 P2 P1

testa bacino (root)

P12

P1 = 0.45 ∙ + 0.55 ∙ P1 P1

anche interpolando:

(44)

Per-vertex animation VS Rigging

Per Vertex animations

possibilità interpolazione pesante in RAM

replicazione esplicita posizioni + normali

gratis in GPU

Rigged animations

possibilità interpolazione leggero in RAM

ortogonalità

modelli / animazioni

pesante in GPU

interpolaz trasf. x vertice

in Unity (cioè Mecanim)

(note)

Assets (modelli, animazioni, scheletri) importabili in formati:

fbx, collada

Compressione animazioni

durante import o builds

riduz num link per vertice, num keyframes:

Modulo «Animator Controller» gestisce:

transizioni fra animazioni

composizione di animazioni (layers)

Inverse kinematic: da script ( Avatar.SetIKPoistion) Scheletri:

custom (importati da file) standard per umanoidi

«scheletro per bipedi di unity (di mecanim)» (~21 ossa) interfaccia semplificata

Riferimenti

Documenti correlati

In modo analogo, possiamo affermare che ogni segnale può anche essere espresso come convoluzione di se stesso per l’impulso unitario (non traslato)... Il suo segnale derivato è

unica: tutte le istanze della classe hanno valore diverso, in alternativa la proprietà è generica... modificabili le cui variazioni devono

Tutoraggio Analisi

In questo sistema di riferimento (che non è quello in cui normalmente osserviamo il vettore soluzione) nessuna componente di nessun vettore è amplificata da un operatore stabile,

• All’interno di uno studio sulla prognosi, gli effetti dei fattori prognostici e degli esiti ad essi connessi possono essere riportati nei seguenti modi:. • Percentuale

Per provare la PSPACE- hardeness, usiamo una riduzione in tempo polinomiale da FORMULA-GAME a GG. Questa riduzione converte una formula game in un grafo generalized

Tra gli elettori di una città, il 54% è donna. Alle ultime elezioni ha votato il 68% delle donne ed il 62% degli uomini. Scegliendo a caso un elettore in quella città, qual è

Figura 5.7: Collegamenti tra ordinata, trave di pavimento e montante passeggeri nella zona centrale del