Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Teksturowanie w grafice komputerowej Michał Radziszewski.

Podobne prezentacje


Prezentacja na temat: "Teksturowanie w grafice komputerowej Michał Radziszewski."— Zapis prezentacji:

1 Teksturowanie w grafice komputerowej Michał Radziszewski

2 Plan prezentacji ► Cel użycia tekstur ► Mapowanie tekstur ► Filtrowanie – rekonstrukcja, prefiltrowanie ► Próbkowanie losowe ► HDRI ► Pełne widmo ► Kompresja tekstur ► Teksturowanie proceduralne

3 Cel użycia tekstur ► Poprawa jakości grafiki ► Szczegółowe obrazy bez konieczności wykorzystania ogromnej ilości wielokątów ► Głównie kolor, ale nie tylko  Niezależny kolor matowy i kolor połysku  Siła połysku  Przezroczystość  Mapowanie nierówności / przemieszczeń  I wiele innych

4 Tekstury – kolor

5 Tekstury – przezroczystość © Plus3D

6 Mapowanie przemieszczeń © William Donnelly

7 Mapowanie tekstur ► Podstawowy algorytm mapowania na płaskie wielokąty, historycznie – brak korekcji perspektywy ► Mapowanie ogólne – dwuwymiarowa powierzchnia musi być parametryzowalna ► Tekstury trójwymiarowe

8 Tekstury trójwymiarowe

9 Filtrowanie ► Rekonstrukcja – współrzędne teksturo- wanego punktu na ogół niecałkowite ► Należy zrekonstruować wartość tekstury w dowolnym punkcie  Obrazy często nie są zapisami poprawnie (zgod- nie z tw. Shannona) próbkowanego sygnału  Teoretycznie idealny filtr oparty o funkcję sinc może powodować ‘dzwonienie’

10 Filtrowanie – rekonstrukcja ► Należy zrekonstruować wartość tekstury w dowolnym punkcie – cd.  W praktyce używane są filtry gaussowskie albo wielomianowe, kompromis pomiędzy dzwonie- niem, rozmyciem a kosztem obliczeniowym

11 Filtrowanie – rekonstrukcja 1D © Matt Pharr

12 Prefiltrowanie ► Nawet idealna rekonstrukcja nie zawsze jest skuteczna ► Na skutek złożenia mapowania na wielokąt z mapowaniem na ekran rozdzielczość tekstury może ulec zmniejszeniu ► Prefiltrowanie – usunięcie z tekstury częstotliwości powodujących aliasing w ww. przypadku

13 Prefiltrowanie – cd. ► MIP mapy, trilinear filtering, anisotropic filtering © 3D Mark 2006

14 Prefiltrowanie – cd. © 3D Mark 2006

15 Prefiltrowanie – cd. © 3D Mark 2006

16 Prefiltrowanie – cd. © Extremetech

17 Próbkowanie losowe ► Stosowane wtedy, gdy nie można zastosować filtrowania analitycznego (np. map nierówności czy przeźroczystości) ► Zamienia aliasing na szum, który jest redukowany poprzez dużą ilość próbek ► Zastępuje tylko prefiltrowanie, dobry algorytm rekonstrukcji nadal jest konieczny ► Zawsze działa bezbłędnie, ale kosztowne obliczeniowo

18 Próbkowanie losowe – cd. © Matt Pharr

19 HDRI ► High Dynamic Range Imaging ► Konwencjonalne obrazy – format stałoprzecinkowy, na ogół 256 wartości  Pełna precyzja – tylko dla wartości >128  Brak detali w cieniu ► HDRI – format zmiennoprzecinkowy  Pełna precyzja niezależnie od jasności  Na ogół 16 bitów, tzw. ‘half’

20 HDRI – cd. ► Znacznie lepszy kontrast przy zachowaniu detali na najjaśniejszych i najciemniejszych elementach ► Na zwykłym projektorze niestety nie można pokazać nic poza tym: © OpenEXR

21 Pełne widmo a RGB ► Model RGB nie ma żadnego uzasadnienia fizycznego – został zaprojektowany do wyświetlania i przechowywania obrazów biorąc pod uwagę fizjologię ludzkiego oka oraz charakterystyki monitorów ► Niestety rendering w oparciu o RGB w ogólnym przypadku nie jest poprawny

22 Pełne widmo – motywacja ► Zniekształcanie kolorów – RGB poprawne tylko dla oświetlenia białego ► Zjawiska zależne od długości fali światła

23 Pełne widmo – motywacja

24 Pełne widmo – cd. ► Ale niemal wszystkie tekstury są w formacie RGB – konieczność konwersji ► Pełne widmo zawiera dużo więcej informa- cji, niż może przechować tekstura RGB ► Istnieją różne warianty takiej konwersji – każdy z nich jest ‘zgadywany’, nie da się powiedzieć który z nich jest lepszy

