Prawie wszystko co o trójwymiarowej grafice komputerowej

Grafika komputerowa od pewnego już czasu jest całkiem odrębną gałęzią informatyki. Trudno doprawdy zliczyć wszystkie możliwe jej zastosowania. Z jej pomocą można wizualizować rozmaite światy wirtualne i dowolnie obrazować rzeczywistość.

Grafika komputerowa od pewnego już czasu jest całkiem odrębną gałęzią informatyki. Trudno doprawdy zliczyć wszystkie możliwe jej zastosowania. Z jej pomocą można wizualizować rozmaite światy wirtualne i dowolnie obrazować rzeczywistość.

Grafika komputerowa jest narzędziem w ręku naukowców, lekarzy czy inżynierów. Pozwala na efektywne i szybkie projektowanie, modelowanie różnorodnych zjawisk oraz problemów. Powoli staje się ważnym elementem tworzenia filmów, a nawet nowym medium dla artystów, poszukujących nowych, kreatywnych sposobów odkrywania sztuki.

Choć w ciągu swej kilkudziesięcioletniej historii przebyła długą drogę, od prymitywnych kresek widocznych na ekranie ewoluując stopniowo do obrazów z trudem odróżnialnych od fotografii, to jednak jest to zaledwie początek. Tak naprawdę to z uwagi na ciągle jeszcze niedoskonałą technikę, jesteśmy w stanie wykorzystać obecnie zaledwie cząstkę z tkwiących w grafice możliwości -ukazywania świata, który istnieje tylko w pamięci maszyny.

Zmysł wzroku dostarcza człowiekowi większą część informacji z otaczającego go świata. Ponieważ nasze postrzeganie tak bardzo zależy od informacji wizualnej, grafika komputerowa stała się bardzo wygodnym narzędziem służącym do skumulowanego w czasie przekazu dużej liczby informacji. Grafika dwuwymiarowa o wysokiej jakości jest obecnie wygodnym i powszechnie stosowanym narzędziem, służącym do budowy interfejsu użytkownika na różnych maszynach od Pecetów do szerokiego spektrum unixowych stacji roboczych. Grafika trójwymiarowa, będąc dziedziną bardziej skomplikowaną i wymagającą lepszego sprzętu, pojawiła się znacznie później. Dwuwymiarowe obiekty można bardzo wygodnie opisać - system dobrze wie co ma zrobić, gdy programista chce narysować linię od jednego punktu do drugiego. Dla trzech wymiarów będzie to daleko trudniejsze.

Jak to się robi?

Proces przygotowywania obrazów fotorealistycznych można podzielić na oddzielne zadania, które doskonale nadają się do przetwarzania potokowego. Będą to: modelowanie, rendering, kwantyzacja i wyświetlenie

Najpierw musimy przygotować opis świata, który chcemy oglądać na ekranie komputera. Musi to być ścisła informacja o trójwymiarowych obiektach, ich położeniu i charakterystyce powierzchni. Zajmują się tym specjalne programy zwane modelerami. Z reguły tego rodzaju opisy można generować w specjalnych językach opisu sceny (Scene Description Languages - SDL).

Proces wizualizacji obrazu, czyli transformacji opisu świata trójwymiarowego w obiekt, który można wyświetlić na ekranie komputera, nazywa się renderingiem.

Słowo rendering, które nie ma swojego ścisłego odpowiednika w języku polskim, oznacza po angielsku, w gwarze budowlańców, pokrywanie domu pierwszą warstwą tynku. To tłumaczenie dobrze oddaje intuicyjne znaczenie tego terminu: w gruncie rzeczy chodzi tu o swoiste "przyobleczenie ducha w ciało". W procesie renderingu niezgrabne i niewyraźne rysunki w postaci szkieletu "drutowego" (wireframe) zostają przekształcone w kolorowe obrazy wyglądające mniej lub bardziej realistyczne. Algorytmów, za pomocą których dokonuje się tego przejścia, istnieje już wiele, a różnią się one między sobą kosztem obliczeniowym i jakością otrzymywanych obrazów.

