www.microprocek.prv.pl

GRAFICZNA :: MUZYCZNA :: SIECIOWA

 

Karta Graficzna często określana też mianem akcelerator grafiki, to element komputera tworzący sygnał dla monitora.

Podstawowym zadaniem karty graficznej jest przechowywanie informacji o tym jak powinien wyglądać ekran monitora i odpowiednim sterowaniu monitorem. Pierwsze karty graficzne potrafiły jedynie wyświetlać znaki alfabetu łacińskiego ze zdefiniowanego w pamięci karty generatora znaków - tryb tekstowy. Kolejna generacja kart graficznych potrafiła już wyświetlać w odpowiednim kolorze poszczególne punkty (piksele) - tryb graficzny. Nowoczesne procesory graficzne udostępniają wiele funkcji ułatwiających i przyśpieszających pracę programów. Możliwe jest narysowanie odcinka, trójkąta, wieloboku, wypełnienie ich zadanym kolorem lub wzorem, tzw. akceleracja 2D. Większość kart na rynku posiada również wbudowane funkcje ułatwiające tworzenie obrazu przestrzeni trójwymiarowej, tzw. akceleracja 3D. Niektóre posiadają zaawansowane algorytmy potrafiące na przykład wybrać tylko widoczne na ekranie elementy z przestrzeni.

Firmy produkujące karty graficzne to między innymi:

  • GainWard
  • ASUS
  • MSI
  • Matrox
  • ATI

Na rynku pojawia się coraz więcej nowych rozwiązań technicznych do kart grafiki, przedstawicielami najwydajniejszych kart graficznych są obecnie konstrukcje oparte na układach nVidia GeForce 7950 GX2 oraz ATi Radeon 1900XTX.

Historyczne różnice w terminologii

Wraz z pojawieniem się kart Voodoo firmy 3Dfx, które znacznie przyspieszały wyświetlanie grafiki trójwymiarowej, pojawił się termin akcelerator graficzny. Karty te wymagały bowiem obecności w komputerze zwykłej karty graficznej. Pozostali producenci zdecydowali się na integrację akceleratorów grafiki trójwymiarowej z samymi kartami graficznymi, podobnie jak to miało miejsce z akceleratorami grafiki dwuwymiarowej. Później także firma 3Dfx zdecydowała się zintegrować swoje akceleratory z kartami graficznymi.

Funkcje

Oto najważniejsze funkcje współczesnych akceleratorów graficznych:

  • Anisotropic Filtering
  • Bump Mapping
  • Efekty cząsteczkowe
  • Full Scene Anti-Aliasing
  • HDR
  • Pixel Shader 3.0
  • Vertex Shader 3.0
  • Transform & Lighting

Poza tym karty graficzne oferują inne sprzętowe efekty, jak mgła, przezroczystość (dodatkowy kanał Alpha).

Budowa karty graficznej

Większość kart graficznych (i wszystkie współczesne) składają się z następujących elementów:

Procesor graficzny (GPU) - odpowiedzialny za generowanie obrazu w pamięci obrazu

Pamięć obrazu - VideoRAM, bufor ramki (ang. framebuffer) - przechowuje cyfrowe dane o obrazie

Pamięć ROM - pamięć przechowująca dane (np. dane generatora znaków) lub firmware karty graficznej, obecnie realizowana jako pamięć flash

DAC - przetwornik C/A (ang. Digital-to-Analog Converter) - odpowiedzialny za przekształcenie cyfrowych danych z pamięci obrazu na sygnał sterujący dla monitora analogowego; w przypadku kart wyłącznie z wyjściem cyfrowym DAC nie stosuje się

Interfejs do systemu komputerowego - umożliwia wymianę danych i sterowanie kartą graficzną - zazwyczaj PCI, AGP, PCI-Express

Wiele z kart graficznych posiada także:

Framegrabber - układ zamieniający zewnętrzny, analogowy sygnał wideo na postać cyfrową

