Sunteți pe pagina 1din 8

Vizibilitatea obiectelor dintr-o scena

3D
Vizibilitatea obiectelor dintr-o scena 3D depinde de:
Poziia observatorului
Grafica pe calculator Poziionarea obiectelor din scena unul fata de celalalt

Volumul vizual
Determinarea vizibilitii in scene 3D Parile nevizibile ale unui obiect 3D sunt:

Fee auto-obturate
Victor Moraru Pari obturate de alte obiecte, aflate in fata obiectului in
raport cu observatorul

Algoritmii de determinare a feelor Algoritmii de determinare a feelor


vizibile vizibile
Algoritmii de determinare a feelor vizibile se mpart Algoritmii din spaiul imagine determin obiectul cel mai apropiat de
observator de-a lungul proiectorului ce trece prin fiecare pixel. Afiarea
n dou categorii: unei scene 3D pe baza acestor algoritmi poate fi descris astfel:
algoritmi n spaiul imagine - care determin obiectul
scenei vizibil n fiecare pixel ecran. pentru fiecare pixel ecran, P, execut
algoritmi n spaiul obiect - care compar obiectele determin obiectul O cel mai apropiat de observator de-a lungul
proiectorului ce trece prin pixelul P;
ntre ele, eliminnd parial sau total acele obiecte afieaz pixelul P n culoarea obiectului O;
care nu sunt vizibile
Efortul de calcul este proporional cu (n*p), unde n este numrul de
obiecte ale scenei, iar p reprezinta rezoluia ecranului.

Spatiu obiect Spatiu imagine 3 4


Algoritmii de determinare a feelor
Terminologie
vizibile
Algoritmii n spaiul obiect au urmtoare form: Object culling eliminarea din banda grafica a obiectelor sau
grupurilor de obiecte care sunt in afara volumului vizual
poate fi efectuata prin algoritmi implementati intr-o biblioteca
pentru fiecare obiect O al scenei execut folosita de aplicaia grafica 3D (motorul grafic)
determin prile vizibile ale obiectului O (prile care Back face culling eliminarea din banda grafica a feelor auto-
nu sunt obturate de alte pari ale sale sau de alte obturate ale obiectelor
obiecte); Hidden surface removal eliminarea prilor nevizibile ale
afieaz parile vizibile ale obiectului O; feelor obiectelor:
este efectuata de GPU, ca operaie raster la nivel de fragment (z-
Efortul de calcule proporional cu (n*n), n fiind numrul buffer)
de obiecte ale scenei 3D. Algoritmii n spaiul obiect sunt poate fi implementata si la nivel de poligoane, prin algoritmi
mai leni (cu toate c, de regul, n<p) i mai dificil de implementai ntr-o biblioteca folosita de aplicaia grafica 3D
implementat, fiecare pas al algoritmului fiind mai complex. (motorul grafic)
5 6

Determinarea fetelor auto-obturate pentru


Fee vizibile i invizibile poliedre convexe (Back face culling)
Poate reduce substantial numarul de poligoane procesate in banda grafica.
Algoritmul:
Dac normala e
Observatorul si obiectul sunt raportati la acelasi sistem de coordonate.
+y
ndreptat in aceeai
Conturul fiecarei fee a obiectului este orientat in sens trigonometric
(-1, 1, -1)
direcie in care atunci cand poliedrul este vazut din exterior.
+z
privete observatorul
Observatorul este situat in afara obiectului.
+x faa respectiv este
(1, -1, 0)
invizibil Faa este vizibila daca : 0<= u < 900
Volum de vedere canonic
sau
0< cos(u) <=1
N: normala la faa
O: vectorul orientat ctre observator
7 8
Determinarea fetelor auto-obturate pentru Determinarea fetelor auto-obturate pentru
poliedre convexe (Back face culling) poliedre convexe (Back face culling)
Produsul scalar: Calculul normalei la o fa a poliedrului
NO = ||N|| * ||O|| * cos(u) ---> cos(u) = N O / ( ||N|| * ||O||) = NuOu
Conditia de vizibilitate: Nu Ou > 0 (produsul scalar la versorilor)
Fie V1(x1, y1, z1), V2(x2, y2, z2), V3(x3, y3, z3), 3 varfuri
Determinarea fetelor auto-obturate poate fi efectuata: succesive ale conturului fetei.
1. In sistemul coordonatelor globale (in care este definit si observatorul) Normala la fa se poate obine calculnd produsul vectorial:
2. In sistemul de coordonate observator (V1-V2)x(V2-V3)
3. In sistemul coordonatelor de decupare (dupa aplicarea transformarii model-view-
projection) N = (V1-V2)x(V2-V3) = [(z3-z2)*(y2-y1) (z2-z1)*(y3-y2)]*i
- [(x2-x1)*(z3-z2) (x3-x2)*(z2-z1)]*j
+[(x2-x1)*(y3-y2)- (x3-x2)*(y2-y1)]*k
unde i, j, k sunt versorii direciilor axelor sistemului de
coordonate carteziene 3D
Observatorul este la infinit, pe axa z negativa, si priveste in directia axei Z pozitive
9 10

