Bartosz Bazyluk POTOK RENDEROWANIA Etapy renderowania w grafice czasu rzeczywistego. Grafika Komputerowa, Informatyka, I Rok

Podobne dokumenty
Gry komputerowe, Informatyka N1, III Rok

Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38

GRAFIKA CZASU RZECZYWISTEGO Interakcja, ruch kamery, oświetlenie.

6 Przygotował: mgr inż. Maciej Lasota

Oświetlenie obiektów 3D

Animowana grafika 3D. Opracowanie: J. Kęsik.

Oświetlenie w OpenGL. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 8. Światło otaczajace. Światło rozproszone.

Światło. W OpenGL można rozróżnić 3 rodzaje światła

Model oświetlenia. Radosław Mantiuk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie

GRK 4. dr Wojciech Palubicki

Oświetlenie. Modelowanie oświetlenia sceny 3D. Algorytmy cieniowania.

Plan wykładu. Akcelerator 3D Potok graficzny

Światła i rodzaje świateł. Dorota Smorawa

OpenGL model oświetlenia

Programowanie gier komputerowych Tomasz Martyn Wykład 6. Materiały informacje podstawowe

GRAKO: ŚWIATŁO I CIENIE. Modele barw. Trochę fizyki percepcji światła. OŚWIETLENIE: elementy istotne w projektowaniu

Grafika komputerowa. Model oświetlenia. emisja światła przez źródła światła. interakcja światła z powierzchnią. absorbcja światła przez sensor

Grafika Komputerowa Wykład 6. Teksturowanie. mgr inż. Michał Chwesiuk 1/23

OpenGL Światło (cieniowanie)

OpenGL Światło (cieniowanie)

Materiały. Dorota Smorawa

Zjawisko widzenia obrazów

OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Gry komputerowe: efekty specjalne cz. 2

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Julia 4D - raytracing

Scena 3D. Cieniowanie (ang. Shading) Scena 3D - Materia" Obliczenie koloru powierzchni (ang. Lighting)

Grafika Komputerowa. Wykład 8. Przygotowanie do egzaminu. mgr inż. Michał Chwesiuk 1/32

Laboratorium grafiki komputerowej i animacji. Ćwiczenie V - Biblioteka OpenGL - oświetlenie sceny

Zaawansowana Grafika Komputerowa

Grafika realistyczna. Oświetlenie globalne ang. global illumination. Radosław Mantiuk

Bartosz Bazyluk SYNTEZA GRAFIKI 3D Grafika realistyczna i czasu rzeczywistego. Pojęcie sceny i kamery. Grafika Komputerowa, Informatyka, I Rok

Śledzenie promieni w grafice komputerowej

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

System graficzny. Potok graficzny 3D. Scena 3D Zbiór trójwymiarowych danych wejściowych wykorzystywanych do wygenerowania obrazu wyjściowego 2D.

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do

1. Prymitywy graficzne

1. Oświetlenie Materiały i powierzchnie

Efekty dodatkowe w rasteryzacji

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Synteza i obróbka obrazu. Algorytmy oświetlenia globalnego

Karty graficzne możemy podzielić na:

Mapowanie tekstur Mip-mapy (level of detail) Filtrowanie Multiteksturowanie

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie V. Biblioteka OpenGL - oświetlenie sceny

Programowanie Procesorów Graficznych

3 Przygotował: mgr inż. Maciej Lasota

GRAFIKA CZASU RZECZYWISTEGO Podstawy syntezy grafiki 3D i transformacji geometrycznych

Synteza i obróbka obrazu. Tekstury. Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych

WSTĘP DO GRAFIKI KOMPUTEROWEJ

GRK 5. dr Wojciech Palubicki

Grafika 3D program POV-Ray

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Sphere tracing: integracja z klasycznymi metodami symulacji i renderingu

Wprowadzenie do grafiki komputerowej. W. Alda

OpenGL : Oświetlenie. mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski. Szczecin, r 1/23

Modelowanie i wstęp do druku 3D Wykład 1. Robert Banasiak

Algorytmy oświetlenia globalnego

Grafika komputerowa Wykład 10 Modelowanie oświetlenia

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

a. Czym różni się sposób liczenia odbicia zwierciadlanego zaproponowany przez Phonga od zaproponowanego przez Blinna?

2 Przygotował: mgr inż. Maciej Lasota

Grafika komputerowa i wizualizacja