Procesor wideo - układ wspomagający dekodowanie i przetwarzanie strumieniowych danych wideo; w najnowszych konstrukcjach zintegrowany z procesorem graficznym.

:::

Akceleratory 3D

Wprowadzenie

 


3d Jeżeli jesteś zapalonym graczem, to wiesz, że aby dzisiejsze gry 3D działały prawidłowo jest potrzebny dobry akcelerator graficzny, który tuż po procesorze jest najważniejszą częścią, która wpływa na szybkość gier. Karta graficzna ma ogromne znaczenie dla wydajności współczesnego komputera. W ciągu jednej sekundy musi wyliczyć, obliczyć i podsumować kilkadziesiąt razy, aby wprowadzić w ruch trójwymiarowy obraz. Wiele osób nie zdaje sobie sprawy ile skomplikowanych operacji wykonuje ich karta graficzna w ciągu nie całej sekundy. Dzięki takim efektom jak np. texture mapping, bump mapping czy anti-aliasing można stworzyć realistyczny trójwymiarowy obraz.

Więc, jeżeli obok Ciebie przewijają się niezrozumiane określenia, to ten artykuł pozwoli na pełne ich wyjaśnienie, a także zapoznanie się krok po kroku ze sposobem tworzenia wirtualnego świata. Wiele efektów, które były niemożliwe do wykonania parę lat temu, dzisiaj większość akceleratorów potrafi wykonać je bez problemu z niesamowitą szybkością. Tak jak szybkość i jakość wyświetlanego obrazu bardzo się polepszyła, czego dowodem jest skok w jakość gier 3D:

doom1 quake3
U góry Doom 1 - 1993 r., u dołu Quake 3 Arena - 1999 r.

:::

Geometry setup

 


Geometry setup, czyli ustawianie geometrii, jest podstawową operacją przy tworzeniu sceny 3D. Jest również pierwszym krokiem przy tworzeniu trójwymiarowej grafiki. Ustawianie geometrii polega na ustaleniu gdzie każdy obiekt 3D ma się znajdować w przestrzeni. Ustala współrzędne położenia wszystkich brył, które odpowiednio będą tworzyły wirtualny świat. Każdy z tych obiektów można wprawić w ruch, dzięki czemu świat 3D będzie wyglądał realniej. Jednak, aby tego dokonać trzeba każdy obiekt odpowiednio ustawić, dlatego każdą bryłę/obiekt 3D poddaje się operacji:

3d
Translacji - ustalenie położenia obiektu

3d
Rotacji - obrócenie obiektu

3d
Skalowaniu - zmiana rozmiaru obiektu

Dzięki takim zabiegom można tworzyć najróżniejsze konstrukcje. Większość tańszych i starszych kart nie potrafi wykonać sama tej operacji, dlatego cały ten proces liczy procesor. Najnowsze akceleratory T&L, czyli Transform & Lighting Engine potrafią wykonać te operacje bez pomocy CPU. Jednostka liczy (transformuje) wstępne fazy grafiki, która mają zostać wyświetlone. Dlatego także scena 3D, w której obiekt wykonuje tę samą czynność w pętli np. kręcące się koło samochodu nie jest liczone od nowa, a powtarzane. Dzięki temu grafika wyświetlana jest o wiele szybciej. Pierwszym akceleratorem T&L był, GeFoce256, którego premiera odbyła się w 1999 roku.

:::

Triangle setup

 


Każdy obiekt 3D składa się z wielu trójkątów. Każdy trójkąt ma trzy wierzchołki, czyli trzy punkty określające jego współrzędne (X,Y,Z). Więc aby stworzyć scenę 3D aplikacja generująca ją dostarcza współrzędne wszystkich wierzchołków przez odpowiedni interfejs programowania API (DirectX lub OpenGL). API przekazuje współrzędne do części układu karty graficznej, zwanej Triangle Setup, gdzie zostają one poddane operacji teselacji, czyli tworzenia trójkątów za pomocą tych współrzędnych (dla jednego trójkąta trzy punkty).

