SPOSOBY PRZEDSTAWIANIA OBRAZU 3D


Grafika 3D przesyłana jest do karty graficznej w postaci zbioru punktów opisanych trzema współrzędnymi. Punkty te nazywane są vertexami. Podstawowym sposobem łaczenia vertexów w powierzchnie są trójkąty, a więc wymagane są 3 vertexy na trójkąt. Poniżej przedstawione są również inne rodzaje wierzchni.


Sposoby przedstawiania powierzchni





PRZYGOTOWANIE OBRAZU DO WYŚWIETLENIA




USTAWIANIE GEOMETRII


Obiekt 3D.

.najpierw poddawany jest skalowaniu.

.następnie translacji.

.a na końcu rotacji

Kiedyś rotacja i translacja obiektów była zadaniem procesora komputera, ale ze względu na dość dużą czasochłonność tej operacji została zrzucona na akcelerator 3D.

USUWANIE NIEWIDOCZNYCH TRÓJKĄTÓW
(clipping)

W przypadku dużych scen duże znaczenie dla prędkości ma usuwanie niewidocznych trójkątów - na przykład zasłoniętych przez inne lub poza horyzontem. Do tego celu używa się bufora Z (Z - buffering). Podczas procesu rysowania trójkątów na ekranie, współrzędna głębokości (Z) każdego trójkąta zapisywana jest do bufora Z, dzięki czemu możliwe jest sprawdzenie, czy kolejny rysowany trójkąt nie jest zasłonięty przez inny.

OŚWIETLANIE OBIEKTU

Jest to kolejna operacja kiedyś wykonywana przez procesor komputera, a obecnie przez akceletator 3D. Można wyróżnić kilka podstawowych rodzajów oświetlania:


Cieniowanie płaskie

Cieniowanie Gourauda

Cieniowanie Phonga
(Per Pixel Shading)

Cieniowanie metodą Phonga wymaga zastosowania dość znacznych mocy obliczeniowych, co powoduje że używane jest dopiero w najnowszych akceleratorach 3D.

TEKSTUROWANIE

Nakładanie tekstury na obiekt odbywa się za pomocą "wycięcia" z tekstury fragmentu odpowiadającego każdemu wielobokowi obiektu:

Oteksturowany wygląda, jakby był owinięty teksturą:

Przy wyświetlaniu obiektów znajdujących się dalej od obserwatora zachodzi konieczność zmniejszenia rozmiarów tekstury, co powoduje często gorszy jej wygląd. Aby temu zapobiec, stosuje się zabieg zwany Mip Mappingiem. Polega on na tworzeniu kilku tekstur o różnych rozmiarach i odpowiednim stosowaniu ich w zależności od odległości.

Poziom
(odległość)
Rozdzielczość Rozmiar rzeczywisty Mapa po powiększeniu
0
128x128
1
64x64
2
32x32
3
16x16


W celu polepszenia jakosci tekstur znajdujących się na obiektach położonych bliżej obserwatora, stosuje się filtrowanie dwuliniowe (bilinear filtering).

Zwykłe próbkowanie punktowe (po lewej) i bilinear filtering (po prawej)


Inne zdjęcia

Przy używaniu mip mappingu widoczne są przeskoki tekstury przy zmianie odległości. Aby zapobiec temu efektowi, używa się filtrowania trójliniowego (trilinear filtering). Polega ono na teksturowaniu trójkąta raz teksturą od niego większą, drugi raz mniejszą, a następnie nałożeniu (dodaniu) wyników tych operacji na siebie.


Filtrowanie dwuliniowe

Filtrowanie trójliniowe

Najnowszym osiągnięciem w dziedzinie filtrowania tekstur jest technika anizotropowa. Pozwala ona na lepsze odwzorowanie kształtu tekstury na powierzchniach ukośnych, co nie było możliwe przy poprzednich sposobach.

RASTERYZACJA

Rasteryzacja jest to proces wyświetlania oteksturowanych i oświetlonytch obiektów 3D na (dwuwymiarowym) ekranie monitora. Ten proces jest wykonywany przez każdy akcelerator grafiki 3D łącznie z najstarszymi modelami.


DODATKOWE ZABIEGI STOSOWANE W TWORZENIU GRAFIKI 3D




Korekcja perspektywy

Podczas pewnych operacji, np. teksturowania ścian, akceleratory mają często problem z zachowaniem odpowiedniej perspektywy (rysunek po lewej stronie) i wymagana jest jej korekcja.



Anti Aliasing

Jest to operacja pozwalająca ukryć "zęby" powstające przy rysowaniu skośnych linii.


Można wyróżnić antialiasing całej sceny (FSAA) oraz antialiasing krawędziowy (EAA). Pierwszy z nich uzyskuje się za pomocą wyrenderowania sceny do wyższej rozdzielczości oraz zmniejszenia ją za pomocą filtra, drugi wymaga nieco większych nakładów obliczeniowych ponieważ rozmywa jedynie krawędzie trójkątów (co powoduje np. nierozmywanie płaskiego tła w grze).