Grafika 3D program POV-Ray - 1 -

Treści zadań Obozu Naukowego OMG

GRK 5. dr Wojciech Palubicki

Transformacje. dr Radosław Matusik. radmat

GRAFIKA RASTROWA. WYKŁAD 1 Wprowadzenie do grafiki rastrowej. Jacek Wiślicki Katedra Informatyki Stosowanej

Architektura Procesorów Graficznych

Architektura Komputerów

Polecenie ŚWIATPUNKT - ŚWIATŁO PUNKTOWE

Zatem standardowe rysowanie prymitywów wygląda następująco:

Synteza i obróbka obrazu. Modelowanie obiektów 3D

Filtrowanie tekstur. Kinga Laurowska

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Karta graficzna karta rozszerzeo odpowiedzialna generowanie sygnału graficznego dla ekranu monitora. Podstawowym zadaniem karty graficznej jest

Tomasz Tobiasz PLAN WYNIKOWY (zakres podstawowy)

Bartłomiej Filipek

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Badanie przy użyciu stolika optycznego lub ławy optycznej praw odbicia i załamania światła. Wyznaczanie ogniskowej soczewki metodą Bessela.

Grafika komputerowa Tekstury

Wykład 4. Rendering (1) Informacje podstawowe

Techniki generowania cieni w grafice 3D z użyciem OpenGL

Obraz jako funkcja Przekształcenia geometryczne

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

GRAFIKA KOMPUTEROWA. Plan wykładu. 1. Początki grafiki komputerowej. 2. Grafika komputerowa a dziedziny pokrewne. 3. Omówienie programu przedmiotu

4/4/2012. CATT-Acoustic v8.0

Animowana grafika 3D. Opracowanie: J. Kęsik.

Animowana grafika 3D. Opracowanie: J. Kęsik.

1. Potęgi. Logarytmy. Funkcja wykładnicza

Techniki animacji komputerowej

Ćwiczenie Nr 11 Fotometria

Ustawienia materiałów i tekstur w programie KD Max. MTPARTNER S.C.

Poniżej przedstawiony został podział wymagań na poszczególne oceny szkolne:

PRZEWODNIK PO PRZEDMIOCIE

Laboratorium Optyki Falowej

I. Potęgi. Logarytmy. Funkcja wykładnicza.

Przygotowanie grafiki 3D do gier komputerowych

Transformacje obiektów 3D

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Transkrypt:

POTOK RENDEROWANIA Etapy renderowania w grafice czasu rzeczywistego. http://bazyluk.net/zpsb Grafika Komputerowa, Informatyka, I Rok

POTOK RENDEROWANIA W grafice realistycznej stosuje się zwykle podejścia oparte na śledzeniu promieni (ang. ray tracing) Dla każdego piksela wynikowego obrazu śledzony jest promień i sprawdzane jest, w jaki element sceny trafia i czy jest on oświetlony Jest to operacja niezwykle kosztowna. Istnieją jedynie bardzo ograniczone ray tracery działające w czasie rzeczywistym. Najbardziej kosztowne jest śledzenie promieni światła i ich odbić. Źródło obrazu: Wikipedia 2

POTOK RENDEROWANIA Potok renderowania geometrii (ang. rendering pipeline) stosowany w grafice czasu rzeczywistego SCENA 3D Wierzchołki wierzchołki Jest to podejście w pewnym stopniu odwrotne: Zaczynamy od geometrii i to ją rzutujemy na ekran. Przetwarzanie wierzchołków Łączenie w prymitywy prymitywy Rasteryzacja prymitywów fragmenty Operacje na fragmentach Operacje na pikselach piksele Bufor klatki OBRAZ 2D 3

POTOK RENDEROWANIA Wierzchołki Wierzchołki i operacje na wierzchołkach Geometria sceny opisana jest za pomocą wierzchołków Atrybuty (np. położenie) są poddawane przekształceniom Transformacje geometryczne Vertex shaders: np. Morphing, symulacja ruchu itp. Przetwarzanie wierzchołków Łączenie w prymitywy v1 v2 Rasteryzacja prymitywów Operacje na fragmentach v0 v3 v4 Operacje na pikselach v5 Bufor klatki 4

