Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
Wybrane aspekty teorii
grafiki komputerowej -
dążenie do wizualnego
realizmu
Mirosław Głowacki
Przetwarzanie – obraz
dynamiczny
� Czasami obraz nie jest obrazem statycznym. W przypadku animacji w celu skrócenia czasu obliczeń kolejnej klatki, wszystkie opisywane wcześniej przekształcenia wykonywane są tylko raz w trakcie tzw. preprocesingu
Przetwarzanie
� Dzięki temu kolejne rachunki, jeżeli tylkotrójwymiarowy obraz nie zmienił się w znaczący sposób, sprowadzają się do:
� zmiany punktu widzenia obserwatora
� zmiany położenia niektórych obiektów
� ponownych kalkulacji oświetlenia
� ewentualnych przesunięć kadrowaniaoraz
� powtórzenia renderingu
Rendering
� Na przygotowane w fazie operacji geometrycznych złożone z trójkątów szkieletowe bryły akcelerator�nakłada wypełnienie pustych przestrzeni
wewnątrz wielokątów oraz
�symuluje światła padające na wielokąty
� Ten kolejny ciąg operacji w strumieniu graficznym 3D nosi nazwę renderingu
Rendering
� Rendering można podzielić na
trzy główne procesy:
�teksturowanie
�oświetlanie i cieniowanie
�dodawanie efektów specjalnych
Teksturowanie
� Najważniejszym i najbardziejskomplikowanym etapem renderingu jest teksturowanie
� Zabieg ten polega na nakładaniu na trójwymiarowy szkielet płaskich obrazków nazywanych teksturami mających imitować spotykane w realnym świecie powierzchnie
Mapowanie tekstur
� Cały proces mapowania (nakładania) tekstursprowadza się do odpowiedniego owijania brył teksturami.
� Problem polega na tym, iż wszystkie elementy trójwymiarowej sceny składają się z trójkątów o różnych rozmiarach.
� Tekstury należy więc dopasować dowielkości odpowiadającej poszczególnych trójkątów.
� Proces ten nazywa się wycinaniem (ang. clipping)
Wycinanie (clipping)
� Polega on na wyodrębnieniu trójkąta o żądanej wielkości z kwadratowejzazwyczaj tekstury
� W tym celu określane są współrzędne trzech punktów na teksturze, a następnie przyporządkowuje się je stosownym wierzchołkom teksturowanego trójkąta
Wycinanie (clipping)
Teksturowanie
� MIP mapping
� Próbkowanie punktowe
� Filtrowanie
� Korekcja perspektywy
� Mapowanie wybojów
� Alpha-blending
Teksturowanie - MIP mapping
� Ponieważ z pierwotnych tekstur, które mają ściśle określony rozmiar, np. 8×8 lub 64×64 piksele, prawie nigdy nie da się wyciąć odpowiedniego pod względem rozmiarówtrójkąta do mapowanej przestrzeni
� Mając to na uwadze oraz aby zapobiec ciągłemu przeskalowywaniu tekstur opracowano mechanizm MIP mappingu (Multum in Parvo -wiele w niewielu)
MIP mapping
� Przed renderowaniem sceny z każdej tekstury tworzonych jest kilka (zazwyczaj osiem) tzw. map MIP.
� Mapy MIP to nic innego jak zmniejszone bitmapy utworzone na podstawie tekstury wzorcowej.
� Każda kolejna mapa MIP jestczterokrotnie mniejsza od poprzedniej.
MIP
mapping
MIP Mapping
� Jeśli pierwsza miała rozmiar 256×256 pikseli, to następna będzie miała wielkość128×128 punktów, kolejna 64×64 itd.
� Przy nakładaniu na trójkąt tekstury do wycinania wybierana jest jedna lub dwie sąsiednie ze zbioru map MIP.
� Do poteksturowania obiektu trójwymiarowego używa się tej tekstury, której rozdzielczość jest wystarczającado reprezentowania obiektu obserwowanego z pewnej odległości.
� Właśnie od odległości zależy, która mipmapa zostanie wybrana.
� Im obiekt znajduje się dalej od obserwatora, tym mniejszą zajmuje powierzchnię i tym mniejsza teksturajest potrzebna.
MIP Mapping
� Przykładowo:� Jeśli obiekt ma wymiary ok. 10x13 pikseli, to do jego
poteksturowania wystarczy tekstura 16x16,
� Jeśli obiekt ma ok. 54x40 to wystarcza tekstura 64x64 itd.
� W obu przykładach nie ma sensu odwoływać się do tekstury o najwyższej rozdzielczości (powiedzmy 256x256) bo i tak duża część pikselinigdy nie będzie widoczna.
� W praktyce najczęściej nie jest wybierana jednamipmapa, ale brane są dwie najbliższe i dokonywana jest ich interpolacja.
Przykładowe MIP mapy
MIP mapping
� Tekstura nałożona: bez MIP mappingu (z lewej) i z MIP mappingiem (z prawej)
MIP Mapping
� Zalety mipmappingu:
� Wstępne usuwanie zakłóceń skalowanych tekstur, co ma istotne znaczenie w grafice czasu rzeczywistego (gry komputerowe, symulatory lotu).
� Zwiększenie prędkości teksturowania, ponieważ przetwarzana jest o wiele mniejsza liczba pikseli tekstury.
� Wady:
� Zwiększenie wymagań pamięciowych o 1/3.
� Mipmapping jest implementowany sprzętowo w kartach grafiki.
Teksturowanie - próbkowanie
punktowe
� Zastosowanie MIP mappingu nie rozwiązuje w pełni problemu dokładnego dopasowania tekstur do wielkości trójkątów.
� Dlatego bardzo często przy teksturowaniu, pojedyncze teksele, czyli najmniejsze elementy (punkty) tekstury, powielane są w różnych miejscach wielokąta.
� Technika przyporządkowania każdemu punktowi trójkąta tylko jednego teksela tekstury i w razie potrzeby kilkukrotnego powielenia punktów nosi nazwę próbkowania punktowego (ang. point sampling texturing)
Próbkowanie punktowe
� Wadą tego sposobu jest to, że powieleniejednego punktu do kilku objawia się efektem potocznie nazywanym pikselozą – widocznestają się kolorowe piksele
� Jest to szczególnie wyraźne wtedy, gdy teksturamusi pokryć obszar znacząco większy niż ona sama
� Aby uniknąć powyższego efektu korzysta się z tzw. filtrowania tekstur
Teksturowanie - filtrowanie
� Filtrowanie tekstur można dokonać na różne sposoby. Do najważniejszych należą:
� filtrowanie dwuliniowe
� filtrowanie trójliniowe
� filtrowanie anizotropowe
Filtrowanie dwuliniowe
� (ang. bilinear filtering) Polega na
przyporządkowaniu każdemu
punktowi teksturowanego trójkąta nie
jednego koloru teksela, ale barwy
otrzymanej w wyniku interpolacji
czterech sąsiednich tekseli tekstury
Filtrowanie trójliniowe
� Bardziej zaawansowaną metodą jest filtrowanie trójliniowe (ang. Trilinear filtering) polegające na tym, że do ujednolicania barwy zamiast sąsiednich tekseli stosuje się dwie kolejne mapy MIP
� Najpierw poddaje się interpolacji dwuliniowej mapę pierwszą, bezpośrednio mniejszą -później drugą, bezpośrednio większą� np. jeśli trójkąt wymaga wycinania z mapy o
rozdzielczości 100 tekseli, to brane są pod uwagę mapy 64x64 i 128x128
� Dopiero uśredniony wynik obu tych operacji (w sumie interpolujemy wartość ośmiu tekseli) nakłada się na mapowany trójkąt
Filtrowanie anizotropowe
� Filtrowanie to (ang. anisotropic filtering) jest najbardziej zaawansowaną metoda filtrowania wymagająca największej mocy obliczeniowej.
� Bierze ona dodatkowo pod uwagę orientację przestrzenną tekseli względem obserwatora, dzięki czemu obszary, z których interpolowane są brakujące wartości, układają się w kształtelipsy, prostokąta lub rombu (długa oś wyznacza kierunek)
Filtrowanie anizotropowe
� Filtrowanie anizotropowe umożliwia zatem zachowanie oryginalnego kształtu tekstur również na obiektach znajdujących się pod pewnym kątem w stosunku do obserwatora
Teksturowanie - korekcja
perspektywy
� Podczas odwzorowania dużych trójkątów znałożonymi teksturami (np. ściany, sufity lub podłogi) znajdujących się niemal prostopadle do płaszczyzny ekranu często występują problemy z zachowaniem odpowiedniej perspektywy
� Elementy sceny rozjeżdżają się, dając dziwne powykrzywiane wzory spowodowane załamywaniem się tekstur lub ich znikaniem (np. w scenach z długim tunelem).
� Błąd ten wynika ze złej metody uwzględnienia położeniawielokąta w przestrzeni.
Teksturowanie - korekcja
perspektywy
� W celu wyeliminowania tych niepożądanych efektów stosuje się algorytmy korekcji perspektywy (ang. perspective correction)
� Metoda ta polega na stworzeniu wirtualnegopunktu w nieskończoności.
� Teraz każda linia poprowadzona z dowolnego miejsca obrazu musi zbiec się w owym punkcie.
� Dopiero wówczas akcelerator, zgodnie z zasadą rzutu perspektywicznego, nakłada tekstury już bez tych nie chcianych deformacji.
Teksturowanie - korekcja
perspektywy
� brak
perspektywy
� po korekcji
perspektywy
� po filtrowaniu
dwuliniowym
Mapowanie wybojów
� Mapowanie wybojów powoduje złudzenie, że
obiekt nie jest gładki, a chropowaty. Gdy na
niego patrzymy zdaje nam się, że widzimy
wyboje, rysy czy rowki
� Z jednej strony wybój (wypukłość) będzie jasny,
z drugiej ciemny. Należy pamiętać, że
mapowanie wybojów to efekt manipulujący
wyłącznie grą światła a nie wielokątami
Mapowanie wybojów
� Proces ten można podzielić na:� Mapowanie wypukłości (bump mapping)
� Tłoczenie wybojów (emboss bump mapping)
� Środowiskowe mapowanie wybojów (Environment-Mapped Bump Mapping, EMBM)
� DOT 3 mapping
� Mapowanie środowiska
� Multiteksturowanie
� Mapowanie trójwymiarowe
Mapowanie wypukłości
� W metodzie tej dla każdej tekstury tworzone są tzw. mapy wybojów (ang. bump maps).
� Są one płaskimi bitmapami, podobnie jak zwykłe tekstury, jednak jasność poszczególnych pikseliokreśla położenie (wysokość) tekseli nad płaszczyzną tekstury
� Następnie mapa wybojów jest nakładana na pierwotną teksturę, dzięki czemu otrzymujemy dodatkową informację o usytuowaniu każdego teksela względem płaszczyzny tekstury.
Mapowanie wypukłości
� Najprostszym rodzajem mapowania wypukłości jest tzw. pre-calculated bump mapping, sprowadzającym się do obliczenia mapyoświetlenia.
� W miejscach, gdzie występuje zagłębienie, teksel jest przyciemniany, a w miejscach wypukłości rozjaśniany
� Technika ta pozwala dość dobrze (i przede wszystkim niewielkim nakładem obliczeniowym) odwzorować nieruchome, prostopadłe lub znajdujące się nawet pod dość znacznym kątem względem obserwatora obiekty.
Tłoczenie wybojów
� Sprawdza się ono dobrze wtedy, gdy na tekstury spoglądamy pod niewielkim kątem lub są one nakładane na poruszające się obiekty. Tłoczenie realizowane jest w trzech etapach� W pierwszym z nich z mapy opisującej wygląd wypukłości
(mapy wybojów) tworzone są dwa monochromatyczne obrazy.
� Jeden zostanie wykorzystany do przedstawienia obszarów jaśniejszych, a drugi będzie odpowiadał za fragmenty zacienione
� W kolejnej fazie obie bitmapy przesuwane są o kilka pikseli względem siebie (jedna do tyłu, druga do przodu) wzdłuż kierunku padającego światła
� Ostatni z etapów polega na zlaniu rozsuniętych bitmap(przy wykorzystaniu omawianego w dalszej części prezentacji alpha-blendingu) z właściwą teksturą obiektu
Tłoczenie wybojów
Od lewej: obiekt 3D obłożony zwykłą teksturą,
obiekt 3D obłożony mapą wybojów, obiekt 3D
obłożony mapą wybojów i teksturą
Torus z wgłębieniami – funkcja
wgłębień określona ręcznie
Truskawka z wgłębieniami –
funkcja wgłębień określona ręcznie
Środowiskowe mapowane wybojów
� W bardziej zawansowanych metodach bump-
mappingu dodatkowo wykorzystuje się tzw.
mapy środowiska (ang. environment maps).
� Mapowanie środowiskowe w połączeniu z
bump-mappingiem pozwala otrzymać zaawansowane efekty, takie jak falująca
powierzchnia wody, w której odbijają się
nadbrzeżne drzewa.
Środowiskowe mapowane wybojów
� Uzyskanie takich rezultatów możliwe jest dzięki nałożeniu w jednym przebiegu trzech bitmap:� podstawowej tekstury,
� mapy wypukłości oraz
� mapy środowiska.
� Mapa wybojów nakładana jest na mapę środowiska, w wyniku czego powstaje zaburzona mapa środowiska (ang. perturbed environment map), a następnie łączona jest ona z właściwą teksturą nakładaną na obiekt
Środowiskowe mapowane wybojów� I ćwiartka – tekstura
� III ćwiartka – mapa wybojów
� IV ćwiartka – sumaryczna mapa w środowisku
Środowiskowe mapowane wybojów
� Mapy środowiska zawierają w sobie informacje m.in. o refleksach na powierzchni przedmiotu od rozstawionych na generowanej scenie wielokolorowych:
�świateł lustrzanych,
�odbić i refleksów świetlnych, które pochodzą
od innych przedmiotów otaczających obiekt
Środowiskowe mapowane wybojów
� W procesie mapowania środowiskowego dzięki nałożeniu na pierwotną teksturę przedmiotu bitmapy środowiskowej uzyskujesię wszelkiego rodzaju efekty luster, szklanych drzwi, itp.
Środowiskowe mapowane wybojów
� dla każdej powierzchni obliczany jest kąt odbicia
padającego światła (dla wielu źródeł wyliczany
jest najpierw wektor wypadkowy).
� następnie otrzymana wartość modyfikowana jest
zgodnie z danymi zapisanymi w tzw. mapie
odbić (zawiera informacje o połyskujących
fragmentach powierzchni)
� na koniec całość łączona jest z właściwą
teksturą obiektu.
Środowiskowe mapowane wybojów
� W przypadku mapowania środowiskowego
obrazy przedmiotów na lśniącej powierzchni
wyglądają dobrze do momentu, gdy ani
obserwator, ani przedmiot nie zmieniają swojego
położenia.
� W chwili gdy przedmiot nieznacznie się
przemieści, wystarczy przesunąć punkt
zaczepienia tekstury.
� Jeśli jednak przemieszenie jest zbyt duże,
odbicia ulegają silnemu zniekształceniu.
DOT 3 mapping
� Rozwiązaniem powyższego problemu polega na nakładaniu na bryłę nie jednej, ale sześciu tekstur odpowiadających obrazowi dolnej, górnej i czterech bocznych części otoczenia obiektu.
DOT 3 mapping
Mapowanie środowiska
� Polega na nakładaniu na obiekt teksturyprzedstawiającej otoczenie tego obiektu. Efekt ten powoduje, iż obiekt sprawia wrażenie refleksyjnego, "metalicznego„
Mapowanie środowiska
Mapowanie środowiska
Multiteksturowanie
� Podczas teksturowania, w większości przypadków na jeden obiekt nakładanych jest kilka różnych bitmap.
� Im więcej mapowanych jest tekstur, tym potrzeba większej mocy obliczeniowej akceleratora.
� Szybkie chipy graficzne przeznaczone do użytku domowego umożliwiają mapowanie do kilkudziesięciu gigatekseli w ciągu jednej sekundy.
� Tę podaną wartość nazywa się współczynnikiem fillrate i określa ona teoretyczną szybkość procesu wypełniania wielokątów przez procesor graficzny.
Mapowanie trójwymiarowe
� W pakiecie Microsoft DirectX począwszy od wersji 8.0 programiści uwzględnili obsługę całkiem nowego rodzaju tekstur, a mianowicie tekstur 3D
� Podobne funkcje zaimplementowano też w bibliotekach OpenGL 1.2
� Oczywiście techniki tekstur trójwymiarowych nie są niczym nowym, gdyż z obrazów tego typu, nazywanych często warstwowymi lub wolumetrycznymi, od dłuższego czasu korzystają lekarze wykonujący komputerową tomografię
Mapowanie trójwymiarowe
� Nowa technika oznacza przede wszystkim, iż tekstury przestają wyłącznie okrywać powierzchnię przedmiotów, ale wnikają wgłąb nich.
� W przypadku tekstur 3D proces obliczeniowy jest wyjątkowo prosty. Aby obejrzeć wnętrze bryły należy części tekseli (wokseli) nadać atrybut przezroczystości.
� Można wtedy zobaczyć wszystkie najdrobniejsze detale, gdyż budowa i faktura wnętrza zawarte są w mapie wolumetrycznej.
Mapowanie trójwymiarowe
� Objętość trójwymiarowych tekstur jest jednak wyjątkowo duża. Np. 32-bitowa dwuwymiarowa tekstura o wymiarach 16×16 pikseli ma objętość 1024 bajtów.
� Po dodaniu trzeciego wymiaru (16×16×16 punktów) rozrasta się jednak do 16 384 bajtów!
� Tak znaczne pojemności przetwarzanych obiektów wymagają od systemu olbrzymiej przepustowości magistrali pamięci i stosowania algorytmów kompresji tekstur
Alpha-blending
� Aby określić stopień przezroczystości tekstury wykorzystywany jest tzw. kanał alfa, a cała technika nazywana jest alpha-blendingiem
� Kanał alfa jest parametrem określającym stopień przezroczystości nakładanej tekstury. Przyjmuje on wartości od zera (obiekt zupełnie transparentny) do
� 255 (powierzchnia nieprzezroczysta)
� Jeśli nałożona zostanie tekstura z kanałem alfa równym zero, nic się nie zmieni na rysunku, tekstura będzie niewidoczna
Alpha-blending
� Jeżeli wartość kanału wynosi np. 128, wówczas obłożony nią obiekt będzie półprzezroczysty, a znajdujące się za nim przedmioty będą przezeń widoczne.
� Przy maksymalnej wartości mamy do czynienia z typową nieprzezroczystą teksturą
� Wartość kanału alfa jest jednym z czterech parametrów opisujących teksturę.
Kule i szachownica
Alpha-blending
� Praktycznie wszystkie nowoczesne akceleratory potrafią obsługiwać 32 bitowy kolor.
� Jak wiadomo do przedstawienia pełnej palety barw wystarczą 24 bity
� Brakujące osiem bitów to właśnie kanał alfa, a tekstury takie nazywane są RGBA
� Trzy kolory składowe oraz kanał alfa.