25 Pełne widmo – cd. ► Przykładowa konwersja  widma r(l), g(l), b(l), gdzie l – długość fali  r(l) + g(l) + b(l) = 1, 0 ≤ x(l) ≤ 1  Wynik konwersji: s(l) = R*r(l) + G*g(l) + B*b(l)

26 Pełne widmo – cd. ► Wynikiem renderingu w oparciu o pełne widmo jest obraz nie dający się wyświetlić ► Konieczna jest konwersja powrotna do RGB, na ogół poprzez przestrzeń XYZ ► Konieczność mapowania zakresu jasności oraz kolorów nie reprezentowalnych w RGB ► Najlepszy format do przechowywania takich wyników – wariant HDR

27 Kompresja tekstur ► Tekstury o wysokiej rozdzielczości zajmują dużo pamięci ► Kompresja tekstur powoduje mniejszą utratę jakości niż zmniejszenie rozdzielczości ► Kompromis pomiędzy jakością tekstur, wymaganą mocą obliczeniową a zajętością pamięci

28 Kompresja tekstur – cd. ► Wymagania  Szybkie dekodowanie (kodowanie mniej istotne)  Swobodny dostęp w przypadku śledzenia promieni (niekonieczny przy rasteryzacji) ► Kompresja bezstratna, np. PNG  Dobra do grafiki tworzonej ręcznie, zrzutów ekranu, itp., ale nie nadaje się do kompresji zdjęć, będących często podstawą tekstur  Brak swobodnego dostępu

29 Kompresja tekstur – cd. ► Kompresja stratna – np. JPG  Dobry (ok x) współczynnik kompresji dla zdjęć przy zachowaniu akceptowalnej jakości  Utrata jakości objawia się poprzez rozmycie szczegółów i rozpad obrazu na bloki 8x8 albo 16x16, jednak rozpad można skorygować  Kosztem niewielkiego (ok. 15% przy kompresji 10x) narzutu pamięciowego można uzyskać dostęp swobodny  Niezbyt wydajna dekompresja

30 Kompresja tekstur – cd. ► Format specjalizowany – np. DXT  Kompresja stratna  Jakość lepsza niż przy ograniczeniu rozdzielczości ale gorsza niż dla obrazów JPG  Optymalizowany pod kątem kart graficznych  Bardzo szybka dekompresja

31 Teksturowanie proceduralne ► Zastosowanie programu do utworzenia tekstur ► Program wykonywany jest w trakcie renderingu ► Niemal brak zużycia pamięci ► Wymagana duża moc obliczeniowa

32 Teksturowanie proceduralne © David Ebert

33 Teksturowanie proceduralne color main { return blend( blend(color([ ]), color([ ]), blend(color([ ]), color([ ]), noise(addr=8.0*$uv+16.0)* ), noise(addr=8.0*$uv+16.0)* ), color([ ]), color([ ]), marble(addr=12.0*$uv, layers=[0.375, 0.375], marble(addr=12.0*$uv, layers=[0.375, 0.375], amplitude=1.0, roughness=0.25, bright_dark=0.5, amplitude=1.0, roughness=0.25, bright_dark=0.5, c_octaves=6 c_octaves=6 )) ))*blend( blend(color([ ]), color([ ]), blend(color([ ]), color([ ]), noise(addr=8.0*$uv+48.0)* ), noise(addr=8.0*$uv+48.0)* ), blend(color([ ]), color([ ]), blend(color([ ]), color([ ]), noise(addr=8.0*$uv+128)* ), noise(addr=8.0*$uv+128)* ), marble(addr=12.0*$uv+4.0, layers=[0.375, 0.375], marble(addr=12.0*$uv+4.0, layers=[0.375, 0.375], amplitude=0.75, roughness=0.375, bright_dark=0.375, amplitude=0.75, roughness=0.375, bright_dark=0.375, c_octaves=6 c_octaves=6 )) ))}

34 Teksturowanie proceduralne ► Możliwość efektywnej kontroli nad parametrami tekstury ► Duża ilość szczegółów ► Olbrzymia różnorodność scen ► Nie zawsze łatwo da się zastosować  np. twarz człowieka  ściana z obrazem

35 Podsumowanie ► Właściwe użycie tekstur decyduje o jakości grafiki ► Bardzo ważne jest odpowiednie filtrowanie tekstur ► Warto rozważyć stosowanie bardziej zaawansowanych formatów niż 24bit RGB ► Konieczność wyważenia zużycia pamięci i mocy obliczeniowej


Pobierz ppt "Teksturowanie w grafice komputerowej Michał Radziszewski."

Podobne prezentacje


Reklamy Google