190 likes | 353 Views
Geometria obrazu Wykład 10. Renderowanie cd. Usuwanie niewidocznych powierzchni – drzewa ósemkowe. Portale. Śledzenie promieni. Śledzenie ścieżek. Cieniowanie. CSG. Drzewo ósemkowe.
E N D
Geometria obrazuWykład 10 • Renderowanie cd. • Usuwanie niewidocznych powierzchni – drzewa ósemkowe. • Portale. • Śledzenie promieni. • Śledzenie ścieżek. • Cieniowanie. • CSG.
Drzewo ósemkowe. Konstrukcja drzewa ósemkowego polega na otoczeniu całości sceny trójwymiarowej sześcianem (lub prostopadłościanem), który następnie dzielony jest na osiem przystających części. Proces ten jest rekurencyjnie powielany aż do otrzymania jednorodnych elementów. Najczęściej boki sześcianu są równoległe do osi układu współrzędnych co ułatwia obliczenia.
Zastosowanie drzew ósemkowych. • Efektywna reprezentacja voxeli (przechowujemy grupy jednorodnych voxeli). • Odrzucanie niewidocznych obiektów (dla scen ograniczonych). Algorytm. Zacznij analizę od korzenia drzewa. Jeśli sześcian odpowiadający danemu węzłowi drzewa jest niewidoczny z pozycji obserwatora, to niewidoczne jest całe poddrzewo. Jeśli przynajmniej część sześcianu odpowiadającego danemu węzłowi drzewa jest widoczna, to analizuj węzły poddrzewa odpowiadające widocznym sześcianom. Inny sposób analizy niż w przypadku drzew BSP, gdyż nie korzysta się tu z algorytmu malarskiego.
3. Wykrywanie kolizji obiektów (badamy minimalne sześciany zawierające dane obiekty). 4. Kwantyzacja kolorów (algorytm Gervautz & Purgathofer 1988). Kodujemy kolory na i-tym poziomie drzewa przez 4r+2g+b, gdzie r, g, b są i-tymi znaczącymi bitami odpowiednich barw. Tworzymy ścieżki do liści odpowiadających kolorom występującym w obrazie. Dostajemy drzewo o głębokości co najwyżej 8. Chcąc zmniejszyć liczbę kolorów postępujemy w następujący sposób: • usuwamy pojedyncze liście o największej głębokości, • łączymy sąsiadujące liście odpowiadające małej liczbie pikseli (minimalizujemy błąd), • usuwamy liście odpowiadające największej liczbie pikseli (zaburzamy nieco kolor, ale zyskujemy na rozmiarze drzewa). Kończymy, gdy liczba kolorów będzie zgodna z oczekiwaniami.
Portale. Rozważmy podział przestrzeni na wielo-ścienne obszary. Ściany wielościanów mogą być przepusz-czalne lub nie. Przepuszczalne ściany nazywamy portalami. Umożliwiają one przejście między obszarami. W celu renderowania sceny tworzymy graf sąsiedztwa dla obszarów podziału i badamy obiekty widoczne przez portale (badając kolejne obszary lub ich widzialne wycinki). Jest to dość kosztowne rozwiązanie. Podczas renderowania można skorzystać z list PVS (zbiorów potencjalnie widocznych – można je używać również z drzewami BSP i OCT ).
Śledzenie promieni (ray tracing). Jest to technika generowania fotorealistycznych obrazów trójwymiarowych scen. Opiera się na analizowaniu tylko tych promieni światła, które trafiają bezpośrednio do obserwatora.W ray tracingu rekursywnym dodatkowo bada się promienie odbite lustrzanie oraz załamane w przezroczystych ośrod-kach. Ray tracing stosuje się dla wszystkich pikseli obrazu. Aby uniknąć aliasingu (np. schodki na skośnych liniach lub brzegu) prowadzi się wiele promieni przez jeden piksel. Algorytm jest kosztowny. Jego złożoność zależy od rozmiaru obrazu, prędkości obliczania przecięcia promienia z najbliższym obiektem i rozmiaru sceny.
Algorytm. przez każdy piksel obrazu poprowadź promień od obserwatora; znajdź najbliższy punkt sceny; dla każdego źródła światła sprawdź, czy istnieje promień odbijający się w danym punkcie w kierunku obserwatora, jeśli tak, to oblicz parametry odbicia; jeśli promień trafia na obiekt przezroczysty lub odbijający, to poprowadź promień z punktu odbicia i powtórz powyższe punkty algorytmu traktując punkt odbicia jako obserwatora. [Wikipedia]
Zalety metody. • Łatwość zrównoleglenia programu – każdy piksel może być przetwarzany osobno. • Łatwa realizacja CSG. • Realistyczny obraz. Wady. • Nie uwzględnia światła rozproszonego. • Nie może modelować dyfrakcji, interferencji, rozszczepienia. • Dopuszcza tylko punktowe źródła światła.
Podobnie do ray tracingu działa path tracing (Kajiya 1986). Zamiast jednego promienia obserwator wypuszcza dużo promieni w losowych kierunkach. Dzięki temu znacznie lepiej aproksymuje globalny rozkład światła. Wadą jest większa złożoność obliczeniowa. Każdy obiekt może pochłaniać lub emitować światło. Ścieżka przestaje być analizowana, gdy przekroczy pewną długość. Wtedy, stosując funkcję BRDF (Bidirectional Reflectance Distribution Function – stosunek luminancji energetycznej mierzonej w kierunku obserwatora do natężenia napromieniowania badanego w kierunku padania promieniowania), obliczamy natężenie w danym punkcie: natężenie emitowane przez obiekt x (natężenie x BRDF).
Forward raytracing. W tej metodzie podążamy za promieniem emitowanym przez źródło światła. Daje to znacznie lepszy efekt wizualny niż zwykły ray tracing, ale wymaga znacznie większej mocy obliczeniowej.
Metoda energetyczna (radiosity). Metoda ta uwzględnia wyłącznie odbicia rozproszone, tzn. intensywność światła odbitego jest niezależna od kierunku. Dlatego uzyskane wyniki są niezależne od obserwatora, co pozwala na wielokrotną, dowolna wizualizację sceny bez ponawiania obliczeń. Metoda nie uwzględnia jednak rozbłysków, lustrzanych odbić, załamań światła itp. Scena jest podzielona na skończoną liczbę płatów (trójkątów lub prostokątów). Od sposobu i jakości podziału zależy czas obliczeń. Z płatami związane są współczynniki pochłaniania światła (pochłania – dodatni, emituje – ujemny). Dla każdej pary płatów określony jest współczynnik sprzężenia optycznego sij, który informuje, ile energii świetlnej może zostać przekazane z jednego płata do drugiego. Iteracyjnie obliczamy jasność płatów: Et(i) = Et-1(i) + j sij Et(j).
Przykład. [Wikipedia]
Cieniowanie. Powierzchnie matowe rozpraszają światło w jednakowy sposób we wszystkich kierunkach i dlatego wydają się jednakowo jasne niezależnie od kąta patrzenia. Prawo cosinusów Lamberta. Intensywność odbitego światła jest wprost proporcjonalna do cosinusa kąta między kierunkiem padania światła a wektorem normalnym do powierzchni odbijającej. I = Is+ Idkdcos , gdzie Is oznacza natężenie światła otoczenia, Id natężenie światła punktowego źródła, a kdokreśla procent światła odbitego. [Wikipedia]
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 obliczany jest w oparciu o kąt między powierzchnia ściany a kierunkiem światła, kolor ściany i oświetlenia oraz intensywność światła. Zaletą cieniowania płaskiego jest jego szybkość i prostota obliczeń. Wadą jest to, że ściana ma jednolitą barwę, co sprawia wrażenie występowania kantów i płaskich powierzchni. [Wikipedia]
Cieniowanie Gourauda (cieniowanie na zasadzie interpolowania jasności). Cieniowanie to polega na przypisaniu punktom cieniowanego wielokąta jasności obliczonej przez interpolację wartości przypisanych każdemu wierzchołkowi. Algorytm. Na podstawie wektorów normalnych sąsiadujących ścian ścian określ wektor normalny w danym wierzchołku. Oblicz jasność każdego wierzchołka. Interpoluj liniowo krawędzie wielokątów. Interpoluj liniowo ściany (zamiatając). Cieniowanie może być nieprawidłowe, gdy wnę-trza wielokątów różnią się jasnością od brzegów. [Wikipedia]
Cieniowanie Phonga. Cieniowanie to polega na interpolacji wektorów normalnych na podstawie wektorów normalnych w wierzchołkach. Daje lepszy efekt wizualny niż cieniowanie Gourauda, ale jest bardziej kosztowne. [Wikipedia]
CSG (Constructive Solid Geometry) jest technika definiowania brył poprzez łączenie innych brył z pomocą sumy, iloczynu i różnicy boolowskiej. Wynikiem takich działań jest zawsze niezdegenerowana bryła. [Wikipedia]
Ćwiczenia. • Oszacuj liczbę iteracji, po których wartości Et(i) = Et-1(i) + jsij Et(j) powinny się ustabilizować. • Dla danych dwóch drzew ósemkowych opisujących trójwymiarowe obrazy o wartościach wokseli ze zbioru {0,1}, stwórz drzewo opisujące boolowską sumę i boolowski iloczyn danych obrazów. • Dla danego drzewa ósemkowego oszacuj pesymistyczny czas zapytania algorytmu • lokalizującego punkt w podziale przestrzeni generowanym przez to drzewo, • określającego wszystkie obszary przecinane przez dany odcinek zapytania, • określającego wszystkie obszary przecinane przez dany prostokąt zapytania równoległy do osi układu współrzędnych.