Niektórzy pod pojęciem renderingu rozumieją jedynie wizualizację obrazu dokonaną poprzez przedstawienia na ekranie wielokątów na jakie zostają rozbite obiekty ze sceny. Jednak przedstawiona wyżej, szersza interpretacja jest znacznie powszechniejsza i słowo to zaczyna funkcjonować w naszym języku na zasadzie typowej kalki.

Wejściem do renderingu jest model świata, położenie oka, rozdzielczość docelowa (ta z jaką obraz zostanie wyświetlony) oraz wszelkie dodatkowe parametry. Otrzymany potem obraz należy tak przekształcić, aby dało się wyświetlić go na ekranie komputera. Za pomocą kwantyzacji kolorów można odpowiednio zmniejszyć ich liczbę (jeśli nie dysponuje się pełnokolorową paletą w trybie true color). Należy wówczas wybrać odpowiedni ich podzbiór, za pomocą którego można będzie wyświetlić właściwe przybliżenie (aproksymację) wejściowego obrazka.

Ponieważ ekran komputera jest dwuwymiarowy, nie można na nim bezpośrednio wyświetlić obiektów trójwymiarowych. Musimy zdecydować się w jaki sposób chcemy zrzutować naszą scenę na ekran.

Najczęściej spotyka się rzutowanie perspektywiczne, w którym obiekty znajdujące się bliżej obserwatora muszą wydawać się większe. W rzutowaniu perspektywicznym, widocznym wycinkiem sceny jest trójwymiarowy trapezoid, zwany ostrosłupem widzenia (viewing frustrum).

Jego wierzchołkiem jest oko obserwatora, a kierunek patrzenia wyznacza położenie podstawy, które jest ekranem komputera. Wówczas na otrzymanym obrazie widoczna będzie ta część modelowanego trójwymiarowego świata, która mieści się wewnątrz nie ograniczonego ostrosłupa widzenia.

Gałąź grafiki komputerowej zajmująca się generowaniem obrazów wyglądających prawie tak, jak rzeczywiste zdjęcia to fotorealizm (photorealism). To trochę myląca nazwa, bowiem określenie fotorealistyczny wcale nie znaczy nieodróżnialny od prawdziwej fotografii. Względy praktyczne decydują, że na ogół najważniejsza jest efektywność przygotowania obrazu.

Algorytmy

Zanim jednak stało się możliwe uzyskiwanie takich obrazów, przez wiele lat rozwijano coraz doskonalsze algorytmy grafiki komputerowej. Temu procesowi towarzyszyło stałe zwiększanie możliwości komputerów. To właśnie grafika była tą dziedziną, której potrzeby obliczeniowe nigdy nie zostały zaspokojone. Zainteresowano się nią już w latach 60. w chwili, gdy tylko pozwolił na to rozwój sprzętu.

Od prostych obiektów złożonych z kresek, zaczęto przechodzić do obrazów wyglądających bardziej prawdziwie w których widoczne były cienie i zróżnicowane powierzchnie, jakimi pokrywano różnorodne przedmioty. W latach 70. opracowano algorytmy cieniowania (shading algorithms), wykorzystywane i dzisiaj. Stopniowo wizualizowano coraz bardziej skomplikowane obiekty, od figur geometrycznych do wnętrz budynków (p. ilustracje).

Prawdziwą rewolucją była dopiero opracowana nieco później metoda śledzenia promieni (ray-tracing). Pozwoliła ona na wizualizowanie scen fotorealistycznych, a co więcej na zerwanie z koniecznością opisywania obiektów w postaci skupiska wielokątów.

Jak zawarte jest to w samej nazwie, istotą tego algorytmu jest "śledzenie", czyli symulowanie przebiegu promieni światła w wizualizowanej scenie. Postępuje się tutaj dokładnie odwrotnie niż w optyce geometrycznej - promień światła prowadzi się od obserwatora w stronę źródła światła. Podyktowane jest to względami efektywności (statystycznie większość promieni wysłanych od źródła nigdy do obserwatora nie trafia). Jeśli promień napotka jakiś przedmiot to częściowo go przenika, a częściowo się od niego odbija. Dalej śledzi się drogę dwu promieni - odbitego i przepuszczonego. Każdy z tych dwu promieni może się dalej odbijać lub przenikać (stąd mówi się o rekurencyjnym algorytmie śledzenia promieni).