triangle

Dlatego, aby stworzyć jeden prostokąt potrzeba aż sześciu współrzędnych, a sześcian - 36 współrzędnych. Więc, jeżeli prosty obiekt 3D składający się z czterech ścian jest opisany 36 współrzędnymi, to można sobie wyobrazić iloma jest opisany np. model samochodu 3D. Aby liczby nie były tak gigantyczne powstała technika Strips. Polega ona na redukcji niepotrzebnych współrzędnych, co pozwala na odciążenie karty. Ponieważ wierzchołek 2 ma taką samą współrzędną, co 5, to można je opisać za pomocą jednej. Jeżeli mamy bardzo skomplikowany obiekt 3D np. część krawędzi koła to redukcja pozwoli na zmniejszenie, nawet o kilkanaście współrzędnych.

body

:::

Texture mapping

 


Po stworzeniu trójwymiarowego obiektu 3D, zostaje na niego nałożona odpowiednia tekstura, czyli zwykły plik graficzny np. jeżeli tworzony jest mur, to na bryłę zostaje nałożona tekstura przedstawiająca fragment muru, czyli kilka cegieł. Następnie jest powielana wielokrotnie, w zależności od swojej rzeczywistej wielkości i długości muru, na który zostaje nałożona. Tekstura składa się z tekseli, które są jej najmniejszymi punktami. Następnie każdy trójkąt zostaje oblepiony tekselami.

texture

Teksturowanie polega na dokładnym nałożeniu tekstury na daną bryłę. Każdy obiekt składa się z trójkątów, które wewnątrz istnieje zbiór punktów i tekstura zostaje nałożona w taki sposób, iż każdy teksel znajdujący się na płaskiej teksturze odpowiada każdemu punktowi w trójkącie znajdującemu się na obiekcie 3D. Dlatego, aby ta operacja mogła być wykonana tekstura zostaje podzielona na trójkąty.

texture

:::

MIP Mapping

 


Tekstura ma zawsze określony rozmiar, więc przy nakładaniu na trójkąt o wiele większy lub mniejszy pojawia się problem. Więc jeżeli tekstura jest mniejsza od trójkąta to teksele znajdujące się na niej są powielane tak, aby pokryć cały trójkąt. Ten efekt nazywa się próbkowaniem punktowym i można go zauważyć w każdej starszej grze.

mipmap
Przykład próbkowania punktowego w grze Doom

Inaczej jest w przypadku, kiedy to tekstura jest większa od trójkąta. Teksele, które nie zmieszczą się w obrębie trójkąta nie są po prostu wyświetlane. Dlatego powstał MIP mapping, który wykorzystując teksturę podstawową tworzy osiem mniejszych od niej. Czyli tekstura o wielkości 512 x 512 zostaje pomniejszona na 256 x 256, następnie na 128 x 128, 64 x 64, 32 x 32, 16 x 16 itd. Dzięki temu zostaje wybrana tekstura, która najbardziej przypomina rozmiar trójkąta.

mipmap

:::

Filtering

 


Jednak sama technika MIP Mappingu nie rozwiąże problemu, ponieważ w większości przypadków trójkąt nie będzie pasował w 100 % wielkością do tekstury. Czego rezultatem są piksele w starszych grach, czyli efekt próbkowania punktowego. Więc, aby zmniejszyć skutki skalowania tekstury powstał Filtering, czyli po prostu filtrowanie tekstur.

