Pojęcia podstawowe

Przez czterdzieści lat istnienia grafika komputerowa dopracowała się własnego hermetycznego języka, którym specjaliści uwielbiają zaskakiwać neofitów. Wtrącane od niechcenia słowa: antyaliasing, Z-bufor, piksel, alfablending, double-buffering, dithering budzą szacunek. Warto je zatem wyjaśnić, a są to bowiem na ogół pojęcia proste i do ich zrozumienia wystarczą śladowe pozostałości ze szkolnej geometrii.

Przez czterdzieści lat istnienia grafika komputerowa dopracowała się własnego hermetycznego języka, którym specjaliści uwielbiają zaskakiwać neofitów. Wtrącane od niechcenia słowa: antyaliasing, Z-bufor, piksel, alfablending, double-buffering, dithering budzą szacunek. Warto je zatem wyjaśnić, a są to bowiem na ogół pojęcia proste i do ich zrozumienia wystarczą śladowe pozostałości ze szkolnej geometrii.

Dla maszyny obraz na ekranie jest po prostu zbiorem danych reprezentujących poszczególne punkty, które - jak w telewizorze - są uszeregowane w linie. Pojedynczy punkt, podstawowy element obrazu nazywany jest pikselem (pixel lub pel to skrót od picture element). Liczba pikseli zależy od rozdzielczości ekranu - jak w starych PC - od 320 punktów w 240 liniach, poprzez najpopularniejsze obecnie ekrany 1024x768, aż po niedawno wprowadzony szerokoekranowy standard 1920x1080.

Piksel można wyświetlić bądź nie, nie można jednak pokazać czegoś między określonymi na stałe pozycjami. Poziomy odcinek linii prostej uzyskuje się więc bez trudu z pikseli sąsiadujących w tej samej linii. Pionowy odcinek można zaś skonstruować z punktów leżących jedne nad drugimi w tej samej pozycji horyzontalnej, ale w różnych liniach. Przy odcinkach wyświetlanych pod dowolnym kątem zaczynają się jednak schody. Dosłownie i w przenośni, gdyż zdeterminowanie położeń pikseli powoduje, że linie takie wyglądają, jak zdezelowana klatka schodowa.

Aby to skorygować, stosowane jest wygładzanie krawędzi, czyli antyaliasing. Zamiast wyświetlania z pełną intensywnością jedynie pikseli przecinanych linią, aktywizowane są też piksele sąsiednie, uzależniając ich intensywność od odległości od linii - im bliżej, tym jaśniej. Powoduje to, że odcinek łagodnie przechodzi w tło i z pewnej odległości wygląda na monitorze poprawnie, gubiąc ostre krawędzie. Z bliska jest wprawdzie nieco rozmyty, ale nikt nie pracuje z nosem przy ekranie.

16 milionów kolorów

Każdy piksel ma odpowiednik w pamięci obrazowej zwanej w jęz. polskim buforem ramki, co jest dosłownym tłumaczeniem z jęz. angielskiego frame buffer. Na początku była to liczba determinująca różną gradację szarości. W starych, 8-bitowych komputerach było więc do dyspozycji 28, czyli 256, odcieni między białym a czarnym kolorem.

Gdy pojawiły się monitory barwne, dane w buforze ramki precyzowały intensywność trzech podstawowych kolorów: czerwonego, niebieskiego i zielonego. Na składnik czerwony i zielony przeznaczano po trzy bity, na niebieski dwa bity, gdyż psychofizjolodzy uznali go za najmniej istotny. Efektem było 8 odcieni czerwonego i zielonego i 4 odcienie niebieskiego. Kombinując odcienie, można było uzyskać 8x8x4, czyli dokładnie 256 kolorów.

Grafika pożera pamięć masowo, dopiero kolejne generacje komputerów pozwoliły więc poszerzyć gamę kolorystyczną. We współczesnych 32-bitowych stacjach graficznych każda podstawowa barwa ma do dyspozycji 8 bitów, a pozostałe 8 wykorzystywanych jest na zapamiętanie współczynnika przezroczystości punktu, zwanego alphablending.

