Animations in games Animazioni cinematiche

Transcript

Animations in games Animazioni cinematiche
Video Games Dev - 2015/2016
29/01/2016
Animations in games
(of 3D Solid Objects)
Designed / scripted
Procedural
(PHYSIC ENGINE)
(ASSETS)
Rigid
Pre-made
transforms
Rigid body
dynamics
Articulated
Skeletal
Animations
Ragdolling
Free form
(generic)
deformable object
simulation
Blend-Shapes
usually
too expensive
Inverse
kinematics
Cloth/
garments
Ropes
Arrivandoci per gradi…
Animazioni cinematiche
spazio oggetto
ruota 2
t1
spazio oggetto
ruota 1
spazio oggetto
automobile
t0
spazio oggetto
automobile
Marco Tarini - Univ. Insubria
spazio
mondo
(globale)
1
Video Games Dev - 2015/2016
29/01/2016
Arrivandoci per gradi…
animazioni cinematiche
posizonamento
della automobile
(rispetto
al mondo)
posiz. della
ruota
(rispetto
all’
automobile)
spazio
mondo
T0
spazio
macchina 1
T1
T1,1
T1,2
T1,3
T1,4
Animazione:
trasformazioni
spazio
ruota 1.1
time
Un robot
animato…
T4
busto2
T5
spalla
Dx
Marco Tarini - Univ. Insubria
collo
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
…
spazio
mondo
T
T0
T3
t0
root bone
Robot
(bacino)
T1
busto1
gamba
Sx
bones
T2
(“ossa”)
gamba
Dx
T7
polpaccio
Dx
T6
spalla
Sx
T8
Trasf. locale del bone piede
(“da piede a polpaccio”)
Quella globale
(“da piede a robot”):
T2*T7*T8
piede
Dx
2
Video Games Dev - 2015/2016
29/01/2016
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
“Skinning”
della mesh
(qui, ad 1
osso solo).
(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 delo scheletro (riggers)
definizione dello skinning su un modello (skinners)
“animation”: definizione delle animazioni (animators)
Marco Tarini - Univ. Insubria
3
Video Games Dev - 2015/2016
29/01/2016
… ad oggetti
articolati deformabili
Idea: poter legare 1 vertice a più ossa
Trasformazione del vertice:
interpolazione delle trasformazioni
associate alle ossa scelte
pesi interpolaz 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 Nmax ossa)
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)
Marco Tarini - Univ. Insubria
4
Video Games Dev - 2015/2016
29/01/2016
Posa:
struttura dati
Una trasformazione
associata ad ogni bone i
Trasformazione locale: (del bone 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: (del bone i )
da: spazio osso i
a: spazio osso del padre di i
utili per costruire la posa
Trasformazione globale: (del bone i )
a volte, solo la
componente
“rotazione”
(“ossa non
estendibili”:
estensione ossa def.
nel rig, costante
su tutte le pose)
da: spazio osso i nella posa data
a: spazio osso root nella posa data
Trasformazione finale: (per il bone i )
da: spazio root nella rest pose
a: spazio root nella posa data (di destinaz)
utili per applicare la posa alla mesh
Marco Tarini - Univ. Insubria
definita
nel rig
5
Video Games Dev - 2015/2016
29/01/2016
Rig (o scheletro):
struttura dati 2/2
Gerarchia (albero) di ossa
1.
con un root bone on top
Una posa speciale «rest pose»
2.
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)
bacino
(root)
R1 R3
rest pose
busto 1
R3
gamba
sx
spalla dx
gamba
dx
pose X
R5
collo
R6
spalla sx
polpaccio
dx
R8
piede
Dx
busto 1
P3
R7
busto 2
R4
P1 P3
R2
gamba
sx
spalla dx
gamba
dx
P7
busto 2
P4
P2
P5
collo
P6
spalla sx
polpaccio
dx
P8
piede
Dx
trasf. finale piede, da rest pose a posa X = P2 P7 P8 (R2 R7 R8)-1 = P2 P7 P8 (R8)-1(R7)-1 (R2)-1
Marco Tarini - Univ. Insubria
6
Video Games Dev - 2015/2016
29/01/2016
From Rest Pose
to a given pose
bacino
(root)
bacino
(root)
R1 R3
rest pose
busto 1
R3
gamba
sx
spalla dx
gamba
dx
pose X
R5
R6
spalla sx
collo
polpaccio
dx
R8
piede
Dx
busto 1
P3
R7
busto 2
R4
P1 P3
R2
gamba
sx
spalla dx
gamba
dx
P7
busto 2
P4
P2
P5
collo
P6
polpaccio
dx
spalla sx
P8
piede
Dx
same as
trasf. finale piede, da rest pose a posa X = P2 P7 P8 (R2 R7 R8)-1 = P2 P7 P8 (R8)-1(R7)-1 (R2)-1
Bone transforms in a pose.
E.g. for «right foot» bone:
Local Transform: P8
from «right foot» to «right lower leg»
Global Transform: P2 P7 P8
the object frame
of the character,
i.e. the frame of
the root bone
from «right foot» to «character»
uses the Hierarchy of the Skeleton
once its computed, Hierarchy no longer needed!
Final Transform: P2 P7 P8 R8-1 R7-1 R2-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 space where mesh
vertices are defined!
Marco Tarini - Univ. Insubria
7
Video Games Dev - 2015/2016
29/01/2016
Posa (per uno scheletro dato) :
struttura dati
posa = array di trasformazioni (locali)
definito per 1 dato rig!
costo in ram: n_ossa x bytes_per_trasf
Osso i
Trasform[ i ]
#0 (bacino, root)
T[0]
Local Transform
#1 (spine)
T[1]
It includes:
#2 (chest)
T[2]
•
a Rotation: always!
#3 (shoulder sx)
T[3]
•
a Translation: maybe
…
…
#10 (polpaccio)
T[10]
…
…
•
a Scaling: maybe
If not, use the one defined in
the rest pose of the rig.
==> a pose cannot
redefine bone lengths.
If not ==> a pose cannot redef
the size of the body part.
Posa (per uno scheletro dato) :
struttura dati in GPU
posa = array di trasformazioni finali
(per 1 dato rig! )
costo in ram: n_ossa x 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:
R2 R7 (P7)-1 (P2)-1
trasformazioni locali
trasformazioni
finali
Marco Tarini - Univ. Insubria
(della rest pose
o della posa data)
8
Video Games Dev - 2015/2016
29/01/2016
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:
Vertex 120
Bone Index
9 (Spine B)
Marco Tarini - Univ. Insubria
Weight
0.4
13 (Chest)
0.1
15 (Shoulder Right)
0.4
16 (Forearm Right)
0.1
9
Video Games Dev - 2015/2016
29/01/2016
Quanti link ad osso
per vertice
Dipende dal game engine!
Nmax tipicamente:
1 (sottopezzi rigidi?) (no need to store weights!)
2 (cheap, e.g. su dispositivi mobili)
4 (top quality – standard)
Decrementare Nmax ?
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
es: Bone Index
GPU = poco controllo:
interpolaz fra Nmax trasf (costante)
bones non utilizzati: peso 0
Costo in RAM
(della scheda video)
Weight
9 (Head)
1.0
--
0.0
--
0.0
--
0.0
strutture dati semplici per GPU-RAM
array a lungezza fissa:
Nmax coppie (indice , peso)
anche dove, localmente, ne basterebbero meno
(es 1 osso solo, a peso implicitamente 1)
Marco Tarini - Univ. Insubria
10
Video Games Dev - 2015/2016
29/01/2016
Skeletal animations:
tre Assets (strutture dati)
(riassunto)
Rig (o skeletro)
Tree di bones (ossa)
Ogni bone => sistema di riferimento (in rest pose)
(sistama dell’osso root = sistema oggetto)
Skinned 3D Model
Mesh con associazione vertici => 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)
Life of an Animation
in a Game Engine
DISK
CENTRAL RAM
GPU RAM
Local
Transforms
LOAD
IMPORT
Animation
File
Animation
Object
Skeleton
Skeleton
Animation
GPU
Object
Final Transforms
Marco Tarini - Univ. Insubria
11
Video Games Dev - 2015/2016
29/01/2016
(Once again,
Memory Management)
DISK
CENTRAL RAM
Animation
Animation
Animation
Animation
Animation
Animation
File
Animation
File
Animation
File
Animation
File
Animation
File
Animation
File
Animation
File
Animation
File
Animation
File
Animation
File
Animation
File
Animation
File
Animation
File
Animation
File
Animation
File
File
File
File
File
File
Mesh
Mesh
Object
Mesh
Object
Mesh
Object
Mesh
Object
Animation
Object
Animation
Object
Animation
Object
Object
Mesh
Skeleton
File
Skeleton
File
File
GPU RAM
Mesh
Mesh
GPU
Mesh
GPU
Object
GPU
GPU
Animation
Object
Object
Object
GPU
Object
Mesh
Skeleton
File
Skeleton
File
Object
I task del Rigging e Skinning
(di un modello 3D)
Rigging – authoring del rig
Skinning – authoring dello skinning
definizione dello scheletro
“paint” dell’attributo link (pesati)
(in contesto movies: anche dei
da vertici a ossa
controlli che verranno usati per manipolarlo)
Marco Tarini - Univ. Insubria
12
Video Games Dev - 2015/2016
29/01/2016
I task del Rigging e Skinning
(di un modello 3D)
task dei modellatori digitali!
(aiutati / sostituiti
da appositi strumenti)
Rigging :
definire uno scheletro
(e una rest pose)
in un insieme mesh,
una volta per tutte
rigger
Skinning (di una mesh):
painting associazione vertice ossa
skinner
Animation (di un rig)
authoring delle animazioni (scheletali)
More about this later
+
animator
=
skinned
model
skeletal
animation
(asset in
GPU RAM)
(asset in
GPU RAM)
animated
model
Real time “Skinning”
task of the rendering engine,
done in GPU
Marco Tarini - Univ. Insubria
13
Video Games Dev - 2015/2016
29/01/2016
Skinning - how it works (in GPU)
dest.
pose
x vertex skinning
model
in rest pose
Bone:
Weight:
Transform:
0
bone a
0
1
bone b
1
2
bone c
2
3
bone d
blend
3
1
a vertex
(in rest pose)
83
Skinning - how it works (in GPU)
dest.
pose
model
in rest pose
a vertex
(in rest pose)
Marco Tarini - Univ. Insubria
p
n
p
n
deformed
model
vertex
(in dest pose)
14
Video Games Dev - 2015/2016
29/01/2016
GPU real time Skinning –
two variants (a choice of the rendering engine)
Bone:
Weight:
bone a
bone b
bone c
bone d
0
1
2
3
Transform:
0
1
blend
2
3
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)
Applicare le pose:
Linear Blend Skinning
Per ogni vertice della mesh:
interpolaz. delle
trasformaz.
legate dal rigging
al vertice
 N max


xP =  ∑ wiT [bi ] ( xR )
 i =1

computaz a
bordo della
scheda video
(in GPU)
posiz del vertice
definito nella rest pose.
Skinning
del vertice
xR
(b1 , w1 )
(con Nmax = 4): (b2 , w2 )
(b3 , w3 )
xP
(b4 , w4 )
Marco Tarini - Univ. Insubria
15
Video Games Dev - 2015/2016
29/01/2016
Ortogonalità
animazioni / modelli
RIG
(skeleton)
Animation
Walk
Animation
Jump
Animation
Die
Model
A
Model
B
Model
C
Intro: skinning
Marco Tarini - Univ. Insubria
16
Video Games Dev - 2015/2016
29/01/2016
Intro: skinning
Marco Tarini - Univ. Insubria
17