Synteza dźwięku i obrazu SYNTEZA OBRAZU Rendering obrazu 3D Rendering Proces tworzenia dwuwymiarowego obrazu (np. na ekranie) na podstawie trójwymiarowego opisu nazywa się renderingiem. Na podstawie informacji wejściowych: geometrii sceny 3D (opisu obiektów i ich połoŝenia na scenie), połoŝenia i charakteru źródeł światła, połoŝenia i kierunku patrzenia kamery (obserwatora) Podczas renderingu tworzony jest dwuwymiarowy obraz zdjęcie sceny.
Etapy renderingu Podstawowe etapy renderingu: przekształcenia (transformacje) sceny ustawienie źródeł światła rzutowanie na płaszczyznę usuwanie niewidocznych powierzchni obcinanie widoku przekształcenie widoku rasteryzacja obliczenie barwy kaŝdego piksela obrazu Rendering etap wstępny Renderowanie całego świata 3D nie jest potrzebne. Interesuje nas tylko to, co będzie widać na zdjęciu. Dlatego przed etapem rasteryzacji (oświetlanie, cieniowanie, itp.) wykonuje się: wyznaczanie widoku ustawiamy świat tak, jak widzi go obserwator, wyznaczanie powierzchni widocznych - wyrzucamy to co jest zasłonięte lub z tyłu, obcięcie widoku wyrzucamy to co nie zmieści się w kadrze
Przekształcenia sceny Układ współrzędnych obiektu (lokalny, local space) prywatny układ wsp. danego obiektu. Układ wsp. świata (sceny, world space) opisuje scenę, na której rozmieszczane są poszczególne obiekty. Układ wsp. widoku (obserwatora, view space) - związany z widzem oglądającym scenę. Przekształcenia sceny: local world dla kaŝdego obiektu (world tr.), world view dla całej sceny (view tr.) Przekształcenia sceny Współrzędne lokalne, świata i widoku
Przekształcenia geometryczne 2D Elementarne przekształcenia geometryczne modelu na płaszczyźnie (2D): translacja (przesunięcie) skalowanie obrót (rotacja) Opis punktu w układzie współrzędnych kartezjańskich: punkt (x,y) wektor P = [x y] zaczepiony w początku układu współrzędnych Translacja (przesunięcie) Translacja (translation) punktu (x,y) do punktu (x,y ): x = x + d x y = y + d y P = P + T x' x d = + y' y d x y
Skalowanie obiektu Skalowanie (scaling): x = s x x y = s y y x' sx = y' x s y y P = S P Skalowanie: jednorodne (s x = s y ) niejednorodne (s x s y ) Obrót obiektu Obrót (rotation) o kąt θ: x = x cos θ y sin θ y = x sin θ + y cos θ x' cosθ = y' sinθ sinθ x cosθ y P = R P
Składanie przekształceń Omówione przekształcenia mogą być dowolnie składane ze sobą. Przykład: obrót obiektu wokół punktu P =(x,y ): przesunięcie P do (,) obrót o kąt θ przesunięcie (,) z powrotem do P P = T(x,y ) R(θ) T(-x,-y ) P Składanie przekształceń Przykład 2: przesunięcie P do (,) skalowanie obrót przesunięcie (,) do P 2 Składanie przekształceń nie jest przemienne!
Macierzowa reprezentacja przekształceń Przekształcenia: translacja: P = P + T skalowanie: P = S P obrót: P = R P Chcemy zapisać wszystkie operacje w postaci mnoŝeń macierzy łatwiej składać przekształcenia ze sobą. UŜywa się współrzędnych jednorodnych. Macierzowa reprezentacja przekształceń 2D przesunięcie: skalowanie: obrót: = y x d d y x y x = y x s s y x y x = cos sin sin cos y x y x θ θ θ θ
Przekształcenia pochylające Przekształcenia pochylające (sheer): pochylenie wzdłuŝ osi x: P = SH x P pochylenie wzdłuŝ osi y: P = SH y P a, b współczynniki proporcjonalności = y x a y x = y x b y x Przekształcenia afiniczne Przekształcenia afiniczne: zachowują równoległość linii (linie, które były równoległe do siebie, pozostają równoległe po przekształceniu); nie muszą zachowywać odległości i kątów Wszystkie omówione przekształcenia: translacja, skalowanie, obrót, pochylanie są afiniczne. Przekształcenia, które nie są afiniczne, nazywa się czasami przekształceniami deformującymi.
Przekształcenia w trzech wymiarach Przekształcenia obiektów w trzech wymiarach opisywane są przez macierze przekształceń o wymiarach 4 x 4. Przekształcenia: translacja o (d x,d y,d z ) skalowanie o (s x,s y,s z ) obrót wokół osi x, y, z pochylenie na płaszczyźnie xy, xz, yz Składanie przekształceń 3D MnoŜenie macierzy przekształceń. Przykład:. Stan początkowy 2. Przesunięcie P do (,,) 3. Obrót P P 2 wokół osi y 4. Obrót P P 2 wokół osi x 5. Obrót P P 3 wokół osi z 2+3 4 5
Macierze przekształceń 3D Translacja Skalowanie Obrót: oś x oś y oś z z y x T T T z y x s s s cos sin sin cos θ θ θ θ cos sin sin cos θ θ θ θ cos sin sin cos θ θ θ θ Rzutowanie Rzutowanie (projection) - transformacja obiektów 3D w obiekty 2D; tworzenie płaskiego obrazu (zdjęcia) sceny 3D. Dwa zasadnicze rodzaje rzutów: rzut równoległy rzut perspektywiczny (ortographic projection), (perspective projection)
Rzut równoległy Rzut równoległy nie zachowuje perspektywy, zachowuje kształt i rozmiar obiektów. Rodzaje rzutu równoległego (i przykłady): prostokątny ortogonalne: przedni, górny, boczny aksonometryczne: izometryczny ukośny Metoda stosowana raczej w projektowaniu CAD. Przy renderingu rzut równoległy jest prostszy, wystarczy pominąć współrzędne z. Rzut równoległy Trzy rzuty prostokątne: Rzut ukośny: Rzut izometryczny kierunek rzutowania tworzy jednakowe kąty ze wszystkimi osiami
Rzut izometryczny Rzut stosowany często w starszych grach komputerowych. Rzut perspektywiczny Rzut perspektywiczny odwzorowuje sposób widzenia człowieka (skrót perspektywiczny). Wielkość rzutu zmniejsza się przy wzroście odległości między środkiem rzutowania a obiektem. Zniekształcane są kształty i wymiary obiektów. Rodzaje: jednopunktowy dwupunktowy trzypunktowy
Bryła widzenia Bryła widzenia ograniczona jest: liniami od obserwatora do krawędzi widoku, przednią płaszczyzną obcinania, tylną płaszczyzną obcinania Elementy leŝące poza bryłą widzenia są na późniejszym etapie obcinane (clipping). Normalizacja współrzędnych Po dokonaniu rzutowania perspektywicznego, współrzędne punktów są często konwertowane do układu znormalizowanego, tak Ŝe punkty wewnątrz bryły widzenia przyjmują wartości: współrzędne x, y z zakresu [-, ] współrzędna z (głębokość) z zakresu [, ] z = : przednia płaszczyzna obcinania (najbliŝej obserwatora), z = : tylna płaszczyzna obcinania (najdalej od obserwatora)
Wyznaczanie powierzchni widocznych Przy renderingu, trójkąt będący bliŝej obserwatora musi zakryć trójkąt będący dalej (głębiej) w obrazie. Ponadto trójkąty mogą się przecinać i zasłaniać częściowo. NaleŜy zastosować algorytm wyznaczania powierzchni widocznych. W kartach graficznych najczęściej stosuje się dwa etapy wyznaczania: wstępnie usunięcie tylnych powierzchni, podczas rasteryzacji wyznaczenie zasłoniętych powierzchni za pomocą bufora głębokości (z-buffer). Usuwanie tylnych ścian MoŜna uprościć szukanie powierzchni widocznych poprzez eliminację wielokątów tylnych, które na pewno nie są widziane przez obserwatora. Ściany tylne wektory normalne skierowane od obserwatora są eliminowane Ściany przednie wektory normalne skierowane do obserwatora są zachowywane Operacja ta nazywa się backface culling.
Obcinanie Obcinanie (clipping) usuwa elementy obiektów leŝące poza bryłą widzenia. Rozpatrywane są kolejne trójkąty siatki. Trójkąt leŝy w całości wewnątrz bryły widzenia jest przepuszczany. Trójkąt leŝy w całości poza bryłą jest odrzucany. Trójkąt leŝy częściowo wewnątrz bryły jest dzielony na dwa, pozostaje tylko część zawarta wewnątrz bryły. Transformacja widoku Obliczone wartości pikseli będą zapisywane do bufora obrazu. Typowo renderowany obraz ma zająć cały obszar (cały bufor), ale moŝemy chcieć wykorzystać tylko fragment bufora (np. podzielić ekran lub zostawić miejsce na GUI). Transformacja widoku przetwarza współrzędne widoku na wsp. bufora. Obszar bufora wykorzystywany przez jeden obraz nazywa się viewport.
Rasteryzacja Mamy teraz zbiór pustych trójkątów leŝących na płaszczyźnie widoku. Rasteryzacja zajmuje się pokolorowaniem obrazu, czyli wyznaczeniem barwy kaŝdego piksela. Przeprowadzane są takie operacje jak: cieniowanie teksturowanie wyznaczanie zasłaniania (bufor głębokości) wyznaczanie cieni przezroczystość (alpha blending) wszelkie inne efekty specjalne Rasteryzacja Mamy teraz płaski obraz 2D, ale dla kaŝdego werteksa mamy informacje dotyczące sceny 3D: połoŝenie (x, y, z) kolor współrzędne tekstury (u, v) kierunek wektora normalnego Wektor normalny (normal vector) jednostkowy wektor prostopadły do płaszczyzny. Wektor normalny wierzchołka uśredniony z wektorów normalnych sąsiednich trójkątów.
Wektory normalne Wektory normalne trójkąta i werteksu Cieniowanie Cieniowanie (shading) ustalanie barwy powierzchni obiektu na podstawie: odległości od źródła światła kąta pomiędzy powierzchnią a kierunkiem promienia światła właściwości powierzchni
Cieniowanie Analogia do rysunków ołówkowych Źródła światła Wygląd końcowego obrazu będzie zaleŝał od rodzaju i połoŝenia źródeł światła. Dwa podstawowe typy źródła światła: światło otoczenia (ambient) - rozproszone, bezkierunkowe źródło światła (np. słoneczne) bezpośrednie (direct) źródło opisane przez: pozycję, kierunek, barwę Zwykle stosuje się kombinację źródła światła otoczenia oraz jednego lub więcej źródeł światła bezpośredniego.
Źródła światła bezpośredniego Podstawowe typy źródeł światła bezpośredniego: punktowe (point) promienie rozchodzą się równomiernie we wszystkich kierunkach z jednego punktu kierunkowe (directional) źródło punktowe umieszczone dostatecznie daleko od oświetlanych obiektów, tak Ŝe promienie są równoległe reflektor (spotlight) promienie są ograniczone przez stoŝek ( abaŝur ) Źródła światła bezpośredniego Punktowe Kierunkowe Reflektor
Źródła światła (c.d.) Źródła światła są teŝ określone przez: typ pozycję (punktowe i reflektory) kierunek (kierunkowe i reflektory) barwę zasadnicza barwa światła (ambient) barwa po odbiciu rozproszonym (diffuse) barwa odblasku (specular) współczynniki tłumienia Źródła światła Zjawiska związane ze światłem Zanikanie światła z odległością (np. odwrotnie kwadratowe) Odbicia światła (rozpraszające, kierunkowe) Parametry źródła światła barwa światła (temperatura) moc (zakres, tłumienie) pozycja, kierunek charakterystyka kierunkowa (reflektory)
Materiały Materiał pokrywa powierzchnię trójkąta i określa jak wpływa on na oświetlenie sceny. Właściwości materiału: odbicie światła otoczenia (bezkierunkowego) ambient reflection, odbicie światła bezpośredniego (promieni mających kierunek) diffuse reflection, emisja światła (emmision), odblaski na powierzchni (specular reflection) W praktyce określa się barwę i przezroczystość dla kaŝdej z właściwości materiału. Materiały przykład właściwości Barwa materiału (bez światła): ambient diffuse specular emmision
Prawo cosinusów Lamberta Cieniowanie wykorzystuje prawo Lamberta: intensywność odbitego światła jest wprost proporcjonalne do cosinusa kąta między kątem padania światła a wektorem normalnym do powierzchni odbijającej. f r r ( θ ) = max( cos θ,) = max( L n, ) L wektor jednostkowy padającego światła n wektor normalny Cieniowanie płaskie Cieniowanie płaskie (flat shading). Dla kaŝdego wielokąta siatki, jego barwa jest obliczana tylko raz i uŝywana do cieniowania całego wielokąta. Kolor wielokąta jest obliczany na podstawie: kąta między wektorem normalnym wielokąta a kierunkiem promienia światła, intensywnością światła barwą powierzchni barwą światła
Cieniowanie płaskie powierzchni szkieletu JeŜeli kaŝda ściana szkieletu (wielokąt) będzie cieniowana niezaleŝnie, widoczne są granice między ścianami (róŝna barwa sąsiednich wielokątów). Zwiększenie liczby wielokątów nie daje spodziewanego rezultatu (tzw. efekt pasm Macha właściwości receptorów oka). Cieniowanie płaskie z interpolacją Rozszerzenie metody cieniowania płaskiego: natęŝenie światła obliczane jest w kilku punktach wielokąta w pozostałych punktach wartość natęŝenia jest obliczana na drodze interpolacji Najprostsza metoda: wielokąt jest trójkątem obliczamy natęŝenie światła w wierzchołkach trójkąta (w werteksach) interpolujemy wartości natęŝenia dla pozostałych punktów
Cieniowanie Gourauda Cieniowanie Gourauda polega na interpolowaniu jasności albo interpolowaniu barwy. Eliminuje nieciągłości jasności sąsiednich wielokątów. Na podstawie wektorów normalnych dla kaŝdego werteksu obliczana jest barwa wierzchołków siatki. Interpolacja liniowa między wierzchołkami wzdłuŝ krawędzi między krawędziami Cieniowanie Gourauda Siatka złoŝona z 3 wielokątów (program µlathe) Cieniowanie płaskie Cieniowanie Gourauda Wadą algorytmu Gourauda są zniekształcenia w przypadku odblasków na powierzchni obiektu.
Cieniowanie Phonga Cieniowanie z interpolacją wektora normalnego. Interpoluje wektor normalny do powierzchni, nie jasność. Konieczna jest znajomość wektorów normalnych dla kaŝdego wierzchołka wielokąta Interpolacja wektora normalnego wzdłuŝ krawędzi Interpolacja wektora normalnego w wierszach między krawędziami Dla kaŝdego ze znalezionych wektorów normalnych stosuje się model oświetlenia Cieniowanie Phonga Cieniowanie Phonga daje lepsze rezultaty w porównaniu z cieniowaniem Gourauda pod względem odwzorowania odblasków na powierzchni obiektu (odbić zwierciadlanych). Znacznie większa złoŝoność konieczność obliczania wektora normalnego dla kaŝdego piksela.
Problemy cieniowania z interpolacją Wszystkie metody cieniowania z interpolacją mają wspólne problemy: szkielet wielokątowy jest widoczny wprowadzane są zakłócenia perspektywiczne wynik zaleŝy od orientacji wielokąta (mniejsze zniekształcenia przy stosowaniu trójkątów) wektory normalne do wierzchołków nie zawsze reprezentują geometrię powierzchni Porównanie metod cieniowania brak Flat Gouraud Phong
Odwzorowanie szczegółów powierzchni Zastosowanie modeli cieniowania do siatki wielokątowej pozwala uzyskać tylko gładkie, jednolite powierzchnie. Najprostszy sposób odwzorowania szczegółów: uŝycie detali wielokątowych szczegóły obrazu reprezentowane za pomocą wielokątów. Jest to metoda bardzo nieefektywna. Najczęściej stosuje się pokrywanie powierzchni wielokątów obrazami bitowymi - teksturami. Tekstury Sama siatka wielokątowa + cieniowanie dają tylko informację o kształcie obiektu. Aby nadać obiektowi odpowiedni wygląd, w modelu 3D stosuje się tekstury (textures). Są to obrazy rastrowe (bitmap), które są nakładane na powierzchnię modelu 3D (na wielokąty siatki).
Tekstury Przykład - scena bez teksturowania (tylko cieniowanie) oraz z nałoŝeniem tekstur Tekstury Tekstura jako bitmapa oraz nałoŝona na siatkę wielokątową obiektu
Odwzorowanie tekstury Odwzorowanie tekstury ang. texture mapping Odniesienie współrzędnych tekstury (2D) do współrzędnych siatki wielokątowej (3D). Tekstura (texture) dwuwymiarowa mapa bitowa zawierająca pewien obraz. Teksel (texel) kaŝdy piksel tekstury. Mapa tekstury jest określona we własnym układzie współrzędnych (u, v). Konieczność przeznaczenia duŝego obszaru pamięci na przechowywanie tekstur. Odwzorowanie tekstury Współrzędne tekstury: oznaczane jako (u, v) unormowane do zakresu [; ] dla werteksa siatki podajemy współrzędne tekstury współrzędna z zakresu (; ) wycinamy fragment tekstury współrzędna większa niŝ tekstura jest powielana Często jedną teksturę nakłada się na grupę wielokątów.
Odwzorowanie tekstury Jak to działa: mamy współrzędne piksela znajdujemy współrzędne elementu siatki, który ma być narysowany znajdujemy współrzędne teksela tekstury nałoŝonej na rysowany wielokąt próbkujemy kolor tekstury we wskazanym miejscu kolorujemy piksel MIP mapping JeŜeli tekstura jest za mała jest ona powiększana ( pikseloza ). JeŜeli jest za duŝa konieczność zmniejszenia, utrata szczegółów. MIP mapping przechowywanych jest kilka (np. 8) wersji tekstury o róŝnych rozmiarach (rozdzielczościach). Rozmiar tekstury jest dobierany w zaleŝności od tego jak duŝą powierzchnię ma pokryć tekstura. Tekstury MIP mogą być przygotowane przez twórców lub generowane automatycznie.
MIP mapping Przykłady tekstur w róŝnych rozdzielczościach Tekstura powiększona (bez MIP) Filtrowanie tekstur Wyliczamy współrzędne teksela. Jaki pobieramy kolor dla piksela? Bezpośrednie pobranie koloru teksela nearest-point sampling jest najszybsze, ale powoduje artefakty, widoczne są pojedyncze piksele. Filtrowanie tekstury kolor piksela jest obliczany metodą uśrednienia koloru kilku sąsiednich tekseli. Powoduje to wygładzenie tekstury.
Filtrowanie tekstur Filtrowanie dwuliniowe (bilinear filtering) wyznaczanie wartości kaŝdego piksela przez uśrednienie wartości wyliczonego teksela oraz czterech sąsiednich tekseli. Filtrowanie trójliniowe (trilinear filtering) uśrednianie tekseli z dwóch tekstur (MIP-maps) o róŝnych rozdzielczościach Filtrowanie anizotropowe (anisotropic filtering) jak trójliniowe, ale uśrednia teksele z obszaru zaleŝnego od kąta nachylenia wielokąta i jego odległości Filtrowanie tekstur Przykład: tekstura o rozmiarze 64 x 64 pikseli. Obliczone współrzędne (u,v) = (,37;,79) point-sampling: wsp. tekstury = (23,68; 5,56) zaokrąglamy: (24; 5) pobieramy kolor z tego teksela filtrowanie dwuliniowe: początek tak samo uśredniamy teksele: (24; 5), (23; 5), (25; 5), (24; 5), (24; 52) kolorujemy piksel obliczoną wartością
Filtrowanie tekstur Przykład: brak filtrowania tekstur (point sampling) oraz tekstury filtrowane Filtracja anizotropowa Anizotropowy zaleŝny od kierunku. F. anizotropowa bierze pod uwagę kąt, pod którym widz patrzy na teksturowaną powierzchnię (róŝne skalowanie tekstury w kierunku u i v). Potrzebne są dodatkowe poziomy mip-mappingu. Znaczne zwiększenie złoŝoności więcej obliczeń, większe zuŝycie zasobów. F. trilinear F. anizotropowa
Filtrowanie tekstur Przykłady filtrowania tekstur: dwuliniowe trójliniowe anizotropowe Tekstury jako tło (pre-rendered background) W niektórych grach komputerowych jedynie obiekty na pierwszym tle są obiektami 3D, renderowanymi w czasie rzeczywistym. Tło (scenografia) jest mapą bitową, uzyskaną poprzez rendering na etapie produkcji gry. Upraszcza to rendering w czasie grania kosztem mniej realistycznej grafiki.
Skybox Skybox jest techniką stosowaną w grach komputerowych. Gracz i jego otoczenie poruszają się wewnątrz sześcianu, którego ściany są pokryte teksturą, np. obrazem nieba. Odwzorowanie nierówności powierzchni Tekstury są zawsze gładkie. NałoŜenie na obiekt tekstury przedstawiającej np. mur z cegły nie da realistycznego efektu. Kierunek oświetlenia przy tworzeniu tekstury jest inny niŝ w końcowej scenie. Mapowanie nierówności (bump mapping) technika pozwalająca uzyskać wraŝenie nierówności powierzchni poprzez symulację przesunięcia wybranych pikseli na osi z do przodu lub do tyłu przy pomocy mapy przesunięcia (mapy nierówności).
Odwzorowanie nierówności powierzchni Mapa nierówności tekstury: stopień szarości piksela odpowiada wypukłości piksela tekstury. Stosuje się dwa rodzaje map nierówności (height map): przesunięcie tekseli tekstury na osi z (przyciemnienie lub rozjaśnienie pikseli), modyfikacja wektorów normalnych do powierzchni Mapę nierówności nakłada się razem z teksturą na powierzchnię siatki wielokątowej. Bump mapping Dwie najczęstsze realizacja BM: prostsza (emboss BM) sumuje się teksturę z jej kopią, przesuniętą wg mapy nierówności i przyciemnioną; metoda stosowana np. w prostszych w grach; bardziej złoŝona, ale dokładniejsza modyfikuje się wektory normalne w kaŝdym z punktów, wg mapy nierówności, po czym oblicza się wpływ światła; metoda stosowana przy cieniowaniu Phonga oraz w algorytmach typu raytracing.
Bump maping przykład Torus bez odwzorowania powierzchni i z wykorzystaniem techniki bump mapping Bump maping przykład 2 Bez mapowania Mapa nierówności Wynik
Normal mapping Normal mapping, nazywane teŝ Dot3 bump mapping, to odmiana metody mapowania nierówności powierzchni: wektory normalne nie są modyfikowane, lecz zastępowane wektorami zapisanymi w mapie nierówności, mapa nierówności nie jest monochromatyczna, lecz zawiera informacje dla trzech kanałów RGB Bardziej dokładne odwzorowanie powierzchni; wymaga stosowania cieniowania Phonga. Normal mapping Za pomocą metody normal mapping moŝna uzyskać dokładniejszy wygląd obiektu za pomocą mniej złoŝonej siatki wielokątowej.
Displacement mapping Displacement mapping odwzorowanie przemieszczeń zamiast imitować nierówności, metoda tworzy prawdziwe nierówności: siatka trójkątów dzielona jest na mniejsze trójkąty siatka jest deformowana zgodnie z mapą przemieszczeń, na zdeformowaną siatkę nakładana jest tekstura, która układa się na wygiętej powierzchni. Musi być zastosowane na etapie przekształceń siatki, przed rasteryzacją! Parallax mapping Parallax mapping - jeden z najnowszych algorytmów odwzorowania nierówności. SłuŜy głównie do odwzorowania obiektów typu otwór po pocisku. Polega na nałoŝeniu na teksturę jej kopii, przekształconej przez funkcję zaleŝną od informacji zapisanej w mapie wysokości i od kierunku obserwacji. Inne nazwy: Photonic Mapping, Offset Mapping, Virtual Displacement Mapping
Odbicia pomiędzy obiektami Dla zwiększenia realizmu modeluje się odbicie innych obiektów na powierzchni innego obiektu. Przykład: odbicie pokoju na powierzchni lustra lub szklanej kuli. Konieczność uwzględnienia deformacji. Algorytm tego typu nosi nazwę reflection mapping (mapowanie odbić) lub environment mapping (mapowanie środowiska). Mapowane środowisko traktowane jest jako dynamiczna tekstura, która jest obliczana w czasie rzeczywistym, a następnie nakładana na powierzchnię odbijającą. Environment mapping Dwie zasadnicze metody mapowania środowiska: mapowanie sferyczne (spherical EM) tekstura jest zdejmowana z kuli, która znajduje się nieskończenie daleko od obiektu, w którym się ona odbija ( rybie oko ) mapowanie kubiczne (cubic EM) obiekt znajduje się wewnątrz sześcianu pokrytego teksturą, piksel tekstury wyznaczany jest na podstawie przebiegu promieni
Zaawansowane techniki mapowania EMBM Environment-Mapped Bump Mapping NałoŜenie na siebie: tekstury, mapy nierówności (bump map) mapy środowiska (environment map) Przykładowe efekty: odbicia w zafalowanej wodzie odbicia na powierzchni rozgrzanego asfaltu jezdni Zasłanianie obiektów RóŜne obiekty mogą się zasłaniać nawzajem. Chcemy narysować te fragmenty, które są widoczne (są najbliŝej obserwatora). Mamy informację o współrzędnej z wierzchołków siatki wielokątowej. Moglibyśmy wyznaczyć trójkąt, który jest bliŝej obserwatora i narysować go. Ale co zrobić gdy trójkąty przecinają się ze sobą?
Algorytm malarza Algorytm malarza (painter s algorithm) - naiwne podejście do problemu zasłaniania. Wszystkie obiekty są sortowane wg. połoŝenia na osi z. Obiekty są malowane w kolejności od połoŝonych najgłębiej do połoŝonych najbliŝej Algorytm nie radzi sobie z przecinającymi się płaszczyznami. Algorytm bufora głębokości (z-buffer) Potrzebne dwa obszary pamięci o takim samym rozmiarze: pamięć obrazu F wartość barwy bufor z wartość z dla kaŝdego piksela F Schemat działania: inicjalizacja bufora z (maksymalna głębokość) przeglądanie kolejnych trójkątów, piksele wiersz po wierszu jeŝeli współrzędna z punktu jest większa od zapisanej w buforze, bufor jest uaktualniany nową wartością, a piksel jest wpisywany do pamięci obrazu.
Algorytm bufora głębokości Ilustracja działania metody Algorytm bufora głębokości Przykład obrazu i bufora głębokości. Implementacja bufora z w kartach graficznych: sprzętowa, bufor 24-bitowy lub 32-bitowy (przy 6 bitach występują zniekształcenia).
Bufory głębokości z-buffer i w-buffer Bufor z (z-buffer) bazuje na unormowanych współrzędnych z. Rozkład tych współrzędnych jest nieliniowy większość przypada na początkowy zakres. MoŜe te powodować błędy w planach bliskich (przenikanie się obiektów). Bufor w (w-buffer) eliminuje te błędy kosztem większej złoŝoności obliczeniowej. Wykorzystuje współrzędne w obliczane podczas przekształcenia (rzutowania) perspektywicznego. Cienie obiektów Cienie dodają realizmu i pozwalają ustalić połoŝenie obiektów.
Shadow mapping Algorytm mapowania cieni (shadow mapping) działa w dwóch etapach: wyznaczenie mapy cieni - dokonuje się renderingu (bez wyznaczania koloru) z punktu widzenia źródła światła, zapisuje się wynik w mapie cieni; podczas właściwego renderingu (z punktu widzenia obserwatora) dokonuje się projekcji mapy cieni na obraz, barwa pikseli obrazu jest modyfikowana zgodnie z tą mapą. NaleŜy odróŝniać shadow mapping od cieniowania (shading). Shadow mapping Obraz bez cieni Wyznaczenie mapy cieni Projekcja mapy cieni Obraz z cieniami
Bryła cienia (shadow volume) Shadow volume (bryła cienia) to inna metoda tworzenia cieni. Jest bardziej dokładna, ale bardziej złoŝona. Wyznaczenie bryły cienia - za pomocą linii łączących źródło światła z werteksami wielokątów. Następnie wyznaczenie elementów sceny, które z punktu widzenia obserwatora leŝą wewnątrz bryły cienia. Bryła cienia (shadow volume) Implementacja praktyczna: renderowana jest scena tak, jakby cała była w cieniu; dla kaŝdego źródła światła tworzona jest maska, zapisywana w buforze maski (stencil buffer), maska ma otwory w miejscach, w których nie ma cienia; scena jest renderowana ponownie, ale z oświetleniem, w miejscach nie przykrytych przez maskę. Istnieją róŝne algorytmy róŝniące się metodą tworzenia maski (przyspieszenie obliczeń).
Bryła cienia Przykład: http://developer.nvidia.com/object/robust_shadow_volumes.html Przezroczystość (alpha blending) Powierzchnie mogą być przezroczyste lub półprzezroczyste (np. szkło) mogą częściowo przepuszczać światło. Obiekty zasłaniane mogą być więc częściowo widoczne. Powierzchnie przezroczyste obiekty za nimi są widoczne z ew. lekkim załamaniem promieni światła Powierzchnie półprzezroczyste promienie światła zmieniają kierunki (załamanie), obiekty z tyłu są rozmazane
Przezroczystość bez załamań Nie uwzględniane są zjawiska związane z załamaniem promieni światła. Efekt nie jest realistyczny, ale często efekt jest bardziej uŝyteczny niŝ w metodzie z załamaniami. Przezroczystość interpolowana interpolacja liniowa barwy piksela obliczonej dla wielokąta zasłaniającego i zasłanianego, biorąc pod uwagę współczynnik przezroczystości. Przezroczystość filtrowana wielokąt traktowany jest jak filtr przezroczysty, który selektywnie przepuszcza róŝne długości fali Przezroczystość z załamaniem Uwzględnienie załamań promieni światła jest trudniejsze róŝnica linii widzenia geometrycznej i optycznej. Konieczność modelowania dyspersji róŝny kąt załamania dla fal o róŝnej długości fali. Modelowanie polega na obliczaniu wektora załamania promieni światła.
Efekty atmosferyczne Atmospheric effect modyfikacja oświetlenia spowodowana działaniem efektów takich jak: mgła dym ogień opary falowanie rozgrzanego powietrza deszcz zmętnienie lustra wody refleksy świetlne rozmycie ruchu Systemy cząsteczkowe Systemy cząsteczkowe (particle system) słuŝą do generowania efektów takich jak ogień, dym, chmury, iskry i inne trudne do uzyskania klasycznymi metodami renderingu. Definicja emitera pozycja, szybkość generowania cząsteczek, kierunek, czas Ŝycia, zmiany koloru, itp. Symulacja tworzenie kolejnych etapów rozwoju systemu Rendering rysowanie cząsteczek
Systemy cząsteczkowe KaŜda cząsteczka posiada parametry, np. pozycja kierunek (algorytm + losowy) stan (np. rodzaj, aktywność) czas Ŝycia (po którym cząsteczka ginie) Sama cząsteczka jest najczęściej niewielką teksturą (sprite), nakładaną na obraz w obliczonej pozycji (nie na siatkę obiektu!). Odwzorowanie mgły Efekt mgły (fog) symuluje widoczność obiektów w naturze: bliŝsze obiekty są bardziej wyraźne dalsze obiekty są bardziej przysłonięte przez mgłę. Brak efektu mgły Symulacja mgły
Odwzorowanie mgły Metody symulacji mgły: Fog Table (Pixel Fog) starsza metoda, obliczenia wykonywane są dla kaŝdego piksela przy pomocy informacji o głębi piksela zapisanej w buforze. Jest to efekt dodatkowy, nakładany na wynik rasteryzacji. Fog Vertex efekt mgły obliczany jest dla kaŝdego wierzchołka wielokąta, a następnie aproksymowany dla pikseli wielokąta, po czym jest on uwzględniany przy ustalaniu barwy piksela. Ta metoda jest częścią renderingu. Oświetlenie wolumetryczne Volumetric lighting Algorytm umoŝliwiający uzyskanie efektu promieni światła prześwitujących np. przez chmury lub przez okno. Strumień światła ze źródła jest traktowany jako przezroczysty stoŝek, posiadający pewną objętość. Obiekty znajdujące się wewnątrz tego stoŝka (dym, chmury, para wodna) mają moŝliwość przepuszczania światła.
Okluzja otoczenia Okluzja otoczenia (ambient occlusion) - zaciemnienie obszarów w zagłębieniach, kątach oraz pod i pomiędzy powierzchniami. Inne efekty Caustic promienie światła odbite lub załamane przez zakrzywioną powierzchnię, np. światło na wodzie.
Inne efekty Subsurface scattering efekt promieni świetlnych, które wnikają do obiektu, odbijają się kilkakrotnie, po czym opuszczają obiekt. Metoda pozwala symulować wygląd np. skóry człowieka czy przedmiotów z marmuru. Inne efekty Lens flare zjawisko odbicia światła w systemie soczewek. Motion blur rozmycie obiektów szybko poruszających się Głębia ostrości (depth of field) rozmycie obiektów znajdujących się poza pierwszym planem
Anti-aliasing Przy rasteryzacji stosuje się często anti-aliasing, który wygładza ukośne linie. Przy rasteryzacji rozmywa się krawędzie wielokątów siatki. Anti-aliasing jest często dokonywany sprzętowo. Bibliografia Microsoft: Dokumentacja DirectX 9.c Frank D. Luna: Introduction to 3D Game Programming with DirectX 9.c A Shader Approach. Wordware Publishing, 26 Wendy Jones: Beginning DirectX. Premier Press, 24 Jeremy Birn: Cyfrowe oświetlenie i rendering. Helion 27 J. Foley, A. van Dam, S. Feiner, J. Hughes, R. Phillips: Wprowadzenie do grafiki komputerowej. WNT, 2 Wikipedia: http://en.wikipedia.org/wiki/category:3d_computer_graphics Internet Materiały wyłącznie do uŝytku wewnętrznego dla studentów przedmiotu Synteza dźwięku i obrazu, prowadzonego przez Katedrę Systemów Multimedialnych Politechniki Gdańskiej. Wykorzystywanie do innych celów oraz publikowanie i rozpowszechnianie zabronione. This presentation is intended for internal use only, for students of Multimedia Systems Department, Gdansk University of Technology, attending the Sound and image synthesis course. Other uses, including publication and distribution, are strictly prohibited.