Filtering dzieli się na:
  • Izotropic Filtering operuje jedynie na czterech punktach, które otaczają jeden teksel i mogą być jedynie kwadratem
    • Bilinear - filtrowanie dwuliniowe polega na stworzeniu płynnego przejścia kolorów z czterech stron między tekselami. Dzięki temu zabiegowi nie są już tak bardzo widoczne różnice między różnymi kolorami tekseli, które leżą obok siebie. Jednak, jeżeli tekstura z bliska będzie wyglądać na rozmytą, to ze zwiększeniem odległości różnica między próbkowaniem punktowym a dwuliniowym zacznie się zacierać. Obraz będzie po prostu będzie coraz mniej wyraźny. Filtrowanie dwuliniowe stosowane jest równocześnie na 4 tekselach

      filtrowanie

    • Mipped Bilinear - jest to filtrowanie dwuliniowe, które działa równocześnie z MIP Mappingiem. Jednak, oba filtrowania działają od siebie niezależnie. W porównaniu do filtrowania dwuliniowego, jakość obrazu znacznie się polepszy a szczególnie podczas wyświetlania dalszych obiektów
    • Trilinear - filtrowanie trójliniowe to połączenie technik działania filtrowania dwuliniowego i MIP Mappingu. Podczas teksturowania zostają stworzone dwie dodatkowe mapy - mniejsza i większa od trójkąta, na którym zostaną umieszczone. Następnie obie mapy osobno poddaje się filtrowaniu dwuliniowemu i używając ich tworzy się teksturę pośrednią, która najlepiej pasuje do trójkąta, na który zostanie nałożona. Filtrowanie trójliniowe stosowane jest równocześnie na 8 tekselach
  • Anisotropic Filtering operuje na tekselach o różnych kształtach. Dzięki temu, na ścianach widzianych po kątem tekstura nie zostanie zniekształcona tak, jak byłoby to w przypadku filtrowania izotropowego, w którym teksel widziany był jedynie z przodu i mógł przedstawiać tylko kwadrat, nie mógł być inną figurą, przez co niestety wpływało to na jakość ścian widzianych ukośnie

:::

Bump mapping

 


Jednak nałożona tekstura jest płaska, czyli 2D, a przecież prawdziwy mur jest zbudowany z cegieł, między którymi jest zaprawa. Aby uzyskać taki efekt oczywiście można stworzyć każdą osobną cegłę, która będzie minimalnie odstawać jednak tworzenie takiego muru, który jest złożony z kilkunastu czy nawet kilkuset cegieł bardzo obciążyłoby kartę. I tu wkracza bump mapping. Tworzy on oddzielną charakterystykę głębi tekstury, czyli po prostu mapę chropowatości powierzchni. Operacja ta polega na dodaniu nowej wartości - wysokości dla teksela, któremu odpowiada każdy punkt na płaszczyźnie trójkąta. Dzięki temu mamy złudzenie, iż cegły naprawdę wystają z muru, a nie są płaską teksturą. Więc także, jeżeli każdy teksel ma przypisaną wartość wysokości to oświetlenie padające na taką teksturę będzie rzucało cień, czyli między cegłami będzie ciemna przestrzeń.

Rodzaje bump mappingu:

emboss
Emboss Bump Mapping - jest to najłatwiejszy i najprostszy sposób. Polega na nałożeniu częściowo przezroczystej mapy chropowatości na zwykłą teksturę. Da to bardzo bardzo dobry efekt, który zbytnio nie obciąży układu 3D

pre-calculate
Pre-Calculated Bump Mapping - ten rodzaj Bump Mappingu polega na rzeczywistym generowaniu mapy oświetlenia i cieni, która następnie zostaje nałożona na statyczną teksturę

enviropment
Environment-Mapped Bump Mapping (Lightning map i Environment map) - aby uzyskać ten rodzaj BM należy skorzystać z trzech różnych map. Więc najpierw mapa głębi zostaje nałożona na mapę środowiska, a następnie z nimi zostaje połączona podstawowa mapa (tekstura). Dzięki temu możemy uzyskać taki efekt, jak falującą wodę, w której odbija się otoczenie

:::

Anti-aliasing

 