Półprzezroczystość

Operacja ta polega na zastosowaniu do opisu koloru tekstury 32 bitów zamiast 24, dodatkowe 8 bitów stosowane jest do opisu przezroczystości (Alpha Channel). Pozwala to na uzyskanie półprzezroczystych obiektów takich jak np. szkło, dym, woda czy ogień.



Bump mapping

Jest to nałożenie na obiekt dodatkowej tekstury, będącej jego mapą wysokości (wybojów) względem powierzchni wieloboku. Jest to tylko gra świateł, nie powoduje dodania do obiektów dodatkowych wieloboków (trójkątów). Powoduje wrażenie wypukłości, chropowatości obiektu.


Od lewej : Obiekt z nałożoną teksturą, obiekt z nałożoną mapą wypukłości oraz obiekt z obiema mapami.


Inne zdjęcia


Environment mapping

Jest to efekt polegający na nakładanie na obiekt tekstury przedstawiającej jego otoczenie. Obiekt potraktowany tym efektem sprawia wrażenie metalicznego, refleksyjnego.

Inne zdjęcia

Mgła

Mgła jest dość prostym efektem dodającym w niektórych przypadkach (np. symulatory lotu) realizmu grze, ale właściwym jej zastosowaniem jest zakrycie najbardziej oddalonych obiektów - ponieważ nie są widoczne, nie trzeba ich obliczać!
Mgłę dzielimy na liniową, logarytmiczną oraz tabelaryczną. Mgła liniowa jest najszybsza do obliczenia, wykładnicza wygląda trochę bardziej realistycznie. We mgle tabelarycznej jej gęstość określana jest przez programistę, więc można np. zrobić mgłę wyłącznie w okolicach jeziorka.


Mgła liniowa



Mgła wykładnicza

Mgła w potoku renderującym znajduje się pomiędzy teksturowaniem a resteryzacją.

Stencil buffer

Stencil buffer zwany jest także szablonem. W jego najprostszej wersji, jest to jednobitowa mapa mówiąca akceleratorowi gdzie ma renderować grafikę, a gdzie nie:

Współczesne akceleratory obsługują ośmiobitowy szablon, co pozwala na uzyskanie np. płynnych cieni wolumetrycznych:


Multiteksturowanie

Jak można zauważyć, wiele z wymienionych wcześniej efektów wymaga nałożenia więcej niż jednej tekstury na obiekt (jak np. w bump mappingu czy envmappingu). Wcześniej wymagało to wykonania przez jednostkę teksturującą w kilku cyklach, nowsze akceleratory posiadają po kilka jednostek teksturujących. Potrafią one nakładać tekstury:

   

poprzez między innymi:


dodawanie,

odejmowanie, mnożenie, dzielenie, operacje na kanałach alfa lub


modulację




EFEKTY W NOWOCZESNYCH AKCELERATORACH 3D



Nowoczesne akceleratory sprzętowo wykonują część efektów, które wcześniej musiały być pisane przez programistę, a także dodają nowe, nie spotykane wcześniej możliwości:

Światła wolumetryczne

Wyglądają jakby światło było rzucane przez rozgrzany do świecenia obiekt lub też przez dziurę w ścianie...
Zdjęcia

Radiosity

Jest to dokładna metoda obliczania oświetlenia, w której uwzględnia się światło odbijane od obiektów (np. ścian).

Bez Radiosity

z uzyciem Radiosity


Vertex Shader

Jest to zupełnie nowe podejście do grafiki 3D. Programista może napisać krótki program (w języku zbliżonym do assemblera), który będzie modyfikował każdy kolejny vertex (czyli punkt 3D, wierzchołek wieloboku). Pozwala to na uzyskanie efektów wcześniej nieosiągalnych przy istniejących mocach obliczeniowych lub wymagających stosowania bardzo wielu wieloboków.
Zdjęcia

Pixel Shader

Pixel shader podobnie jak Vertex shader umożliwia napisanie programu dla procesora akceleratora, ale tak, jak w VS mozliwe było jedynie modyfikowanie vertxów, w Pixel shaderze modyfikować można każdy piksel ekranu, co może dać efekty niemożliwe wcześniej do wykonania w czasie rzeczywistym. Umożliwia on m.in. oświetlanie metodą Phonga czy bardzo dokładne bump mappingi.
Zdjęcia

Powierzchnie wyższego poziomu

Kiedys w kartach graficznych przy wyświetlaniu grafiki 3D największym problemem była przepustowość portu z powodu transferów danych generowanych przez tekstury. Od czasu wprowadzenia kompresji tekstur, problem ten zniknął, ale z powodu coraz większej wydajności akceleratorów zwiększa się ilość trójkątów i problemem staje się przesłanie ich do karty graficznej. Aby temu zapobiec, coraz częściej zamiast trójkątów używa się krzywych powierzchni opartych na krzywych Beizera. Opisanie ich wymaga mniejszej ilości danych przy lepszym wyglądzie.




Skomplikowany obiekt stworzony za pomocą powierzchni Beisera




Zrodla z ktorych korzystalem