POTOK RENDEROWANIA Łączenie wierzchołków w prymitywy Grupy wierzchołków łączone są w prymitywy, w sposób określony przez twórcę Np. trójkąty, czworokąty, linie itp. Wierzchołki Przetwarzanie wierzchołków Łączenie w prymitywy Rasteryzacja prymitywów Operacje na fragmentach Operacje na pikselach Bufor klatki Źródło obrazu: GPU Design 5

POTOK Rasteryzacja prymitywów RENDEROWANIA Etap na którym generowane są fragmenty Próbkowanie prymitywów w przestrzeni ekranu Wierzchołki Przetwarzanie wierzchołków Łączenie w prymitywy Fragment to próbka powierzchni prymitywu, odpowiadająca jednemu pikselowi z bufora klatki Czyli wycinek powierzchni obiektu na scenie, który przyczyni się do obliczenia wyjściowej wartości piksela w buforze klatki Z fragmentem związane są interpolowane wartości atrybutów wierzchołków Rasteryzacja prymitywów Operacje na fragmentach Operacje na pikselach Bufor klatki Źródło obrazu: GPU Design 6

POTOK RENDEROWANIA Operacje na fragmentach Wierzchołki Przetwarzanie wierzchołków Wyznaczenie wartości fragmentu, która zostanie wzięta pod uwagę podczas wypełniania bufora klatki Oblicza się go na podstawie np.: Koloru wierzchołków Oświetlenia Tekstury Łączenie w prymitywy Rasteryzacja prymitywów Operacje na fragmentach Operacje na pikselach Bufor klatki Źródło obrazu: GPU Design 7

POTOK RENDEROWANIA Operacje na pikselach Wierzchołki Przetwarzanie wierzchołków Wypełnienie bufora klatki na podstawie wyliczonych wartości fragmentów dla wszystkich prymitywów Operacje takie jak np.: Test głębokości (algorytm bufora Z) Alpha blending (przezroczystość) Anti-aliasing Łączenie w prymitywy Rasteryzacja prymitywów Operacje na fragmentach Operacje na pikselach Bufor klatki Źródło obrazu: GPU Design 8

OŚWIETLENIE Techniki oświetlenia i cieniowania. http://bazyluk.net/zpsb Grafika Komputerowa, Informatyka, I Rok

Oświetlenie lokalne a globalne Techniki oświetlenia można podzielić na dwa rodzaje: Oświetlenie lokalne W grafice czasu rzeczywistego najczęściej spotyka się oświetlenie lokalne lub bardzo uproszczone formy oświetlenia globalnego. Na kolor poszczególnych punktów wpływa wyłącznie bezpośrednie oświetlenie ze źródeł światła (direct illumination) Oświetlenie globalne Na kolor wpływa bezpośrednie oświetlenie ze źródeł światła oraz światło odbite przez inne obiekty (indirect illumination) Oświetlenie globalne to technika używana w grafice realistycznej. Oświetlenie lokalne Oświetlenie globalne 10

Oświetlenie lokalne a globalne 0 odbić światła Tylko oświetlenie bezpośrednie (ang. direct illumination) Źródło obrazu: https://realtimeillumination.wordpress.com 11

Oświetlenie lokalne a globalne 1 odbicie światła Oświetlenie niebezpośrednie (ang. indirect illumination) Źródło obrazu: https://realtimeillumination.wordpress.com 12

Oświetlenie lokalne a globalne 2 odbicia światła Oświetlenie niebezpośrednie (ang. indirect illumination)...i tak dalej. Im więcej odbić, tym dokładniejsza aproksymacja oświetlenia globalnego. Źródło obrazu: https://realtimeillumination.wordpress.com 13

Oświetlenie lokalne a globalne Dlaczego odbicia promieni światła są trudne do uzyskania w grafice czasu rzeczywistego? Kolor obliczany jest we fragmentach powierzchni, które po projekcji odpowiadają pikselom bufora klatki Nie śledzimy więc promienia i jego odbić od źródła światła Czyli postępujemy niejako od końca z punktu widzenia światła (choć podejście nazywa się forward rendering) Musielibyśmy przeanalizować nieskończenie wiele możliwości! Obliczenia bazują na odcinku łączącym dany fragment ze źródłem światła 14

Źródło obrazu: Cyril Crassin, NVIDIA 15

