Grafika 3D - Fizyka UMK

advertisement
Wykład z grafiki komputerowej II (3D)
Jacek Matulewski (e-mail: [email protected])
http://www.fizyka.umk.pl/~jacek/dydaktyka/3d/
Grafika 3D
Podsumowanie omówionych zagadnień
Wersja: 15 listopada 2007
Zagadnienia grafiki 3D
Podstawowe zagadnienia grafiki 3D:
• Modelowanie – budowanie modeli obiektów (ze
świata realnego) za pomocą przestrzennych figur
geometrycznych (trójkątów, wielokątów).
Ilość trójkątów – jakość modelowania (realizm) –
wymagany sprzęt
• Animacja – ruch obiektów – zmiana położenia w
poszczególnych kadrach (renderowanych statycznych
scenach)
• Renderowanie – techniczne aspekty przygotowania
sceny (alg. rys. linii, bufor głębii, antyaliasing itp.)
Przykład
modelowania
(niestety to nie OpenGL lub DirectX, a ray tracing)
Modelowanie: wierzchołki
Podstawowe pojęcia grafiki 3D:
• Vertex – wierzchołek figury 2D lub 3D (glVertex3f),
element siatki rozpiętej w 3D, która jest
bazą renderowanej sceny
• Z wierzchołkiem mogą być związane m.in.:
- kolor (glColor3ub),
- normalna (glNormal3f),
- współrzędna tekstury (glTexCoord2f)
Funkcje OpenGL: glVertex{234}{sfid}[v](GLType współrzędne)
Modelowanie: primitiwy
Podstawowe pojęcia grafiki 3D:
• Primitiwy – figury zbudowane z vertexów, dwustronny
obiekt modelowany jest z tysięcy trójkątów
glBegin(typ prymitiwu);
glVertex3f(współrzędne);
glVertex3f(współrzędne);
…
glEnd();
wypukły
bez przecięć
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
zbiór
GL_TRIANGLES
GL_QUAD_STRIP
GL_LINE_LOOP
GL_LINE_STRIP
GL_POLYGON
GL_QUADS
GL_LINES
GL_POINTS
wierzchołków
Używanie trójkątów (i pasów): najbardziej wydajne numerycznie, zmniejsza artefakty
Modelowanie: potok
Podstawowe pojęcia grafiki 3D:
• Potok (ang. pipeline) – ciąg przekształceń macierzy
(sprzętowo zrównoleglone)
dane wejściowe: wierzchołki (vertices) w 3D
transformacje: translacje, obroty (m. model-widok),
obcięcia: frustum (ograniczenie ilości wierzchołków)
rzutowanie: macierz rzutowania + mieszanie kolorów
wynik: piksele obrazu 2D (współrzędne ekranu)
Transformacje
Podstawowe pojęcia grafiki 3D:
• Transformacje – określane we współrzędnych sceny 3D
translacja (glTranslatef), obrót (glRotatef)
skalowanie (glScalef), pochylenie
złożenie – dowolna macierz 4x4 (glMultMatrixf)
• Transformacje muszą być ustalone
przed narysowaniem wierzchołka, np..:
glRotatef(45.0f, 0.0f, 1.0f, 0.0f); //kąt, kierunek osi
glVertex3f(…);
• Transformacje są wykonywane „od końca”
Transformacje
• Współrzędne jednorodne (homogenous coordinates)
• Wprowadzone w 1946 przez E. Maxwella (rzutowanie)
• W 1965 L. Roberts użył ich do zunifikowania zapisu
wszystkich transformacji: translacji, obrotów,
skalowanie i pochylania
• Opis punktów n-wymiarowej przestrzeni za pomocą
n+1 współrzędnych
• Obcinanie we współrzędnych jednorodnych może
odbywać się w sześcianie zamiast w ściętym
ostrosłupie (znacznie efektywniejsze numerycznie)
Transformacje
• We współrzędnych kartezjańskich (2D)
obrót i translacja mogą być zapisane:
oxy   x0  t x   oxx x0  o yx y0  t x 
  



o yy   y0  t y  o yx x0  o yy y0  t y 
 x0   oxx
 x
ˆ
 y   O  y   T  o
 
 0
 yx
• We współrzędnych jednorodnych:
 x
 x0  oxx
 y   H  y   o
 
 0   yx
 1 
 1   0
oxy
o yy
0
t x   x0   oxx x0  o yx y0  t x 
t y   y0   o yx x0  o yy y0  t y 

