• Non ci sono risultati.

3D Meshes

N/A
N/A
Protected

Academic year: 2021

Condividi "3D Meshes"

Copied!
17
0
0

Testo completo

(1)

Video Game Dev 2015/2016 Univ. Insubira

3D Meshes

Marco Tarini

Mesh triangolari

i Modelli 3D universali dei games

Struttura dati per modellare oggetti 3D

GPU friendly

Risoluzione (potenzialmente) adattiva

“Complessità” = numero facce

Superfice lineare a tratti

composta da triangoli

(spesso adiacenti lato-a-lato)

(2)

Mesh triangolare (o mesh simpliciale)

Un insieme di triangoli adiacenti

facce

vertici

spigoli (o edges)

Mesh (di triangoli):

struttura dati

Componenti:

geometria

i vertici, ciascuno con pos (x,y,z) un campionamento della superficie!

connettività (a volte: “topologia”) come sono connessi i vertici (es.: in una tri-mesh, i triangoli) attributi

es: colore, materiali, normali, UV, …

(3)

Mesh: geometria

Insieme di posizioni dei vertici

Un vettore posizione (x,y,z) per ogni vertice (Spazio Oggetto)

V2

V3

V5 V4

V1

Mesh: connettività

(o topologia)

Triangoli (o quads, o edges…)

che connettono fra loro i vertici

Come nodi connessi da archi, in un grafo

V2

V3

V4 V1

T1

T2

T3

(4)

Mesh: attributi

Quantità che variano sulla superficie

Campionati per vertice, interpolati nei poly

V2

V3

V5 V4

V1

T1

T2

T3

RGB3 RGB2

RGB5 RGB4

RGB1

Mesh: attributi

Proprietà che variano sulla superficie

vettoriali o scalari

Memorizzati per ogni vertice (almeno, nei games)

Interpolati all’interno delle facce

interpolazione lineare Nota: per costruzione, C0 continui fra facce adiacenti

E, in generale, C1 discontinui fra facce adiacenti

Attributi più diffusi nei games:

Colore

per: baked lighting (ambient occlusion)

per: base color (RGB)

Normale

per: re-lighting dinamico Coordinate tessitura (lo “uv mapping” della mesh)

per: texture mapping

Direzioni tangenti per: normal mapping Bone assignments (lo “skinning” della mesh)

per: animazioni scheletali

VEDREMO

VEDREMO

VEDREMO

VEDREMO

(5)

Meshes: complessità crescente

70.000 △

1994

Meshes: complessità crescente

1.200.000 △

1997

(6)

Meshes: complessità crescente

2.000.000.000 △

2002

Low Poly Meshes

(7)

Anche nei games

800 △ Unreal Torunement (1999)

Anche nei games

800 △ Unreal Torunement (1999)

Unreal Torunement 2K3 (2002)

3000 △

(8)

Anche nei games

800 △ Unreal Torunement (1999)

Unreal Torunement 2K3 (2002)

3000 △

Unreal Torunement 3 (2007)

4500 △

solo l’arma questa, 12000 △

800 △ (1999)

3000 △ (2002)

15000 △ (2006)

(9)

Anche nei games

230 △ (1996)

300 △ (1998)

30.000 △ (2008)

48.000 △ (2012) 4.000 △

(2002)

pixel art

: (high-res) mesh

(high res) image

= :

low-poly

model

(10)

Metal Slug (1996, Nazca Copr), on Neo Geo (SNK) Solomons’s key

(1986, Temco) on Z80

reminder:

per tutti gli ‘80,

il principaleassetdei games è consistito da

sprites / tilemapsin pixel art ...

Come rappresento una mesh?

(quali strutture dati) Modo

diretto:

un vettore di triangoli

e per ogni triangolo: tre vertici e per ogni vertice: tre coordinate

Ma: replicazione dati poco efficiente in spazio oneroso fare updates

poichè molti dei triangoli di una una tri-mesh sono adiacenti (facce adiacenti condividono vertici)

(11)

Come rappresento una mesh?

(quali strutture dati) Modo

indexed:

Geometria: array di vertici

in ogni vertice, posizione e attributi Attributi:

nei vertici

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

Connettività: (a volte anche: “topologia”) Array di triangoli

Per ogni triangolo:

tripletta di indicia vertice

Tasks of the Game Engine for Meshes

Import (from disk)

Simple Pre-processing

e.g.: Compute Normals (if needed, i.e. rarely) e.g.: Compute Tangent Dirs

e.g.: Bake Lighting (sometimes)

Render

(graphic engine) GPU based

+ animate (more abot this later)

(12)

Rendering of a Mesh in a nutshell

Load…

store all data on GPU RAM Geometry + Attributes Connectivity

Textures Shaders

Parameters / Settings

…and Fire!

send the command: “do it” !

THE MESH

THE “MATERIAL”

Simplified schema of: “PC + Video Card”

BUS

26

CPU

ALU

(main)

RAM

Disk Video Card

Internal bus Internal bus

(of video card)

RAM(GPU)