Oświetlenie a cieniowanie Celem symulacji oświetlenia jest taka modyfikacja kolorów obiektów, aby sprawiały wrażenie oświetlonych fizycznymi źródłami światła Należy rozróżnić dwie rzeczy: Oświetlenie model matematyczny pozwalający na wyliczenie koloru z uwzględnieniem wpływu źródeł światła, cech materiału i środowiska Cieniowanie (ang. shading nie shadowing!) sposób dystrybucji koloru pomiędzy miejscami, dla których jest on wyliczony Płaskie Gouraud Phonga Źródło obrazów: http://docs.techsoft3d.com 16

Model oświetlenia Radiancja jednostka radiometryczna określająca strumień promieniowania na jednostkę powierzchni na jednostkę kąta bryłowego. [W sr-1 m-2] Lo wyjściowa radiancja Le radiancja emitowana Li radiancja nadchodząca fr funkcja rozkładu odbicia x miesjce w przestrzeni ωo wyjściowy kierunek światła ωi wejściowy kierunek światła λ długość fali światła n wektor normalny w x Ω jednostkowa półsfera wokół x t czas Modele oświetlenia są próbami rozwiązania równania renderingu, w uproszczeniu: Obliczenie radiancji wyjściowej po odbiciu przez powierzchnię w zadanym punkcie x, na podstawie nadchodzącej fali światła i cech materiału którym pokryta jest ta powierzchnia Lo ( x, ωo, λ,t ) = = Le ( x, ω O, λ,t ) + + f r ( x,ω i,ωo, λ, t) Li ( x,ω i, λ, t) (ω i n) d ωi Ω Źródło obrazu: Wikipedia 17

Model oświetlenia Najczęściej używanym modelem oświetlenia w grafice czasu rzeczywistego jest model Phonga Niezależnie od tego, czy stosujemy cieniowanie płaskie, Gouraud, czy Phonga model oświetlenia jest czymś osobnym Model Phonga opiera się na rozbiciu światła na trzy komponenty: () () () ir I A= i g ib A A A ir I D= i g ib D D D ir I S= ig ib S S S I = I A+ I D + I S Źródło obrazów: http://wikipedia.org 18

Światło i materiały Komponenty Ambient, Diffuse oraz Specular określamy zarówno dla każdego ze źródeł światła, jak i dla materiału z którego zbudowana jest powierzchnia obiektu () () () () () () lr L A= l g lb A A mr M A= m g mb lr L D= l g lb A A A A lr LS = l g lb D D D mr M D= mg mb D D D S S S mr M S= mg mb S S S Wartości RGB, najczęściej znormalizowane (czyli <0;1>) 19

Model oświetlenia Phonga Komponent Ambient Wszystkie obiekty, wszystkie powierzchnie, niezależnie od położenia czy orientacji, oświetlone są jednakowo Komponent ten służy jako bardzo (bardzo!) uproszczona symulacja oświetlenia niebezpośredniego (indirect). Komponent ambient może być użyty w bardziej zaawansowanych technikach oświetlenia, np. ambient occlusion Źródło obrazów: http://evasion.imag.fr 20

Model oświetlenia Phonga Komponent Diffuse Kolor uzależniony jest od kąta pomiędzy kierunkiem padania światła, a orientacją powierzchni w danym punkcie Zależy więc od położenia światła względem naszego obiektu oraz kąta, pod jakim ułożona jest powierzchnia obiektu w danym punkcie Jest to komponent związany z cechą tzw. powierzchni lambertowskich, a więc takich które rozpraszają światło jednakowo w każdym kierunku W rzeczywistości nie spotyka się takich idealnych powierzchni Źródło obrazów: http://evasion.imag.fr 21

Model oświetlenia Phonga Komponent Specular Związany jest z powstawaniem odbić światła, tzw. specular highlights Jest to jeden z najprostszych wyników nieregularności powierzchni nielambertowskich, które odbijają światło Zależy od kąta pomiędzy kierunkiem odbicia światła w danym punkcie powierzchni, a kierunkiem obserwacji tego punktu Przy symulacji rzeczywistych materiałów: Dla powierzchni metalicznych powinien to być kolor biały Dla innych materiałów (np. plastik) kolor powinien być zgodny z kolorem diffuse. Źródło obrazów: http://evasion.imag.fr 22

Wektory w oświetleniu Wektory przydatne przy obliczeniach związanych z oświetleniem: Wektor normalny (ang. Normal, często oznaczany jako N) Prostopadły do powierzchni w danym punkcie Prostopadły do stycznej w danym punkcie, gdy powierzchnia nie jest płaska N 23

