Grafika 3D od kuchni

System SmoothVision pozwala osiągnąć lepsze wyniki wygładzania niż Accuview ze względu na losowe rozmieszczenie punktów poddawanych supersamplowaniu? To tylko przykład, jak wiele nowych i tajemniczych technologii i określeń pojawiło się w świecie kart graficznych.

System SmoothVision pozwala osiągnąć lepsze wyniki wygładzania niż Accuview ze względu na losowe rozmieszczenie punktów poddawanych supersamplowaniu? To tylko przykład, jak wiele nowych i tajemniczych technologii i określeń pojawiło się w świecie kart graficznych.

W początkowym stadium obraz to niewiele więcej niż siatka punktów (wierzchołków), z których zostaną skonstruowane trójkąty.

W początkowym stadium obraz to niewiele więcej niż siatka punktów (wierzchołków), z których zostaną skonstruowane trójkąty.

Karty graficzne należą do najszybciej rozwijających się podzespołów komputerowych. Opisy nowych modeli pojawiają się praktycznie w każdym numerze PCWK, a w Sieci mnożą się plotki i zapowiedzi na temat nadchodzących produktów. Za każdym niemal razem opisy koncentrują się na rzeczywistych bądź przewidywanych parametrach kart - cytowane są wyniki benchmarków, podaje się wielkość pamięci, taktowanie układu graficznego itd. Zwykle też wymienia się jednym tchem listę funkcji wbudowanych w karty: vertex shading, TwinView, DVI, HydraVision - to tylko niektóre z tajemniczych skrótów, spotykanych w tych opisach. Gdy jednak zechcemy zrozumieć, na czym wspomniane funkcje polegają, wówczas sprawy znacznie się komplikują.

Wbrew pozorom, niezbyt dobrym źródłem informacji są producenci kart graficznych. Dowiedzieć się od nich możesz, że funkcja A poprawia wydajność, a funkcja B jakość obrazu. W jaki sposób się to odbywa, nikt nie informuje. Dlatego postanowiliśmy w niniejszym artykule przybliżyć sposób działania i znaczenie najważniejszych technologii wbudowanych w nowoczesne układy graficzne.

Silniki T&L

Jedną z nowości, wprowadzoną przez NVIDIĘ w układach z rodziny GeForce3, była jednostka oznaczona jako nfiniteFX.

Ta marketingowo niezwykle zgrabna nazwa sugeruje, że wspomniany układ graficzny pozwala praktycznie bez ograniczeń stosować wszelkiego rodzaju efekty specjalne w tworzonej grafice 3D. Za realizację tego ambitnego celu odpowiedzialna jest jednostka Vertex Shader, stanowiąca główny i najważniejszy element silnika nifiteFX. Vertex Shader jest najważniejszą innowacją konstrukcyjną w stosunku do starszych układów GeForce256 i GeForce2. Daje programistom daleko szerszy zakres swobody, jeśli chodzi o przekształcenia obrazu 3D.

Na samym wstępie, aby rozjaśnić nieco sytuację, warto przetłumaczyć angielski termin. "Vertex" to po prostu wierzchołek. "Shader" należałoby dosłownie przetłumaczyć jako jednostkę cieniującą, jednak jak się za chwilę przekonasz, zakres operacji wykonywanych przez ten moduł jest zdecydowanie szerszy. Wspomniane wierzchołki łączą się w trójkąty, które z kolei tworzą wszystkie obiekty umieszczone w trójwymiarowej scenie. Technika budowania obiektów 3D z trójkątów znana jest od dawna i stosowana w zdecydowanej większości kart graficznych. Rozwiązanie takie ułatwia przekształcanie i przemieszczanie obiektów w wirtualnej scenie.

Na etapie rasteryzacji karta graficzna wyznacza kolejne trójkąty i wypełnia je zgodnie z parametrami zapisanymi w poszczególnych wierzchołkach. Wartości wewnątrz trójkątów są interpolowane.

Na etapie rasteryzacji karta graficzna wyznacza kolejne trójkąty i wypełnia je zgodnie z parametrami zapisanymi w poszczególnych wierzchołkach. Wartości wewnątrz trójkątów są interpolowane.

Wszelkie tego typu operacje (skalowanie, obracanie, zmiana umiejscowienia) polegają po prostu na odpowiedniej transformacji geometrycznej wierzchołków danego obiektu. Oczywiście, trójkąty tworzą tylko siatkę obiektu. Aby nabrał cech bardziej realnych, musi zostać pokryty teksturami, barwami i oświetlony. Jeden obiekt może wykorzystywać wiele tekstur czy parametrów barwy. W związku z tym przyporządkowane są one właśnie do poszczególnych wierzchołków.

Szczególnym etapem tworzenia obiektu 3D jest jego oświetlenie. Stosowane są w tym zakresie dwie podstawowe techniki. Jedna z nich, nazywana w języku angielskim "lightmapping", polega po prostu na wykorzystaniu dodatkowej tekstury, która imituje odpowiednie efekty świetlne. Druga technika, bardziej zaawansowana, definiuje oświetlenie jako dodatkowy parametr przypisany do wierzchołków trójkątów. Na podstawie wartości tego parametru charakterystyka oświetlenia wyliczana jest w czasie rzeczywistym, dynamicznie dostosowując się do zmian położenia obserwatora.