Algoritmi din spaiul imagine Algoritmul z-buffer


Aplicai n momentul rasterizarii scenelor Algoritm de eliminare a parilor nevizibile ale poligoanelor (feelor obiectelor)
Executat in timpul rasterizarii primitivelor (dup transformarea de proiecie),
Care sunt pixelii care se suprapun? de GPU:
Cum calculam distana pana la pixelul cel mai apropiat? Observatorul este la infinit, pe axa z negativa

Asupra primitivelor se efectueaz proiecie ortografica in planul XOY
Volum de vedere normalizat

yv
xv

zv
Pixel vizibil
11 pixel Planul de proiectie 12
Algoritmul z-buffer Algoritmul z-buffer
Principiu: Algoritmul z-buffer:
Doua fragmente aflate pe acelai proiector, rezultate Iniializeaz buffer-ul imagine la culoarea de fond
din isterizarea a doua primitive diferite, au coordonata
Iniializeaz Z-buffer la coordonata z a planului din spate al
z diferita. volumului vizual (z=1)
Pentru fiecare fragment f(x,y,z) rezultat din rasterizarea unei primitive
Fragmentul avnd coordonata z mai mica va fi afisat
dac z< Z-buffer[y][x] atunci
in pixelul (x,y).
Z-buffer[y][x] = z
actualizeaz culoarea pixelului (x,y) in buffer-ul imagine folosind
culoarea fragmentului f

13 14

Algoritmul z-buffer Algoritmul z-buffer


Primitivele grafice (poligoane, linii) in care a fost descompusa scena 3D sunt rasterizate Calculul coordonatei z a unui fragment
in ordinea in care au fost transmise de programul de aplicatei
Buffer-ul imagine este actualizat pe msura rasterizarii primitivelor, astfel: Ultima transformare din lanul de transformri efectuate
asupra vrfurilor 3D conserva coordonata z a fiecrui vrf
dac (fragmentul curent se proiecteaz in pixelul (x,y) si
z-fragment < z-fragment afiat in pixelul (x,y) )
atunci
actualizeaz culoarea pixelului (x,y) in buffer-ul imagine, la culoarea fragmentului curent Coordonatele z ale punctelor
(fragmentelor) P1,P2, M, N
Rezultat: este necesar sa se memoreze coordonatele z ale fragmentelor afiate in pixelii
imaginii se obin prin calcul incremental, in
algoritmul de rasterizare.
Z-buffer :
tablou bidimensional cu numr de elemente egal cu numrul de pixeli ai suprafeei de
afiare

in memoria plcii grafice


15 16
Algoritmul z-buffer Probleme ale algoritmului z-buffer
Compresia axei din spaiul post-
near far
perspectiva z

Obiectele ndeprtate au valori z


foarte apropiate
Pierderea preciziei despre x
Before

profunzime 0 1
z

Situaie cunoscut ca z-fighting

x After

17 18

Probleme ale algoritmului z-buffer: Probleme ale algoritmulul z-buffer:


z-fighting z-fighting
Situaia poate fi observata atunci
Observatorul e in origine, Albastru care a fost pictat dupa
cnd doua primitive au informaii Look orientat de-a lungul axei Z
Rosu in fata albastrului
rosu, se pozitioneaza in fata
similare n z-buffer rosului

x axis of image (each column is a pixel)


Liniile roii si albastre reprezint
intersecii intre poligoanele
coplanare roii si albastre
z-value bins

Doua cuburi care se inersecteaza

19 20
Algoritmul BSP
Algoritmul z-buffer
(Binary Space Partitioning)
Aprecieri asupra algoritmului z-buffer Poate fi folosit pentru:

