Bez ograniczeń prędkości


Jeśli 24 bity to ponad 16 milionów kolorów...

Praktycznie wszystkie nowoczesne akceleratory potrafią już obsługiwać kolor 32-bitowy. Długi czas opierała się temu firma 3dfx, na czym wiele straciła. Warto jednak wyjaśnić, o co dokładnie chodzi z dodatkowymi 8 bitami. Przecież pełną paletę kolorów (ponad 16 milionów) mamy już przy 24 bitach. Jaki jest sens dodawania jeszcze 8 bitów? Otóż bity te są przeznaczone na opisanie kanału Alpha, oznaczającego przezroczystość poszczególnych tekstur. Osiem bitów pozwala na zapisanie 256 wartości (liczonych od zera). Jeśli kanał Alpha ma wartość 255, wówczas tekstura jest zupełnie nieprzezroczysta. I odwrotnie, jeśli wartość wynosi 0, wówczas tekstura jest całkowicie przezroczysta (czyli w praktyce niewidoczna). Wszystkie wartości pośrednie oznaczają odpowiedni stopień przezroczystości. Dzięki kanałowi Alpha możliwe jest odwzorowanie takich powierzchni, jak szyba lub woda. Przenikanie się obiektów określa się często angielską nazwą <font color="red">alpha blending.

Dotychczasowy opis dotyczący teksturowania mógłby sugerować, że operacja ta sprowadza się do nałożenia pojedynczej tekstury. Tymczasem oczywiste jest, że przy wykorzystaniu pojedynczej tekstury trudno byłoby odwzorować na przykład oświetlenie czy wypukłości terenu. Dlatego dzisiaj standardem już stało się <font color="red">multiteksturowanie - nakładanie więcej niż jednej tekstury na obiekty 3D.

W czasach pierwszych akceleratorów 3D multiteksturowanie było poważnym wyzwaniem dla układów graficznych, ponieważ w jednym cyklu zegara potrafiły nałożyć tylko jedną teksturę. W związku z tym zastosowanie multiteksturowania wyraźnie spowalniało działanie systemu. Dziś sytuacja znacząco się poprawiła - karty wyposażone są w więcej niż jeden potok renderujący (niektóre - na przykład GeForce - nawet cztery; Radeon ma trzy potoki); co więcej, zdarza się, że w poszczególnych potokach mają więcej niż jedną jednostkę mapującą tekstury (GeForce 2 ma dwie takie jednostki, Radeon aż trzy). Dzięki takim rozwiązaniom nowoczesne procesory graficzne mogą nakładać kilka tekstur w jednym cyklu zegara bez zmniejszania liczby wyświetlanych w ciągu sekundy klatek.

Klasycznym już zastosowaniem dodatkowych tekstur jest mapowanie wybojów. Wyobraźmy sobie korę drzewa. Ma ona chropowatą strukturę, z licznymi wgłębieniami i wypukłościami. Jednym ze sposobów na wierne oddanie jej wyglądu byłoby użycie olbrzymiej liczby trójkątów do zbudowania trójwymiarowego modelu. W ten sposób niewątpliwie można utworzyć obraz niemal rzeczywisty, jednak problemem pozostaje wydajność - przy zbyt dużej liczbie szczegółów nawet najszybsze komputery i karty graficzne nie poradzą sobie z płynną animacją. Jeśli zredukuje się liczbę trójkątów, wówczas sama tekstura materiału nie wystarczy, aby odwzorować wszystkie subtelności powierzchni.

Rozwiązaniem jest dodatkowa tekstura, która posłuży właśnie do odwzorowania chropowatości. W przeciwieństwie do tekstury materiału, w przypadku tekstury wybojów wartości poszczególnych tekseli oznaczają wysokość, na jakiej znajduje się odpowiedni punkt tekstury podstawowej (materiału).

Dzięki nałożeniu dodatkowej tekstury karta graficzna może uwzględnić różnice w wysokości i odpowiednio dopasować natężenie oświetlenia w poszczególnych punktach sceny.

Bez ograniczeń prędkości
Mapowanie wybojów to jednak nie wszystko. Dodatkowe tekstury mogą zostać wykorzystane na przykład do wytworzenia efektu odbijania się otoczenia w przedmiotach. Jeśli rozejrzymy się dookoła siebie, z całą pewnością dostrzeżemy wiele przedmiotów, których powierzchnia jest do pewnego stopnia refleksyjna. Aby zasymulować ten efekt, akceleratory 3D stosują technikę mapowania środowiska, czyli nakładania na teksturę podstawową dodatkowej, zawierającej informacje o otoczeniu odbijającym się w danym przedmiocie.

Połączenie mapowania środowiska z mapowaniem wybojów dało technikę, dzięki której zasłynęły karty Matroksa, czyli środowiskowe mapowanie wybojów (ang. environmental mapped bump mapping). Klasycznym już, wielokrotnie prezentowanym przykładem zastosowania tej techniki jest falujące lustro wody, w którym odbija się otoczenie, na przykład rosnące na brzegu drzewa.

Atmosfera

Aby obraz był bardziej rzeczywisty, karty graficzne potrafią zasymulować efekty atmosferyczne. Zdecydowanie najpopularniejszy jest efekt mgły, stosowany niemal w każdej grze, której akcja rozgrywa się na otwartej przestrzeni. Dzięki niemu obraz staje się coraz mniej szczegółowy wraz ze wzrostem odległości od obserwatora (przy najprostszym algorytmie mgły liniowej) bądź według uznania autorów animacji (wówczas konieczne jest zastosowanie mgły tablicowej; w specjalnych tablicach zapisuje się stopień zamglenia, jaki obowiązuje w danej odległości od obserwatora).

Na małym ekranie

Doszliśmy więc do momentu, kiedy trójwymiarowe obiekty zostały odpowiednio ustawione, oświetlone, pokryte teksturami i są w zasadzie gotowe, aby wreszcie zamienić je na obraz dwuwymiarowy i wyświetlić na ekranie.

Nie jest to już szczególnie trudne zadanie, choć jak się za chwilę okaże, mocno obciążające lokalną pamięć karty graficznej.

Kolejne trójkąty zostają przesłane do jednostki rasteryzującej, która ma je narysować na ekranie. Jak już kilkukrotnie wspomnieliśmy, każdy wierzchołek trójkąta opisany jest za pomocą trzech współrzędnych: X,Y,Z. Z przeniesieniem dwóch pierwszych na obraz dwuwymiarowy nie ma żadnych problemów - wyznaczają pozycję obiektów w pionie i poziomie.

W jaki jednak sposób wykorzystać współrzędną Z, oznaczającą pozycję obiektów w głębi obrazu?

Jest ona wykorzystywana do określenia, w jakiej kolejności powinny zostać narysowane obiekty, czyli które znajdują się z przodu, a które z tyłu. Ale współrzędną Z wykorzystuje się nie tylko do tego.

Każdy akcelerator 3D ma wydzielony fragment lokalnej pamięci wideo, nazywany buforem Z. Ma on postać matrycy o wielkości odpowiadającej rozdzielczości ekranu.