Ponieważ obraz wyświetlany na ekranie monitora składa się z kwadratowych pikseli, dlatego podczas tworzenia trójwymiarowej sceny, w której trzeba zachować odpowiednią perspektywę, tzn. większość krawędzi ścian i innych obiektów jest przedstawiona pod pewnym kątem, więc układ 3D mając do dyspozycji jedynie kwadratowe punkty nie jest w stanie stworzyć idealnie ukośnych linii. Dlatego próbuje za pomocą tych pikseli naśladować proste krawędzie tworząc schodki. Można także zwiększyć rozdzielczość, czyli zmniejszyć rozmiar pikseli, dzięki czemu efekt "schodków" będzie mniej widzialny dla ludzkiego oka. Jednak sama zmiana rozdzielczości całej sprawy nie załatwi. Po pierwsze nadal będzie widać nierówne linie, a do tego spadnie znacznie szybkość wyświetlanej grafiki. I tu zostaje włączony anti-aliasing. Jak podczas filtrowania tekstur teksele były rozmywane, dzięki czemu nie było widać przejść między różnymi ich kolorami tak i anti-aliasing stosuje podobną technikę. Po pierwsze anti-aliasing dzieli się na dwa rodzaje:
  • Edge Anti-Aliasing - anti-aliasing krawędziowy polega rozmywaniu krawędzi trójkątów, z których zbudowane są obiekty 3D. Jednak na większych przestrzeniach działanie EAA jest praktycznie niewidoczne. Dodatkowo bardzo on obciąża układ, ponieważ aby rozmyć trójkąt najpierw go odczytuje, rozmywa i na końcu zapisuje, co powoduje duże spowolnienie szybkości tworzenia sceny 3D
  • Full-Scene Anti-Aliasing - anti-aliasing pełnoekranowy. Tu sprawa wygląda zupełnie inaczej. Są dwa główne różne układy, które tę operację potrafią wykonać w różny sposób. Układ VSA-100 (3dfx) przesuwa względem siebie kilka ramek całego obrazu, dzięki czemu efekt "schodkowych" krawędzi jest prawie niewidoczny. Za to układ NV15 (nVidia GeForce2 GTS) podczas renderowania sceny podwyższa czterokrotnie rozdzielczość, którą następnie poddaje przeskalowywaniu z użyciem filtrowania dwuliniowego na rozdzielczość czterokrotnie mniejszą, czyli podstawową. Dzięki temu, efekt aliasingu jest zupełnie niewidoczny

    anty-alia

:::

Shading

 


Rozróżniamy następujące rodzaje cieniowania:
  • cieniowanie płaskie (Flat) - polega na określeniu poziomu jasności osobno dla każdego całego trójkąta, z którego składa się obiekt 3D. Oczywiście każdy pełny trójkąt ma niezależny kolor od innych trójkątów, które go otaczają, czego efektem jest tzw. "kanciaste" przejście między nimi
  • cieniowanie Gourauda - polega na przyporządkowaniu każdemu z wierzchołków trójkąta średniej kolorów innych wierzchołków trójkątów, które go otaczają. Dzięki temu jest płynne przejście między nimi. Do dzisiaj jest to bardzo dobra metoda cieniowania


    Po lewej: Flat Shading, po prawej: Gouraud Shading

  • mapy świetlne - jeżeli na przykład na ścianie, która zbudowana jest z kilkunastu trójkątów, które określają jej kształt umieścimy lampę, która ma oświetlać otoczenie, to pojawi się problem, ponieważ aby prawidłowo użyć cieniowania płaskiego czy Gourauda potrzebna jest pewna ilość trójkątów w obrębie tej lampy, której niestety trudno szukać na płaskiej ścianie. W tym wypadku ściana mogłaby być oświetlona jedynie paroma kolorami, co niestety nie wyszłoby jej na zdrowie. Skutki byłyby tragiczne ... Wyobraźmy sobie bardzo długą ścianę składającą się z niezbędnej ilości trójkątów, na której zostaje umieszczone jakieś źródło światła. Źródło tego światła mogłoby się ciągnąć przez prawie całą jej długość. Więc, dlatego świetnym sposobem, aby ominąć tego typu problem jest zastosowanie map świetlnych. Podczas renderowania jest używana dodatkowa mapa. Najpierw na dany obiekt zostaje nałożona tekstura, na którą następnie nakłada się mapę świetlną. Da to bardzo realistyczny efekt, jednak trzeb pamiętać, iż wymaga to dodatkowego przebiegu renderingu


    Po lewej: Tekstura, w środku: Mapa świetlna, po prawej: Tekstura po połączeniu z mapą świetlną

  • Phong shading - jest to tzw. oświetlenie Per-Pikselowe, w którym określa się jasność z dokładnością do każdego punktu w trójkącie. Dzięki temu, można osiągnąć super realistyczne oświetlenie i dlatego nie są już potrzebne mapy świetlne, ponieważ nie jest określany jedynie kolor przejścia między kolorami trójkątów, a każdy punkt osobno. Niestety, aby móc skorzystać z tego sposobu cieniowania należy posiadać najnowszy układ 3D np. GeForce2 GTS