Eliminarea obiectelor aflate in afara volumului vizual (object culling)
1) Numrul de comparaii de valori z pentru un pixel:
numrul de fragmente care se proiecteaz in acel pixel.
Eliminarea parilor nevizibile ale feelor obiectelor (hidden surface
removal)
Timpul de calcul tinde sa devina independent de numrul
de poligoane: n medie, numrul de pixeli acoperii de un
Intrarea: lista poligoanelor care compun scena 3D
poligon este invers proporional cu numrul de poligoane.
(nu are importanta din care obiect face parte fiecare poligon)
2) Depth complexity: numrul de suprascrieri ale unui
pixel in buffer-ul imagine, la generarea unui cadru imagine Scena 3D este reprezentat printr-un arbore binar: arborele BSP
(calcul culoare fragment: model iluminare, utilizare texturi) Arborele BSP al scenei este independent de poziia observatorului
3) Valorile z (in z-buffer) sunt reprezentate prin numere (reprezint scena in sistemul coordonatelor globale)
ntregi: 16, 32 bii - pierdere precizie
21 22

Algoritmul BSP Algoritmul BSP


(Binary Space Partitioning) (Binary Space Partitioning)
Construirea arborelui BSP al unei scene Afiarea arborelui BSP al unei scene
Fiecare nod al arborelui corespunde unui plan de
Tine cont de poziia observatorului
partiionare a spaiului 3D (de regula, planul unui poligon al
Afiare back-to-front: se ncepe cu poligonul cel mai ndeprtat de
scenei)
observator
- Se pornete din rdcina arborelui i se avanseaz in arbore pana la frunze,
Fiecare plan de partiionare mparte spaiul in 2 semi-spatii: n funcie de poziia observatorului fat de planul ataat fiecrui nod
cel din fata planului (de aceeai parte cu normala la plan) - Exemplu: se adaug observatorul in scena 3D a arborelui din figura
cel din spatele planului precedenta

Se ncepe cu un poligon oarecare din list (de regul


primul), pentru care se creeaz nodul rdcin al arborelui Eliminarea obiectelor nevizibile din banda grafica (Object
Poligoanele din semi-spaiul fa formeaz lista-fa, care culling):
va genera sub-arborele fa al nodului Dac planul de partiionare al unui nod nu intersecteaz volumul vizual, atunci
Poligoanele din semi-spaiul spate formeaz lista-spate, numai sub-arborele aflat de aceeai parte cu volumul vizual va fi afiat, celalalt
care va genera sub-arborele spate al nodului sub-arbore fiind eliminat din banda grafic.
Se alege un poligon din lista-fa i se creeaz nodul
23 24
rdcin al sub-arborelui fa, etc.
Algoritmul de creare a arborelui Algoritmul de creare a arborelui
BSP BSP

25 26

Exemplu de construire arbore BSP Algoritmul BSP: Aprecieri



Arborele nu trebuie sa fie construit pentru fiecare cadru imagine: avantaj
pentru scenele statice

Generarea unui cadru = execuia funciei de afiare
Permite eliminarea din banda grafic a unui numr mare de poligoane care
sunt in afara volumului vizual (Object culling)
Diverse adaptri ale arborelui pentru cazul obiectelor in micare in scena 3D

Numrul de suprascrieri ale unui pixel imagine este mai redus dect n
algoritmul z-buffer

Sistemele grafice actuale, OpenGL i Direct3D, nu construiesc arborele BSP al


unei scene
Construirea i afiarea arborelui BSP sunt funcii de management al scenei 3D,
implementate de regula ntr-un motor grafic 3D

27 28
Algoritmul pictorului Algoritmul pictorului
Intrare: lista poligoanelor care alctuiesc scena 3D, transformate in Pasul 3. Se descompun poligoanele ale cror extensii pe axa OZ se
spaiul de afiare suprapun

Forma general a algoritmului Este necesar numai dac extensiile pe axa OZ se suprapun
1. Se calculeaz extensia fiecrui poligon din list pe axele OX, Sunt multe aplicaii in care acest pas nu este necesar, poligoanele fiind
OY, OZ: paralelipipedul ncadrator al poligonului, cu feele paralele amplasate in plane de Z constant: cartografie, generarea straturilor
circuitelor imprimate, etc.
cu planele principale ale sistemului de coordonate
Poate fi optimizat, tiind ca nu ntotdeauna atunci cnd extensiile pe
2. Se ordoneaz poligoanele cresctor dup coordonata zmin a axa OZ se suprapun este necesara descompunerea poligoanelor;
fiecrui poligon: primul in lista va fi cel mai apropiat de observator testele se efectueaz progresiv, in funcie de complexitatea calculelor
3. Se descompun poligoanele ale cror extensii pe axa OZ se presupuse
suprapun, astfel nct extensiile lor pe axa OZ sa fie disjuncte
4. Se afieaz (transmit in banda grafica) poligoanele ncepnd cu Principalul efort de calcul: sortarea listei de poligoane i
ultimul din lista descompunerea, dac este necesara.
29 30

ntrebri ?

31

S-ar putea să vă placă și