Transcript gobr-10

Geometria obrazu
Wykład 10
Renderowanie cd.
1. Usuwanie niewidocznych powierzchni – drzewa
ósemkowe.
2. Portale.
3. Śledzenie promieni.
4. Śledzenie ścieżek.
5. Cieniowanie.
6. 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.
1. Efektywna reprezentacja voxeli (przechowujemy grupy jednorodnych
voxeli).
2. 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ć przepuszczalne 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środkach.
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.
1.
2.
3.
Łatwość zrównoleglenia programu – każdy piksel może być
przetwarzany osobno.
Łatwa realizacja CSG.
Realistyczny obraz.
Wady.
1.
2.
3.
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 kd okreś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]
Dziękuję za uwagę.
Ćwiczenia.
1.
Oszacuj liczbę iteracji, po których wartości Et(i) = Et-1(i) + j sij Et(j)
powinny się ustabilizować.
2.
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.
3.
Dla danego drzewa ósemkowego oszacuj pesymistyczny czas
zapytania algorytmu
a) lokalizującego punkt w podziale przestrzeni generowanym przez to
drzewo,
b) określającego wszystkie obszary przecinane przez dany odcinek
zapytania,
c) określającego wszystkie obszary przecinane przez dany prostokąt
zapytania równoległy do osi układu współrzędnych.