W dawnych czasach (czyli przed wejściem na rynek kart graficznych z rodziny GeForce256) wszystkimi tymi operacjami zajmował się główny procesor komputera. Dopiero w układach GeForce256 pojawiła się jednostka oznaczona jako T&L, zajmująca się opisanymi wyżej operacjami transformacji obiektów i ich oświetlenia. W ten sposób procesor został zdecydowanie odciążony, co pozwoliło programistom poprawić np. jakość sztucznej inteligencji w grach.

Z drugiej strony, pomimo wszystkich swoich zalet, silnik T&L nie był jeszcze wówczas zbyt elastyczny. Największym ograniczeniem było to, że wszelkie zmiany parametrów przypisanych do poszczególnych wierzchołków (czyli np. tekstury, oświetlenie) wciąż wymagały zaangażowania głównego procesora.

Powyższe wyjaśnienie, choć zupełnie nie wyczerpuje zagadnienia tworzenia obrazu 3D przez kartę graficzną, powinno wystarczyć, aby zrozumieć doniosłość zmian wprowadzonych w układzie GeForce3. Ale powróćmy do wspomnianego nieco wcześniej modułu Vertex Shader.

Otóż rozwiązanie to sprawia, że całość operacji związanych z przypisywaniem parametrów do poszczególnych wierzchołków, a także z ich modyfikowaniem, może przejąć karta graficzna. Do każdego wierzchołka można dodać niewielkie programy wykonywane w całości przez układ graficzny, realizujące powyższe zadania. Co więcej, wspomniane programy mogą również zmieniać położenie poszczególnych wierzchołków. Nie mogą jedynie ich usuwać lub tworzyć nowych.

Oznacza to zatem, że programiści mogą niemal dowolnie manipulować obiektami 3D, co zupełnie nie wpływa na wykorzystanie głównego procesora komputera! Potencjał, jaki leży w takim rozwiązaniu, jest olbrzymi. Nagle w zasięgu ręki są efekty typu morphing w czasie rzeczywistym, zaawansowane techniki mapowania wybojów czy realistyczna symulacja ruchu.

Fachowa chińszczyzna

Accuview - system wygładzania obrazu, wbudowany w układ GeForce4.

HydraVision - mechanizm pozwalający kartom z rodziny ATI Radeon obsługiwać dwa monitory.

HyperZ - zestaw algorytmów optymalizujących dostęp do bufora Z w kartach ATI Radeon i ATI Radeon 8500.

Lightmapping - jeden z wariantów oświetlania scen 3D, polegający na nałożeniu na poszczególne obiekty odpowiednich tekstur imitujących światło.

LightSpeed Architecture - architektura pamięci kart GeForce3, charakteryzująca się m.in. krzyżowym kontrolerem pamięci.

nfiniteFX - programowalny mechanizm T&L, wprowadzony w układach GeForce3.

Pixel Shader - mechanizm obecny w kartach ATI Radeon 8500 i GeForce3, odpowiedzialny za ostateczne generowanie obrazu, który ma zostać wyświetlony. Cecha charakterystyczna - możliwość przypisania do każdego piksela oddzielnego programu modyfikującego jego parametry.

SmartShader - łączna nazwa mechanizmów Pixel Shader i Vertex Shader w układach Radeon 8500.

SmoothVision - mechanizm wygładzania obrazu, wbudowany w układ Radeon 8500.

TwinView - rozwiązanie pozwalające podłączyć dwa monitory do karty z rodziny GeForce2 MX.

Vertex - wierzchołek - buduje się z nich trójkąty, które z kolei tworzą obiekty 3D.

Vertex Lighting - algorytm dynamicznego generowania oświetlenia danej sceny. Informacje o źródłach światła są przypisane do poszczególnych wierzchołków.

Vertex Shader - moduł w kartach GeForce3 i ATI Radeon 8500, pozwalający wykonywać zaawansowane operacje na wierzchołkach (vertex), nieobciążające głównego procesora komputera. Do każdego wierzchołka można przypisać oddzielny program, sterujący jego zachowaniem.

Oczywiście, rozwiązanie zastosowane w układzie GeForce3 ma swoje ograniczenia. Przede wszystkim, pojedynczy program nie może składać się z więcej niż 128 instrukcji. Co więcej, ich zestaw nie pozwala na konstruowanie jakichkolwiek rozgałęzień warunkowych, skoków lub pętli. Jedyne, co programista może zrobić, to skonstruować prosty, liniowy program. Trzeba też pamiętać o innych ograniczeniach. Im więcej instrukcji, tym dłuższy jest czas potrzebny do ich wykonania. GeForce3 dysponuje tylko jedną jednostką Vertex Shader, co oznacza, że kolejne wierzchołki sceny muszą być przetwarzane jeden po drugim.


Zobacz również