• Non ci sono risultati.

t t Animazionicinematiche Animations in games

N/A
N/A
Protected

Academic year: 2021

Condividi "t t Animazionicinematiche Animations in games"

Copied!
17
0
0

Testo completo

(1)

Animations in games

(of 3D Solid Objects)

Procedural Designed / scripted

Rigid

Articulated

Free form

Skeletal Animations

Blend-Shapes

Rigid body dynamics Pre-made

transforms

(ASSETS) (PHYSIC ENGINE)

Ragdolling Inverse kinematics

(generic) deformable object

simulation usually too expensive

Cloth/

garments

Ropes

Arrivandoci 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

(2)

Arrivandoci 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 ruota 1.1

time

t0 T1 T1,1 T1,2 T1,3 T1,4 t1 T1 T1,1 T1,2 T1,3 T1,4 t2 T1 T1,1 T1,2 T1,3 T1,4

trasformazioni

Animazione:

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

(3)

Arrivandoci per gradi:

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 oggetti articolati

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)

“animation”: definizione delle animazioni (animators)

“Skinning”

della mesh

(qui, ad 1 osso solo).

(4)

… ad oggetti

articolati deformabili

Idea: poter legare 1 vertice a più ossa 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)

Rig (o scheletro):

struttura dati 1/2

Albero di ossa Osso:

Spazio vettoriale (frame)in cui esprimere

alcuni pezzi del personaggio (l’oggetto aniamato) es, in un umanoide: braccio, avambraccio, bacino, … (il significato biologico di “osso” non c’entra!)

Spazio associato al root bone =

= spazio oggetto (del personaggio)

Scheletro di un personaggio umanoide medio:

min ~20 ossa (tipicamente) normale: ~40 ossa.

max: hundreds)

(5)

Posa:

struttura dati

Una trasformazione associata ad ogni bone i

Trasformazione locale:

(delbone i)

da: spazio osso i

a:spazio osso del padre di i

a volte, solo la componente

“rotazione”

(“ossa non estendibili”:

estensione ossa def.

nel rig, costante su tutte le pose)

Posa:

struttura dati

Una trasformazione associata ad ogni bone i

Trasformazione locale:

(delbone i)

da: spazio osso i

a:spazio osso del padre di i utili per costruire la posa

Trasformazione globale:

(delbone i)

da:spazio osso i nella posa data a:spazio osso root nella posa data

Trasformazione finale:

(per ilbone i)

da:spazio root nella rest pose

a:spazio root nella posa data (di destinaz) utili per applicare la posa alla mesh

a volte, solo la componente

“rotazione”

(“ossa non estendibili”:

estensione ossa def.

nel rig, costante su tutte le pose)

definita nel rig

(6)

Rig (o scheletro):

struttura dati 2/2

1.

Gerarchia (albero) di ossa

con un root boneon top

2.

Una posa speciale «rest pose»

i modelli 3D devono essere modellati in questa posa

detta anche «T-pose», «T-stance»,

per lo stesso motivo per il quale le magliette a maniche corte sono dette T-shirt ;)

From Rest Pose to a given pose

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. finale piede, da rest pose a posa X = P2P7 P8 (R2 R7R8)-1= P2P7P8(R8)-1(R7)-1(R2)-1 pose X

rest pose

(7)

From Rest Pose to a given pose

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

pose X rest pose

trasf. finale piede, da rest pose a posa X = P2P7 P8 (R2 R7R8)-1= P2P7P8(R8)-1(R7)-1(R2)-1 same as

Bone transforms in a pose.

E.g. for «right foot» bone:

Local Transform:

P

8

from «right foot» to «right lower leg»

Global Transform:

P

2

P

7

P

8

from «right foot» to «character»

uses the Hierarchyof the Skeleton

once its computed, Hierarchyno longer needed!

Final Transform:

P

2

P

7

P

8

R

8-1

R

7-1

R

2-1

from «character» in rest pose to «character»in dest. pose

uses the Rest Pose of the Skeleton(R1 RN)

once its computed, Rest Pose no longer needed either!

the object frame of the character, i.e. the frame of the root bone

the space wheremesh vertices are defined!

(8)

Posa (per uno scheletro dato) : struttura dati

posa= array di trasformazioni (locali) definito per 1 dato rig!

costo in ram: n_ossax bytes_per_trasf

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]

Local Transform

It includes:

a Rotation: always!

a Translation: maybe If not, use the one defined in the rest poseof the rig.

==> a pose cannot redefine bone lengths.

a Scaling: maybe If not ==> a pose cannot redef the size of the body part.

Posa (per uno scheletro dato) : struttura dati in GPU

posa= array di trasformazionifinali (per 1 dato rig! )

costo in ram: n_ossax bytes_per_trasf

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]

calcolato in preprocessing come:

R2R7(P7)-1(P2)-1

trasformazioni finali

trasformazioni locali (della rest pose o della posa data)

(9)

Skeletal Animation :

struttura dati (CPU o GPU)

Array 1D di pose

(i keyframes dell’animaz skel) Costo RAM:

(num keyframes) x (num ossa) x ( bytes x trasf) Ogni posa, un tempo dt

rispetto all’inizio dell’animaz t0 A volte, looped

e interpolaz primo keyframe con ultimo

Skinned Mesh:

struttura dati

Una Mesh provvista di skinning

Un per vertex attribute Per ogni vertice:

[ indice osso , peso ] x Nmax volte es:

Bone Index Weight

9 (Spine B) 0.4

13 (Chest) 0.1

15 (Shoulder Right) 0.4 16 (Forearm Right) 0.1

Vertex 120

(10)

Quanti link ad osso per vertice

Dipende dal game engine!

N

max

tipicamente:

1 (sottopezzi rigidi?) (no need to store weights!) 2 (cheap, e.g. su dispositivi mobili)

4 (top quality – standard)

Decrementare N

max

?

in preprocessing

(es task per un game tool)

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

Costo in performance

Nmax trasformazioni finali da interpolare in GPU nel vertex shader

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 (es 1 osso solo, a peso implicitamente 1)

Bone Index Weight 9 (Head) 1.0

-- 0.0

-- 0.0

-- 0.0

es:

(11)

(riassunto)

Skeletal animations:

tre Assets (strutture dati)

Rig

(o skeletro)

Tree di bones (ossa)

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

Skinned

3D Model

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

Animazioni scheletali

Sequenza di pose

Posa = trasformazione locale Ɐbone

possibile formati file (per tutti e tre gli asset):

.SMD (Valve), .FBX (Autodesk), .BVH (Biovision)

Animation GPU Object

LOAD

Life of an Animation in a Game Engine

DISK CENTRAL RAM GPU RAM

Animation Object

IMPORT

Animation File

Skeleton Skeleton

Final Transforms Local

Transforms

(12)

Mesh GPU Object

Mesh SkeletonFile

File

Mesh GPU Object

(Once again,

Memory Management)

Mesh Object

Mesh GPU Object Mesh

Object

GPU Object Mesh

Object Mesh ObjectMesh

ObjectMesh ObjectMesh

Object Animation

Object Animation

AnimationFile File Animation

File Animation

File Animation

File Animation

File Animation

File Animation

File Animation

File Animation

File Animation

AnimationFile File Animation

File Animation

File Animation

File Animation

File Animation

File Animation

File Animation

File Animation

File

Skeleton File

Animation Object Animation

Object

Mesh SkeletonFile

SkeletonFile Object

DISK CENTRAL RAM GPU RAM

Animation GPU Object

I task del Rigging e Skinning

(di un modello 3D)

Rigging – authoring del rig definizione dello scheletro (in contesto movies: anche dei

controlli che verranno usati per manipolarlo)

Skinning – authoring dello skinning

“paint” dell’attributo link (pesati) da vertici a ossa

(13)

I task del Rigging e Skinning

(di un modello 3D)

Rigging :

definire uno scheletro (e una rest pose) in un insieme mesh, una volta per tutte

Skinning

(di una mesh)

:

painting associazione vertice ossa

Animation

(di un rig)

authoring delleanimazioni (scheletali) More about this later

rigger

skinner

animator task dei modellatori digitali! (aiutati / sostituiti da appositi strumenti)

Real time “Skinning”

task of the rendering engine, done in GPU

+ =

skinned model (asset in GPU RAM)

skeletal animation

(asset in GPU RAM)

animated model

(14)

Skinning - how it works (in GPU)

83

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)

(15)

GPU real time Skinning – two variants

Transform:

0 1 2 3 Bone: Weight:

bone a 0

bone b 1

bone c 2

bone d 3

blend

How this is done?

linear interpolation of matrices:

“Linear Blend Skinning”

(old school, still very much used) quaternion based interpolation:

“Dual Quaternion Skinning”

(more complex, fewer artifacts) (a choice of the rendering engine)

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):

) , (

) , (

) , (

) , (

4 4

3 3

2 2

1 1

w b

w b

w b

w b

computaz a bordo della scheda video (in GPU)

(16)

Ortogonalità

animazioni / modelli

RIG

(skeleton) Animation Walk

Animation Jump

Animation Die

Model A

Model B

Model C

Intro: skinning

(17)

Intro: skinning

Riferimenti

Documenti correlati

Si doti l’intervallo [0, 1] della topologia euclidea e si consideri la relazione di equivalenza. ∼ su [0, 1] che identifica i punti di

 La realizzazione di palificazioni per telecomunicazioni viene descritta nella Norma CEI 103-2 (“Costruzione delle linee di telecomunicazione aeree esterne negli attraversamenti e

L'istituto comprensivo di Ghedi ha organizzato, in previsione della giornata della memoria del 27 Gennaio 2020, la posa di 6 pietre di inciampo in ricordo dei cittadini

Per consentire un legame sicuro dell'adesivo al sottofondo, il sistema di riscaldamento a pavimento deve essere spento, o impostato alla temperatura più bassa per

Valori termici calcolati su Libra con cassonetto (diametro della cavità per il rullo 20,5 cm, con coperchio per manuten- zione dall'interno), serramento posato al centro su un muro

La taglierina per laminati e vinile VLC 800 La VLC 800 non solo taglia tavole di laminato fi no a 11 mm di spessore e per una incredibile larghezza di 465 mm, ma funziona

67 Nel progetto Posaclima Renova questo nastro viene utilizzato per due scopi: per sigillare la crepa tra il vecchio controtelaio e la parete quando non è prevista la sua

RESINE EPOXY : détergent alcalin (es. FILA CR10 de FILA)FILA CR10 : Appliquer pure, attendez 30 minutes, puis utilisez une éponge type scotch brite vert. SILICONE: solvant