1   1  
1
• O korzystaniu ze współrzędnych jednorodnych
(glMultMatrixf) w osobnej prezentacji!
Kolor
• Składowe RGB + A (atrybut figury), alternatywa HSB
• R = 650 nm, G = 530 nm, B = 450 nm
• Możliwość cieniowania wewnątrz figury
(atrybut wierzchołków)
Kolor
• Inne układy wsp. kolorów:
CMY(K), HSB, YPbPr, CIE xyY, CIE LUV, CIE Lab
• Biblioteka colormaps.cpp/.h [obejrzeć kod!]
• RGB – dobre dla monitorów, TV (emisja światła),
odpowiada fizjologii oka
• CMY(K) = 1 – RGB – drukarki (absorpcja światła)
Kolor
• HSB (HSV, HSL) – hue, saturation, brightness
(value, lightness, luminance)
• Bardziej intuicyjne, używane w interakcji z człowiekiem
Fizyka i biologia koloru
• Składowe RGB + A (atrybut figury), alternatywa HSB
• R = 650 nm, G = 530 nm, B = 450 nm
Światło (cieniowanie)
Fizyczny model oświetlenia – na efekt końcowy (tj. kolor
piksela) wpływają „własności emisyjne” źródła światła,
„własności absorpcyjne” materiału, który jest oświetlany
i własności ewentualnych ciał półprzezroczystych
+
+
=
Typy źródeł oświetlenia:
• Światło otoczenia (ambient) – światło
bez źródła
słoneczne
i kierunku
• –Rozproszone
rozświetla jednorodnie
(diffuse) – posiada
całą scenę,
wźródło,
białym
także
ale
pomieszczeniu
wewnątrz
jest jednorodne
figur)
• we
–Rozproszone
Rozbłysk
nie
wszystkich
daje (specular)
cieni
(diffuse)
kierunkach
na obiekcie
– –źródło
mleczna
(nie
i kierunek
ma
żarówka,
złudzenia
świeca
3D)
• reflektor,
Generalnie:
Rozbłyskefekt
(specular)
Jasność
„zajączka”
proporcjonalna
– reflektor,
– rozbłysku
odbicienaodgładkich
lustra pow.
do kosinusa kąta padania (normalna)
Dla każdego typu parametry materiału ustalane są osobno
Model oświetlenia Phonga
+
+
=
• Opracowany w 1975 przez Phong Bui-Tuonga
• Jest jedynie zgrubnym przybliżeniem praw optyki
• Zakłada trzy niezależne komponenty odbitego światła
• Światło rozproszone – model Lamberta (1760)
• Model cieniowania Phonga (coś innego niż model ośw.)
= interpolacja normalnych (uśrednianie normalnych)
Model Lamberta
Model światła rozproszonego
Jasność przedmiotu (natężenie światła) równa jest Ii.
Jest ono jakąś funkcją natężenia światła padającego na
powierzchnię i kąta odbicia b (= padania)
Model zakłada, że natężenie światła odbitego Id jest
proporcjonalne do „efektywnej powierzchni” widzianej
przez obserwatora Acos(b ).
N
L
Id = Ii cos(b )
Obliczanie cos(b ) jest szybkie:
cos(b ) = NxLx+NyLy+NzLz
N – wektor normalny, L – promień św. odbitego
Model Phonga
Model światła specular („zajączek”)
Wprowadzony przez Phonga – nie ma podstaw fizycznych
Is = Ii cos n (a )
N
L
Parametr n kontroluje
„ostrość” zależności od
kąta pod którym oglądamy
fragment powierzchni
n ~ GL_SPOT_CUTOFF
V
N – wektor normalny
n = 1, 5, 10, 20,
L – promień św. odbitego
V – kierunek do obserwatora
50, 100
Model oświetlenia Phonga
Trójkomponentowy model oświetlenia
ambient
diffuse
+
ka Ia
ka Ia +
specular
+
kd Id
=
ks Is
kd Ii cos(b ) + ks Ii cos n (a ) = I
W rzeczywistości (tj. w OpenGL) takie obliczenia
prowadzone są osobno dla każdej składowej koloru (RGB)
Modele cieniowania
Cieniowanie płaskie – jasność określana jest wzorem
Phonga dla całej płaskiej powierzchni trójkąta w modelu.
W przypadku powierzchni płaskich efekt jest „kanciasty”
Dodatkowo niekorzystny
efekt pasm Macha
Jak kolorować powierzchnie zaokrąglone?
Modele cieniowania
Cieniowanie Phonga – obliczenia koloru dla każdego
punktu trójkąta z wektorem normalnym wyznaczonym
na podstawie interpolacji na bazie trzech wektorów
normalnych przypisanych do każdego wierzchołka trójkąta
płaskie
Phong
Modele cieniowania
Cieniowanie Gourauda – kolor punktu na prymitywie
uzyskiwany jest przez interpolację składowych koloru jego
wierzchołków (tylko te wyznaczane są np. wzorem Phonga)
Mniej wymagający numerycznie, ale też mniej realistyczny
Model to żona Henri Gourauda, Sylvie.
Wada: wyraźnie widać granicę użytych figur
(wymaga gęstszej sieci niż met. Phonga)
Modele cieniowania
Cieniowanie globalne
Jim Kajiya, 1986 (Microsoft)
Przy obliczaniu składowych światła odbitego
uwzględnia nie tylko światło pochodzące
ze źródeł, ale również odbite od innych pow.
• Obliczenia rekurencyjne


I ( x, x' )  g ( x, x) e ( x, x)   r ( x, x, x) I ( x, x)dx
• Używane w metodzie
śledzenia promieni (ray tracing)

S

• Powoli wchodzi do silników graficznych działających
I(x, x') – sumaryczna intensywność (składowe koloru) w punkcie x z punktu x'
g(x, w
x') =czasie
0 jeśli x i x‘rzeczywistym
są przesłonięte, = 1/d w przeciwnym wypadku, d = odl. między punktami x i x'
e(x, x') – intensywność emitowana przez x' do x
• Automatycznie generuje także cienie obiektów
r(x, x ',x'') – intensywność światła odbitego z x'' do x przez x'
S – wszystkie
punkty
wszystkich
powierzchniach odbijających światło
rzucane
nanainne
powierzchnie
2
Przykładu użycia ray tracing
Źródło: http://hof.povray.org/
Co dalej?
• Studium przypadku: wizualizacja funkcji z = f (x,y)
• Fizyka zbioru punktów materialnych
(układ słoneczny, lina, symulacja lotu)
• Wczytywanie obiektów z pliku
• Stencil Buffer: lustro, cienie rzucane przez obiekty
• PixelShader, VertexShader
Download