Wektory w oświetleniu Wektory przydatne przy obliczeniach związanych z oświetleniem: Wektor normalny (ang. Normal, często oznaczany jako N) Prostopadły do powierzchni w danym punkcie Prostopadły do stycznej w danym punkcie, gdy powierzchnia nie jest płaska N styczna 24

Wektory w oświetleniu Wektory przydatne przy obliczeniach związanych z oświetleniem: Wektor światła (ang. Light, często oznaczany jako L) Kierunek od danego punktu na powierzchni obiektu do źródła światła Kierunek "padania" światła Najczęściej wektor jednostkowy (znormalizowany) Zwrot jest umowny, zależy od naszej interpretacji i implementacji L N 25

Wektory w oświetleniu Wektory przydatne przy obliczeniach związanych z oświetleniem: Wektor światła (ang. Light, często oznaczany jako L) Kierunek od danego punktu na powierzchni obiektu do źródła światła Kierunek "padania" światła Najczęściej wektor jednostkowy (znormalizowany) Zwrot jest umowny, zależy od naszej interpretacji i implementacji N L 26

Wektory w oświetleniu Wektory przydatne przy obliczeniach związanych z oświetleniem: Odbity wektor światła (ang. Reflection, często oznaczany jako R) Kąt między N a R jest taki sam, jak kąt między L a N Przydatny np. przy wyliczaniu komponentu specular który zależy od tego, czy promień odbity trafia do kamery N L R 27

Wektory w oświetleniu Wektory przydatne przy obliczeniach związanych z oświetleniem: Odbity wektor światła (ang. Reflection, często oznaczany jako R) Kąt między N a R jest taki sam, jak kąt między L a N Przydatny np. przy wyliczaniu komponentu specular który zależy od tego, czy promień odbity trafia do kamery R =2( L N ) N L N L α α R 28

Wektory w oświetleniu Wektory przydatne przy obliczeniach związanych z oświetleniem: Wektor widzenia (ang. View, często oznaczany jako V) Łączy punkt z którego obserwujemy scenę z danym punktem na powierzchni obiektu Przydatny np. przy wyliczaniu komponentu specular który zależy od tego, czy promień odbity trafia do kamery N L V R 29

Wektory w oświetleniu Wektory przydatne przy obliczeniach związanych z oświetleniem: Wektor widzenia (ang. View, często oznaczany jako V) Łączy punkt z którego obserwujemy scenę z danym punktem na powierzchni obiektu Przydatny np. przy wyliczaniu komponentu specular który zależy od tego, czy promień odbity trafia do kamery N L V R 30

Światło i materiały Komponenty Ambient, Diffuse oraz Specular określamy zarówno dla każdego ze źródeł światła, jak i dla materiału z którego zbudowana jest powierzchnia obiektu () () () () () () lr L A= l g lb A A mr M A= m g mb lr L D= l g lb A A A A lr LS = l g lb D D D mr M D= mg mb D D D S S S mr M S= mg mb S S S 31

Model oświetlenia Phonga Kolor w danym wierzchołku/fragmencie (zależnie, czy cieniowanie Gouraud, czy Phonga), oblicza się sumując wartości dla wszystkich źródeł światła: lights W tym wypadku iloczyn dwóch wektorów rozumiemy jako iloczyn ich komponentów! (jak mnożenie z kropką w MATLABie) I = (I i +I i +Ii ) i=1 A D S Dla każdego źródła światła: Komponent Ambient to prosty iloczyn wartości RGB światła i wartości RGB materiału I A= L A M A Nie zależy od kierunku padania światła! 32

Model oświetlenia Phonga Kolor w danym wierzchołku/fragmencie (zależnie, czy cieniowanie Gouraud, czy Phonga), oblicza się sumując wartości dla wszystkich źródeł światła: lights W tym wypadku iloczyn dwóch wektorów rozumiemy jako iloczyn ich komponentów! (jak mnożenie z kropką w MATLABie) I = (I i +I i +Ii ) A i=1 D S Dla każdego źródła światła: Komponent Diffuse dodatkowo zależy od współczynnika lambertowskiego, zależnego od kąta pomiędzy wektorem normalnym N a wektorem kierunku padania światła L I D =k D L D M D, k D= L N N L N L średnie kd kd bliskie 1 N L kd bliskie 0 33