Ponieważ widzimy tylko fragment modelowanego świata (patrząc przez dwuwymiarowe okno), to promienie wypuszczamy od obserwatora znajdującego się w wierzchołku ostrosłupa widzenia, tak by przecięły jego podstawę będącą ekranem naszego komputera.

Ten ostrosłup widzenia ma prostokątną podstawę, która jest podzielona dokładnie w ten sam sposób co ekran. Jeśli wyjściowy obrazek ma mieć rozdzielczość 1024x768 pikseli, to podstawę stożka widzenia też trzeba podzielić na 786 432 jednakowych kawałeczków (1024*768), których fizyczna wielkość zależy od wysokości ostrosłupa. W technice ray-tracingu, przez każdy z pikseli przepuszczony zostaje jeden lub więcej promieni, co pozwala na wyznaczenie koloru każdego z nich.

Wylicza się go rozwiązując rekurencyjne równanie oświetlenia w punkcie przecięcia promienia z obiektem modelowanej sceny. Zależy ono od oświetlenia tego punktu, kąta padania promienia, wektora normalnego w tym punkcie powierzchni obiektu oraz innych cech tej powierzchni. Najważniejszym czynnikiem decydującym o koszcie całego algorytmu jest wyznaczenie przecięć promienia z obiektami. Na ogół są to dość skomplikowane równania, często podane w postaci uwikłanej. Ich rozwiązanie wymaga wykonania wielu złożonych operacji zmiennoprzecinkowych, a trzeba testować przecinanie się każdego promienia ze wszystkimi obiektami sceny.

W celu uzyskania realistycznych efektów stosuje się pewne sztuczki. Jedną z nich jest tzw. teksturowanie, dzięki któremu można uzyskać wrażenie, że powierzchnia prostych obiektów wygląda na bardzo skomplikowaną, mimo iż unika się modelowania tej złożoności wprost. Dokonuje się tego poprzez odwzorowanie (czyli naklejenie) jakiejś faktury na powierzchni obiektu (texture mapping), zaburzanie wektora normalnego (bump map) czy też "skrzyżowanie" przedmiotów sceny z jakimś trójwymiarowym wzorem (solid texturing). Dzięki tym wszystkim zabiegom możemy stosunkowo łatwo przedstawić piłkę w zielone grochy czy skorodowany kawałek metalu.

Z uwagi na bardzo duże wymagania ray-tracingu po względem mocy obliczeniowej (przygotowanie skomplikowanego obrazka na komputerze z procesorem Pentium może trwać kilka godzin), opracowano wiele algorytmów jego przyspieszania. We wszystkich dostępnych realizacjach nie działa on tak prosto, jak został opisany w pierwotnej postaci. Ogólnie dąży się do redukcji liczby wyznaczanych przecięć promienia z obiektami (np. poprzez utworzenie hierarchii brył otaczających).

Jednak mimo swoich ogromnych zalet metoda śledzenia promieni nie jest panaceum. Prostota równania oświetlenia bierze się przede wszystkim z ogromnego uproszczenia wzajemnego wpływu obiektów, spowodowanego wtórnym oświetleniem rozproszonym. Nie sposób symulować tutaj skomplikowane źródła światła (jak np. rozgrzaną stal w kotle) czy chociażby oświetlenie pokoju przez kilka okien. By sobie poradzić z tym problemem wymyślono metodę bilansu energetycznego (radiosity method). Tutaj podejście jest inne: wszystkie podstawowe elementy modelowej sceny traktuje się jako płaskie źródła i odbiorniki światła (energii). Ponieważ z fizyki wiadomo, że sumaryczna ilość energii w układzie izolowanym jest stała, to można wzajemne oddziaływanie wszystkich fragmentów powiązać w jeden układ równań, którego rozwiązanie wyznaczy kolor każdego z płatów. Jednak aby taka scena mogła być modelowana dokładnie, te wszystkie fragmenty muszą być odpowiednio małe. Problem polega na tym, że w związku z powyższym w jednym układzie znajdują się zwykle tysiące lub nawet raczej dziesiątki tysięcy takich niby prostych równań i oczywiście taka sama liczba zmiennych.