:::

Atmospheric effects

 


Aby zwiększyć realność trójwymiarowego świata stosuje się dodatkowo efekty, które występują w rzeczywistym świecie.

Fog
Dzięki takiemu efektowi jak mgła (fog) można stworzyć dużo realistyczniejsze sceny 3D. W niektórych grach, które dzieją się na dużych przestrzeniach mgła stosowana jest w większym stopniu, nie jako ozdoba, ale jako sposób dzięki, któremu grafika będzie szybciej wyświetlana, ponieważ obiekty znajdujące się za mgłą nie będą liczone co znacznie odciąży układ.

Sposoby tworzenia mgieł:
  • Linear fog - polega na liniowym zamgleniu obiektów. Więc, wraz ze wzrostem odległości od danego obiektu, będzie go pokrywało coraz więcej "ścian" mgły dzięki czemu powoli zaniknie
  • Table fog - tutaj poziom zamglenia jest opisany dowolnymi wartościami, które są tworzone i zapisane w odpowiedniej tablicy. Dzięki temu rodzajowi mgły jest możliwość stworzenia "miejscowej" mgły np. tylko w przepaści
  • Expotential fog - działa na podobnej zasadzie, co Table fog, jednak wartość zamglenia jest wyliczona od razu, więc nie wymaga tworzenia tablicy

Depth cueing
Podobną technikę stosują malarze podczas malowania krajobrazu, a polega ona na tym, iż obiekty, które znajdują się dalej mają coraz słabsze kolory i są mniej wyraźne. Dlatego układy 3D stopniowo wraz ze wzrostem odległości zmieniają kolory i odcień obiektów.

:::

Rasteryzacja

 


Polega na zamianie wszystkich współrzędnych, parametrów, itd. na kolorowy obraz, który zostanie wyświetlony na ekranie monitora. Obraz, jak wiadomo, składa się z wielu punktów - im większa rozdzielczość, tym więcej punktów i ładniejszy obraz. Każdy punkt posiada oczywiście swoje osobne trzy współrzędne:
  • X - poziom
  • Y - pion
  • Z - głębia
Każdy piksel wymaga kilka kilobajtów pamięci, aby go zapisać, a następnie wyświetlić. Im wyższa rozdzielczość lub głębia kolorów, tym więcej punktów lub kolorów zostaje wyświetlonych na ekranie, przez co potrzebna jest coraz większa ilość pamięci i dlatego dzisiejsze akceleratory są wyposażone 32 MB czy 64 MB lub nawet 128 MB pamięci.



Jeżeli wreszcie wszystko zostanie obliczone, wyliczone i podliczone możemy wreszcie zobaczyć ... jedną klatkę. Tak, tylko jedną klatkę - aby zobaczyć jakikolwiek ruch akcelerator musi z powrotem wszystkie obliczenia wykonać od początku, a jeżeli zechcemy zobaczyć całkiem płynny obraz 3D, to akcelerator musi powtórzyć cały proces bardzo szybko, tzn. trzydzieści lub sześćdziesiąt razy wciągu sekundy.

 


Copyright © 2006 - www.microprocek.prv.pl Procesor RAM Karty Rozszerzeń HDD