Model oświetlenia Phonga Kolor w danym wierzchołku/fragmencie (zależnie, czy cieniowanie Gouraud, czy Phonga), oblicza się sumując wartości dla wszystkich źródeł światła: lights W tym wypadku iloczyn dwóch wektorów rozumiemy jako iloczyn ich komponentów! (jak mnożenie z kropką w MATLABie) I = (I i +I i +Ii ) i=1 A D S Dla każdego źródła światła: Komponent Specular zależy od spójności wektora odbitego R oraz wektora kierunku obserwacji V Wielkość rozbłysku zależy od wykładnika shininess (α) I S =k S L S M S, k S =( R V )α, R=2( L N ) N L NV L N R średnie ks V L V R ks bliskie 1 N L R ks bliskie 0 34

Wektory normalne W celu określenia skierowania punktu na powierzchni bryły, definiuje się tzw. wektory normalne Są to wektory, które są prostopadłe do powierzchni Zazwyczaj są to wektory jednostkowe 35

Wektory normalne W celu określenia skierowania punktu na powierzchni bryły, definiuje się tzw. wektory normalne Są to wektory, które są prostopadłe do powierzchni Zazwyczaj są to wektory jednostkowe Wektory normalne określa się dla wierzchołków 36

Wektory normalne W celu określenia skierowania punktu na powierzchni bryły, definiuje się tzw. wektory normalne Są to wektory, które są prostopadłe do powierzchni Zazwyczaj są to wektory jednostkowe Wektory normalne określa się dla wierzchołków Na ich podstawie można określić wpływ światła padającego w zadanym kierunku na kolor powierzchni obiektu 37

Wektory normalne W celu uzyskania łagodnych krawędzi, wektory normalne powinny być identyczne dla wszystkich ścian zbiegających się w danym wierzchołku Przykład (rzut boczny): Chcemy przybliżyć niebieską, gładką powierzchnię. (widok z boku) 38

Wektory normalne W celu uzyskania łagodnych krawędzi, wektory normalne powinny być identyczne dla wszystkich ścian zbiegających się w danym wierzchołku Przykład (rzut boczny): W tym celu posłużymy się ścianami, które są pokazane w kolorze czerwonym. 39

Wektory normalne W celu uzyskania łagodnych krawędzi, wektory normalne powinny być identyczne dla wszystkich ścian zbiegających się w danym wierzchołku Przykład (rzut boczny): Nasza "powierzchnia" nie jest gładka, ale możemy cieniować ją tak, jakby była gładka. 40

Wektory normalne W celu uzyskania łagodnych krawędzi, wektory normalne powinny być identyczne dla wszystkich ścian zbiegających się w danym wierzchołku Przykład (rzut boczny): Jeśli wierzchołki będą miały identyczne wektory normalne w obrębie ścian, w rezultacie otrzymamy ostre krawędzie. (widok z góry): 41

Wektory normalne W celu uzyskania łagodnych krawędzi, wektory normalne powinny być identyczne dla wszystkich ścian zbiegających się w danym wierzchołku Przykład (rzut boczny): W wierzchołkach wspólnych dla dwóch lub więcej ścian, stosujemy takie same (wspólne) wektory normalne. (widok z góry): 42

Wektory normalne W celu uzyskania łagodnych krawędzi, wektory normalne powinny być identyczne dla wszystkich ścian zbiegających się w danym wierzchołku Przykład (rzut boczny): W założeniu są to wektory prostopadłe do stycznej naszej pierwotnej, gładkiej powierzchni. 43

Wektory normalne W celu uzyskania łagodnych krawędzi, wektory normalne powinny być identyczne dla wszystkich ścian zbiegających się w danym wierzchołku Przykład (rzut boczny): Pomimo tego że nasza renderowana powierzchnia nie jest gładka, jest cieniowana tak jakby nią była. 44

Wektory normalne W celu uzyskania łagodnych krawędzi, wektory normalne powinny być identyczne dla wszystkich ścian zbiegających się w danym wierzchołku Przykład (cieniowanie sześcianu): Ostre krawędzie są niekiedy pożądane. Cieniowanie sześcianu z użyciem współdzielonych wektorów normalnych może dać niepożądany efekt. Źródło obrazów: http://cs.berkeley.edu 45

Światło w OpenGL Model oświetlenia Phonga jest częścią nieprogramowalnego potoku renderowania w OpenGL Włączenie obliczania oświetlenia: glenable(gl_lighting); Nieprogramowalny potok renderowania OpenGL oferuje dwa rodzaje cieniowania Cieniowanie płaskie glshademodel(gl_flat); Cieniowanie Gouraud (domyślne; per-vertex) glshademodel(gl_smooth); Nie ma możliwości włączenia cieniowania Phonga (per-fragment) nie pisząc własnych programów cieniujących 46