Ile potrzeba na to pamięci? Zakładając średnią rozdzielczość ekranu 1024x768, otrzymujemy 786 432 piksele. Każdy wymaga 32 bitów, czyli 25 165 824 bity na całość. Ale w gruncie rzeczy mamy do czynienia z podwójnym buforowaniem (double-buffering), w systemie graficznym są bowiem dwa bufory ramki - jeden wyświetla gotową scenę, gdy do drugiego są ładowane dane następnej. Kiedy ich liczenie zostaje zakończone, wyświetlana jest zawartość drugiego bufora, a ładowany pierwszy. Dzięki temu przejścia między klatkami stają się bardziej płynne. Zatem, lekko licząc, otrzymujemy niebagatelne 6 megabajtów pamięci wymaganej do pracy w trybie true color. Ale jest to opłacalne, gdyż efektem jest ponad 16 mln kolorów, które ponadto dzięki alphablending można mieszać z tłem. Znacznie więcej niż człowiek potrafi rozróżnić.

Do historii zatem przeszły utyskiwania na nienaturalność barw grafiki komputerowej. Oferuje ona obecnie każdy widzialny kolor i odcień. Paradoksalnie czasami się z tego rezygnuje, gdyż klienci życzą sobie, by ich reklama telewizyjna wyróżniała się właśnie "komputerowym" stylem, z lekko fosforyzującymi barwami i wirującymi odblaskowymi powierzchniami.

Skrzyżować skrzypce

Zawartość bufora ramki jest wciąż aktualizowana, zmiana obrazu bowiem powinna odbyć się błyskawicznie. Na szczęście każda, nawet najbardziej złożona, zmiana sytuacji w trójwymiarowej przestrzeni może być reprezentowana jako pewna kombinacja trzech podstawowych transformacji: przesunięcia, skalowania i obrotu. Ponadto wszystkie trzy dają się wyrazić jako macierze, które komputer mnoży w mgnieniu oka.

Załóżmy przykładowo, że wprowadziliśmy do komputera dane opisujące kształt skrzypiec. Komputer ma to wyświetlić, a potem obrócić je i pokazać ponownie, tak by przecinały się z poprzednimi. Uzyskanie takiego efektu w świecie rzeczywistym nie jest proste. Każda próba skrzyżowania dwu prawdziwych skrzypiec pociągnie za sobą zniszczenie obu instrumentów, ręczne zaś narysowanie tej sytuacji wymagałoby ogromnej wyobraźni przestrzennej.

Komputer bez trudu liczy krawędzie przecięć nawet bardzo złożonych obiektów, gdyż w specjalnym buforze głębi (tzw. z-buffer, czyli bufor współrzędnej zetowej) przechowywane są informacje o rozmieszczeniu przedmiotów w wyświetlanej scenie. Przestrzenne zależności pozwalają na określenie widzialnej części obrazu, zdarza się bowiem, że obiekty pierwszoplanowe przesłaniają te na drugim planie.

Wprawdzie ta trójwymiarowa grafika (nazywana w skrócie 3D od dimensions - wymiary) jest rzutowana na płaską powierzchnię monitora, dla widza stanowi zatem obraz 2D. Jednakże wykorzystując informację z bufora Z, można uciekać się do różnych zabiegów w celu uzyskania złudzenia głębi. Pomniejszając dalsze i powiększając bliższe obiekty, powstaje wrażenie perspektywy. Rozjaśnianie przedmiotów na pierwszym planie, tzw. depthcueing, powoduje, że przyciemnione tło widziane jest jako bardziej odległe.

I to w zasadzie wszystko, co o grafice komputerowej trzeba wiedzieć, by nie czuć się nieswojo w rozmowie ze znajomym programistą.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200