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