Światło w OpenGL W nieprogramowalnym potoku renderowania OpenGL (ang. fixed pipeline) mamy możliwość zdefiniowania przynajmniej ośmiu źródeł światła (zależy od implementacji) Do źródeł światła odwołujemy się z użyciem stałych: GL_LIGHT0, GL_LIGHT1, GL_LIGHT2,... Można też użyć sposobu: GL_LIGHT0 + 23 Aby dane źródło światła działało, musi zostać włączone: glenable(gl_light1); Domyślnie tylko GL_LIGHT0 jest włączone Poszczególne komponenty źródła źwiatła definiujemy następująco: float l1amb[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; float l1dif[4] = { 1.0f, 0.0f, 1.0f, 1.0f }; float l1spe[4] = { 0.5f, 0.5f, 0.5f, 1.0f }; gllightfv(gl_light1, GL_AMBIENT, l1amb); gllightfv(gl_light1, GL_DIFFUSE, l1dif); gllightfv(gl_light1, GL_SPECULAR, l1spe); 47

Światło w OpenGL Dodatkowo w OpenGL istnieje globalne oświetlenie typu ambient niezależne od źródeł światła Jego wartość jest dodawana do wszystkich wierzchołków, dla których używane jest oświetlenie Często warto je wyłączyć już na samym początku, aby nie myliło i nie sugerowało błędów w innych miejscach kodu float globamb[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; gllightmodelfv(gl_light_model_ambient, globamb); 48

Materiały Materiał jest cechą danego wierzchołka (analogicznie do koloru ustawianego za pomocą glcolor*()) Po ustawienia materiału i włączeniu oświetlenia, kolory wierzchołków domyślnie nie są już brane pod uwagę Oddzielnie ustawia się materiał strony przedniej i tylnej, w praktyce zazwyczaj używa się jedynie przedniej (GL_FRONT) Materiał ustawia się następująco: float mamb[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; float mdif[4] = { 1.0f, 1.0f, 0.0f, 1.0f }; float mspe[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; glmaterialfv(gl_front, GL_AMBIENT, mamb); glmaterialfv(gl_front, GL_DIFFUSE, mdif); glmaterialfv(gl_front, GL_SPECULAR, mspe); Dodatkowo można określić wartość eksponenty związanej z komponentem specular: glmaterialf(gl_front, GL_SHININESS, 20.0f); Im większe shininess, tym mniejszy rozbłysk 49

Wektory normalne W OpenGL wektory normalne definiujemy w sposób podobny do pozycji wierzchołków glnormal3f(0.0f, 1.0f, 0.0f); Definicja wierzchołków zostanie szczegółowo omówiona na następnym wykładzie! Ostatnio określony wektor normalny zostaje powiązany z każdym nowo tworzonym wierzchołkiem glnormal3f(0.0f, 1.0f, 0.0f); glvertex3f(0.0f, 0.0f, 0.0f); // normal = (0;1;0) glnormal3f(0.0f, 0.0f, 1.0f); glvertex3f(1.0f, 0.0f, 0.0f); // normal = (0;0;1) glvertex3f(0.0f, 1.0f, 0.0f); // normal = (0;0;1) glvertex3f(0.0f, 0.0f, 1.0f); // normal = (0;0;1) 50

Źródła światła Możemy wyróżnić trzy podstawowe rodzaje źródeł światła: Światła kierunkowe Wszystkie promienie są do siebie równoległe Konieczne jest zdefiniowanie kierunku świecenia W OpenGL: float lightpos[4] = { 0.0f, 0.0f, 1.0f, 0.0f }; gllightfv(gl_light0, GL_POSITION, lightpos); Ważne! Ostatni komponent pozycji musi być równy 0, wtedy źródło światła traktowane jest jako kierunkowe. Inaczej jest ono światłem pozycyjnym. Ważne! Podajemy wartości będące przeciwieństwem kierunku świecenia. W przykładzie promienie będą się rozchodzić w kierunku (0;0;-1). 51

Źródła światła Możemy wyróżnić trzy podstawowe rodzaje źródeł światła: Światła punktowe Światło pozycyjne, promienie rozchodzą się dookólnie Konieczne jest określenie pozycji źródła światła W OpenGL: float lightpos[4] = { 0.0f, 0.0f, 1.0f, 1.0f }; gllightfv(gl_light0, GL_POSITION, lightpos); Ważne! Ostatni komponent pozycji musi być równy 1, wtedy źródło światła traktowane jest jako pozycyjne. Inaczej jest ono światłem kierunkowym. 52

Źródła światła Możemy wyróżnić trzy podstawowe rodzaje źródeł światła: Światła punktowe (c.d.) Dodatkowo można określić tłumienie wraz z odległością Składa się z trzech komponentów: stałego, liniowego i kwadratowego a (d )= W OpenGL: 1 k c +k l d +k q d 2 gllightf(gl_light0, GL_CONSTANT_ATTENUATION, 2.0f); gllightf(gl_light0, GL_LINEAR_ATTENUATION, 1.0f); gllightf(gl_light0, GL_QUADRATIC_ATTENUATION, 0.5f); Tłumienie wpływa na wszystkie komponenty światła 53

Źródła światła Możemy wyróżnić trzy podstawowe rodzaje źródeł światła (c.d.): Światła stożkowe (ang. spotlights) Skierowane światło punktowe o ograniczonym kącie Oprócz pozycji, określa się także kierunek światła oraz szerokość kąta świecenia: float lightdir[3] = { 0.0f, 0.0f, 1.0f }; gllightfv(gl_light0, GL_SPOT_DIRECTION, lightdir); gllightf(gl_light0, GL_SPOT_CUTOFF, 45.0f); 54

Techniki cieniowania Cieniowanie płaskie (ang. flat shading) Podejście per-face Wykorzystywany jest tylko jeden wektor normalny Model oświetlenia rozwiązywany tylko w jednym miejscu Fragmenty pomiędzy wierzchołkami wypełniane tym samym, jednym kolorem będącym rezultatem powyższego kroku N Źródło obrazu: http://docs.techsoft3d.com 55

Techniki cieniowania Cieniowanie Gouraud (od nazwiska Henri Gouraud) Podejście per-vertex Wykorzystywane są wektory normalne w wierzchołkach Oświetlenie obliczane jest we wszystkich wierzchołkach Fragmenty pomiędzy wierzchołkami wypełniane są poprzez interpolację obliczonego koloru wierzchołków N1 N2 Źródło obrazu: http://docs.techsoft3d.com 56

Techniki cieniowania Cieniowanie Gouraud (od nazwiska Henri Gouraud) Dlaczego to podejście nie jest wystarczające? Kolor nie powinien zmieniać się liniowo, ważna jest relacja między wektorem normalnym a kierunkiem padania światła Niskiej jakości reprezentacja tłumienia, bardziej złożonych świateł i technik jak np. spotlight, specular itp. N1 Jeśli stożek światła nie trafi w żaden wierzchołek, to zostanie zignorowany! α W stożku światła nie znajduje się żaden wierzchołek N2 57

Techniki cieniowania Cieniowanie Phonga (od nazwiska Bui Thuong Phong) Podejście per-fragment Wektory normalne są interpolowane pomiędzy wierzchołkami Cały model oświetlenia jest rozwiązywany dla każdego fragmentu osobno N1... Nn Źródło obrazu: http://docs.techsoft3d.com 58

Techniki cieniowania Cieniowanie Phonga (od nazwiska Bui Thuong Phong) Jako że obliczamy wpływ światła osobno dla każdego fragmentu powierzchni, możemy dokładniej wyliczyć np. spotlight i komponent specular N1 α... Nn 59

Techniki cieniowania A gdyby móc kontrolować wektory normalne pomiędzy wierzchołkami? Podejście nazywa się mapowaniem wektorów normalnych (ang. normal mapping) i wykorzystuje specjalne tekstury Pozwala na oświetlenie powierzchni płaskiej tak, jakby nie była płaska oszczędność geometrii przy zadowalającym efekcie wizualnym Technika mapowania nierówności (ang. bump mapping) Podłoga jest prostokątem złożonym tylko z czterech wierzchołków. N1... Nn Kiedy światło się przemieści, nierówności będą inaczej oświetlone. Źródło obrazu: http://nextlimit.com 60

OŚWIETLENIE Techniki oświetlenia i cieniowania. http://bazyluk.net/zpsb Grafika Komputerowa, Informatyka, I Rok