GPU

(13)

Mesh GPU Object

LOAD

Life of a Mesh in a Game Engine

DISK CENTRAL RAM GPU RAM

PREPROCESS (maybe) Mesh Object

IMPORT

Mesh File

Mesh FileMesh

FileMesh FileMesh

FileMesh FileMesh

FileMesh

Mesh GPU Object

Memory Management !

DISK CENTRAL RAM GPU RAM

Mesh Object Mesh

File

Mesh GPU Object Mesh

Object Mesh

File

Mesh GPU Object Mesh

Object Mesh

FileMesh FileMesh

FileMesh FileMesh

File Mesh

ObjectMesh ObjectMesh

ObjectMesh ObjectMesh

Object

(14)

Mesh File

A file of a given format sitting on the disk

Choices for the game engine:

which formats(s) to import?

proprietary, standard…

storing which attribute?

Issues:

storage cost loading time

LetteraL.off

Esempio di formato file di mesh indexed:

il formato OFF

1 5 1 0 5 1 4 3 2 1 0 4 5 4 3 0 4 6 7 8 9 4 6 9 10 11 4 0 1 7 6 4 1 2 8 7 4 2 3 9 8 4 3 4 10 9 4 4 5 11 10 4 5 0 6 11 OFF

12 10 40 0 0 0 3 0 0 3 1 0 1 1 0 1 5 0 0 5 0 0 0 1 3 0 1 3 1 1 1 1 1

# vertici

# facce # edges

x,y,z 2ndo vert

prima faccia:

4vertici:

con indici 3, 2, 1 e 0 indice 0

indice 3 indice 2 indice 1

(15)

Formati file per mesh più usati nei games

.OBJ(wavefront)

max diffusione

indexed, normali , uv-mapping no colori (solo indice materiale x faccia) no skinning o ani

.SMD ( )

animazioni scheletali + skinning

normali , uv-mapping no indexed!

no colori .MD3 (Quake, IDsoft)

vertex animations, normali no colori

.PLY (cyberware)

customizzabile

“accademico”

.3DS ( )

si: colori, uv-mapping, indexed, materiali, tessiture…

no: normali

limite al numero di vert (64K) .COLLADA( )

completissimo

nato apposta per essere interscambio

open standard

quasi impossibile da parsare completamente .FBX ( )

completo, comprese animations complesso, difficile da parsare .MA /.MB ( )

completo, comprese animations complesso, difficile da parsare

semplici complessi

p diffusimeno diffusi

Mesh Object

A (C++ / Javascript / etc) structure in main RAM

Choices for the game engine:

which attribute to store?

storage formats… (floats, bytes, double…) which preprocessing to offer

(typically at load time)

(16)

Come rappresento una mesh?

(quali strutture dati) Modo

indexed in C++ :

class Vertex { vec3 pos;

rgb color; /* attribute 1 */

vec3 normal; /* attribute 2 */

};

class Face{

int vertexIndex[3];

};

class Mesh{

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

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

};

Mesh GPU Object

VBO / Vertex Arrays / etc

buffers storing “tables” for geometry, connectivity, etc.

Sitting in GPU RAM

The most precious one !

Ready to render!

Choices for Game Engine:

which GPU mechanism storage formats

balance storage cost / precision / computatuion

(17)

Indexed mesh in GPU RAM

Buffers

V2

V3

V5 V4

V1

T1

T2

T3

Tri:

Wedge 1:

Wedge 2:

Wedge 3:

T1 V4 V1 V2

T2 V4 V2 V5

T3 V5 V2 V3

vert X Y Z R G B

V1 x1 y1 z1 r1 g1 b1 V2 x2 y2 z2 r2 g2 b2 V3 x3 y3 z3 r3 g3 b3 V4 x4 y4 z4 r4 g4 b4 V5 x5 y5 z5 r5 g5 b5 GEOMETRIA + ATTRIBUTI

CONNETTIVITA’

Riferimenti

Documenti correlati

Spiegare, tramite un disegno, come il suo integrale pu` o essere definito tramite le somme di Riemann inferiori e superiori.. Enunciare il teorema fondamentale del

Spiegare, tramite un disegno, come il suo integrale pu` o essere definito tramite le somme di Riemann inferiori e superiori.. Enunciare il teorema fondamentale del

Analisi Matematica 1 (Informatica, Universit` a di Cagliari), 2007/2008 Scritto Generale, 22 Ottobre 2010, Soltanto Studenti Fuori Corso Cognome e nome:... Enunciare il

Spiegare, tramite un disegno, come il suo integrale pu` o essere definito tramite le somme di Riemann inferiori e

Spiegare, tramite un disegno, come il suo integrale pu` o essere definito tramite le somme di Riemann inferiori e

Spiegare, tramite un disegno, come il suo integrale pu` o essere definito tramite le somme di Riemann inferiori e

Fondamenti di Fisica Matematica: Secondo parziale 07.06.2011. Cognome

Fondamenti di Fisica Matematica: Secondo parziale 12.06.2012. Cognome