Trójwymiarowa rewolucja

Wzrost wydajności kart graficznych nie jest wcale głównym wyznacznikiem postępu technologicznego, zwłaszcza jeśli chodzi o konstruowanie akceleratorów 3D. Tutaj równie ważny, jeśli nie ważniejszy, okazuje się sposób generowania grafiki. To właśnie on w najnowszych grach przekłada się na liczbę obsługiwanych przez kartę efektów graficznych przy jednoczesnym zachowaniu szybkości wyświetlania obrazu. Ale czy ktoś z Was, Szanowni Czytelnicy, zastanawiał się nad tym, jak tworzone są superrealistyczne wirtualne światy w takich grach, jak Doom 3, FarCry czy Half-Life 2? Zapraszam Was zatem na wycieczkę do pasjonującego świata grafiki – popatrzmy, jak najnowsze akceleratory 3D tworzą trójwymiarowe cuda na ekranach pecetowych monitorów. Wiedza ta z pewnością przyda się nie tylko po to, żeby zadziwić znajomych. Przede wszystkim pozwoli ona na podstawie opisu jeszcze w sklepie zorientować się, jak dana gra będzie wyglądała na naszym komputerze – a różnice w wyglądzie w zależności od karty mogą być naprawdę spore!

DirectX wyznacznikiem postępu

Większość gier komputerowych wykorzystuje programowy interfejs API (Application Programming Interface) systemu Windows, noszący nazwę DirectX. Kolejne jego wersje przystosowane są do możliwości coraz to nowszych kart graficznych. Pozwalają one programistom na znacznie bardziej realistyczne i łatwiejsze modelowanie scen 3D i znajdujących się na nich postaci. Aby dana gra uruchomiła się w pełni swoich możliwości, musi być zatem zapewniona zgodność pomiędzy wersją DirectX, w której została napisana, i zdolnością karty do sprzętowej realizacji funkcji obsługiwanych przez tę odsłonę DirectX.

Najnowsze gry wymagają stosowania bibliotek DirectX 9.0. Jej sprzętową obsługę zapewniają dwie ostatnie generacje kart – m.in. nVidia GeForce FX 5900, ATI Radeon 9800 oraz nowsze GeForce 6800 i Radeon X800. Karty obsługujące DirectX 8.0 również radzą sobie z problemem zgodności z DX 9.0, jednak odbywa się to zawsze kosztem wydajności i obniżenia jakości generowanego obrazu – wyłączone zostają wówczas efekty nieobsługiwane przez karty. Gorzej jest w wypadku wcześniejszych akceleratorów 3D współpracujących jedynie z bibliotekami DirectX 7.0. Tutaj pojawiają się poważne problemy z kompatybilnością, wynikające ze zmiany sposobu budowy trójwymiarowej sceny, o czym za chwilę.

Podobna sytuacja ma miejsce dla nieco mniej popularnego interfejsu API – OpenGL. Starsze karty są w stanie zapewnić zgodność jedynie do OpenGL 1.2. Nowsze wersje OpenGL-a (1.3, 1.4 i 1.5) obsługują zaś tylko najnowsze akceleratory, z tym że z wersją OpenGL 1.5, podobnie jak z DX 9.0c, w pełni radzą sobie jedynie karty nVidii z serii 6xxx, takie jak wspomniany przed chwilą GeForce 6800.

Najważniejszy jest strumień

Karta graficzna, aby wyświetlić na ekranie gotowy obraz, musi najpierw wykonać szereg następujących po sobie czynności na danych, które otrzymała chwilę wcześniej od aplikacji 3D. Te realizowane kolejno kroki obliczeniowe nazywane są strumieniem graficznym (ang. 3D Graphics Pipeline), w którym ze względu na realizowane procesy wydzielić można trzy główne fazy obliczeń. Są to odpowiednio: operacje geometryczne, takie jak np. skalowanie obiektów wraz z kalkulacjami (modelowaniem) oświetlenia, rendering (czyli m.in. procesy nakładania tekstur i cieniowania) oraz rasteryzacja polegająca na przygotowaniu gotowego obrazu do wyświetlenia na monitorze. Oczywiście im więcej operacji przeprowadzanych jest na danych w strumieniu graficznym i im dokładniej są one realizowane, tym wierniej będzie przedstawiona na końcu nasza trójwymiarowa scena.

W najstarszych kartach graficznych, tzw. buforach ramki, sprzętowo przez te urządzenia realizowany był tylko ostatni etap wyświetlania grafiki – rasteryzacja. Całym procesem generowania obrazu, w tym grafiki 3D, zajmował się procesor komputera. Akcelerator, jak sama nazwa wskazuje, ma zaś pomóc w generowaniu obrazu. Takimi urządzeniami spotykanymi na rynku jeszcze kilka lat temu były akceleratory grafiki płaskiej (np. S3 Trio32, S3 Vision 968 czy ATI Mach 64). Układy te odciążały jednostkę centralną podczas wyświetlania wielokątów i linii prostych, przesuwania oraz skalowania okien itp.

Pierwszym domowym akceleratorem 3D (urządzenia profesjonalne produkowano już kilka lat wcześniej) była legendarna karta 3dfx Voodoo, która weszła do sprzedaży w 1996 roku. Kość ta umożliwiała tworzenie sceny 3D, lecz do swojego prawidłowego działania potrzebowała również zwykłej karty 2D. Nic dziwnego, że producenci szybko stworzyli współczesną grupę kart nazywanych obecnie akceleratorami 3D. Urządzenia te potrafią generować i wspomagać operacje związane zarówno z grafiką dwu-, jak i trójwymiarową. Pionierami w produkcji tego typu kart stały się firmy nVidia z układem Riva 128, Matrox z kartami Millennium oraz S3 ze swoim Virge’em. Wszystkie te karty włączały się w przetwarzanie potoku graficznego na etapie renderingu.

Kolejna grupa urządzeń, począwszy od GeForce’a 256 (koniec 1999 roku) z wbudowanym modułem T&L (ang. Transform and Lighting), wspomagała już sporą część operacji geometrycznych i kalkulacji oświetlenia. Dopiero wraz z pojawieniem się bibliotek DirectX 8.0 i urządzeń z jednostkami Vertex i Pixel Shader można mówić o przejęciu wszystkich funkcji strumienia graficznego przez kartę. Dzięki temu układ graficzny zaczął coraz częściej nosić nazwę GPU (Graphics Processing Unit). Wiedząc już, co to jest strumień graficzny, popatrzmy zatem, jak składające się na niego przekształcenia realizowane są przez współczesne karty graficzne. Naszą wędrówkę rozpocznijmy od pięciu najważniejszych etapów składających się na operacje geometryczne.

Więcej:bezcatnews