Złożoność obliczeniowa tego algorytmu ogranicza jego stosowanie tylko do superkomputerów i dużych stacjach roboczych. W profesjonalnych systemach tworzenia obrazów fotorealistycznych, takich jak TBT firmy Voxel, stosuje się rozwiązania hybrydowe, umiejętnie łączące metody śledzenia promieni i bilansu energetycznego (radiance).

W grafice komputerowej zależność między metodami rozwiązywania zadań a sprzętem, na jakim się je realizuje, jest wyjątkowo silna. Wszystkie poważne systemy komputerowe dedykowane trójwymiarowej wizualizacji wyposażone są w układy dokonujące sprzętowego przyspieszania obliczeń. Pojawianie się nowych technologii i stały wzrost możliwości obliczeniowych komputerów pozwala na coraz sprawniejsze generowanie lepszych i bardziej realistycznych obrazów. Bez wątpienia dominuje tutaj firma Silicon Graphics, której stacje robocze stały się w grafice swego rodzaju standardem.

A co z kwiatkami?

Od samego początku niezwykłą trudność sprawiało modelowanie obiektów naturalnych takich jak góry, drzewa czy ciało ludzkie. Problem leżał w tym, że jak to słusznie zauważył B. Mandelbrot świat nie składa się z kul prostokątów, walców i kul, ale z nieskończenie drobnych i różnorodnych elementów, które wśród pozornego chaosu tworzą bardzo regularne struktury. To właśnie teoria fraktali, rozwinięta w latach 80. pozwoliła generować obiekty do złudzenia przypominające złożone obiekty świata rzeczywistego. Pokrewne im dziedziny takie jak metoda funkcji iterowanych (Iterated Functions Systems) oraz tzw. L-systemy, wynalezione przez parającego się botaniką teoretyczną Lindemayera, pozwoliły na zadziwiająco proste i zwięzłe definiowanie form tak skomplikowanych i pięknych jak kwiat róży. Sama idea w dość dużym uproszczeniu polega na wyborze jakiegoś elementu podstawego i poddaniu go wiele razy prostym przekształceniom, przy zastosowaniu niewielkich zaburzeń stochastycznych, co pozwala zachować ład i harmonię z odrobiną naturalnego nieporządku.

Rendering takich obiektów z uwagi na ich kompleksową budowę jest bardzo czasochłonny. Jest to jeden z najburzliwiej rozwijających się obecnie obszarów grafiki komputerowej.

Aż po horyzont

Na świecie nad rozwojem metod i algorytmów tworzenia obrazów fotorealistycznych pracuje wiele ośrodków naukowych. Tegoroczną wystawę i konferencję SIGGRAPH będącą największą imprezą gromadzącą wszystkich specjalistów zajmujących się tą dziedziną, odwiedziło ponad 30 tys. uczestników. Charakterystycznym rysem obecnego rozwoju grafiki jest coraz wyraźniejszy udział szeroko rozumianej rozrywki (w tym gier komputerowych), przy malejącym wpływie zastosowań militarnych. Należy mieć świadomość, że w grafice wiele jeszcze pozostało do zrobienia. Obecnie generowane obrazy z całą pewnością za dziesięć czy nawet pięć lat wydadzą się nam prymitywne.

Grafika trójwymiarowa jest bramą do świata wirtualnego, którego atrakcyjność znacząco wpłynie na oblicze społeczeństwa krajów wysoko rozwiniętych w XXI wieku. Wszystko jeszcze przed nami.

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

TOP 200