Grafika Komputerowa (GRK)
Wykład XII
Podsumowanie
W poszczególnych wykładach poznaliśmy podstawowe pojęcia i metody grafiki komputerowej. Wszystkie poznane algorytmy praktycznie są wykorzystywane w różnych programach graficznych. Znajomość tych algorytmów pozwala lepiej zrozumieć działanie poszczególnych narzędzi spotykanych w programach graficznych, ich możliwości i ograniczenia. Ponadto stwarza to możliwość samodzielnego pisania oprogramowania graficznego.
Na rynku dostępnych jest kilkaset różnych programów graficznych, poczynając od darmowych a kończąc na drogich systemach komercyjnych. Możliwości funkcjonalne programów są bardzo zróżnicowane. Wybór konkretnego programu zależy od zastosowania. Przy prostych zastosowaniach, z reguły jeden z wielu dostępnych programów w zupełności wystarczy. Przy bardziej zaawansowanych zastosowaniach czasami trzeba korzystać z kilku programów, wykorzystując unikatowe możliwości poszczególnych programów. Informacje o dostępnych programach można znaleźć na przykład na stronie www.dobreprogramy.pl w zakładce programy i dalej grafika.
Mimo ogromnej oferty rynkowej wciąż jest jeszcze wiele do zrobienia, a równocześnie istnieje stałe zapotrzebowanie na nowe oprogramowanie o bogatszych możliwościach funkcjonalnych, bardziej przyjazne dla użytkownika i przystosowane do konkretnych potrzeb użytkownika. Przy pisaniu własnych programów można korzystać z programów bibliotecznych niskiego poziomu, które udostępniają zestawy poleceń graficznych lub funkcji. Z bibliotek tych można korzystać z poziomu różnych języków programowania (C++, Java itd.). Zapewniają one interfejs programowy do sprzętu graficznego. Najpopularniejsze biblioteki to OpenGL i DirectX.
Obliczenia związane z grafiką komputerową są z reguły wspomagane sprzętowo. Do niedawna, wspomaganie to koncentrowało się na wspomaganiu renderingu rastrowego. Typowy ciąg obliczeń, określany jako potok graficzny, ilustruje rysunek XII.1

Rys. XII.1. Typowy potok graficzny
Początkowe, sprzętowe realizacje potoku nie dawały możliwości programowania poszczególnych etapów obliczeń. Obecnie wykorzystywane procesory graficzne (GPU) umożliwiają użytkownikowi programowanie elementów potoku. Te programowalne etapy są na rysunku zaznaczone kolorem zielonym. Dwa etapy zaznaczone na rysunku kolorem niebieskim umożliwiają ich konfigurowanie (bez możliwości programowania). Dwa etapy zaznaczone kolorem żółtym są realizowane wyłącznie sprzętowo.
Wyróżniony na rysunku XII.1 etap vertex shader umożliwia użytkownikowi realizację własnych programów dotyczących wszelkich operacji związanych z wierzchołkami obiektów lub siatek przybliżających powierzchnie boczne obiektów. Wyróżnić tu można operacje związane z przekształceniami geometrycznymi, zmianami układów współrzędnych, z atrybutami związanymi z wierzchołkami (takimi jak wektory normalne, współrzędne tekstury (u,v), barwa).
Etap obcinania eliminuje z obliczeń te fragmenty sceny, które nie mogą pojawić się na ekranie (znajdują się poza bryłą widzenia).
Kolejny etap zapewnia odwzorowanie obrazu do współrzędnych ekranu.
Etap rasteryzacji obejmuje obliczenia związane z odtwarzaniem trójkątów (wcześniejsze etapy wykonywały obliczenia w odniesieniu do wierzchołów trójkątów) oraz wyznaczaniem pikseli należących do trójkątów.
Etap pixel shader umożliwia wykonywanie obliczeń związanych z barwą pikseli, również z uwzględnieniem teksturowania.
Ostatni etap ROP (Raster OPerations) zapewnia łączenie informacji o nowo obliczonej wartości dla piksela (fragmentu) z informacją obliczoną wcześniej. Tutaj też rozwiązywany jest problem widoczności (z-bufor).
Współczesne procesory graficzne o architekturze strumieniowej (SIMD), są najbardziej złożonymi procesorami na rynku. Zapewniają one kolejne przetwarzanie uporządkowanych zbiorów podobnych danych (na przykład zbiory wierzchołków, pikseli). Procesory GPU zawierają tysiące tzw. rdzeni, umożliwiających wykonywanie operacji stało- i zmiennopozycyjnych, grupowanych w multiprocesory. Kolejne generacje GPU mają coraz większe możliwości obliczeniowe. Dla przykładu GPU TURING firmy Nvidia, (zawierające około 18,6 miliarda tranzystorów) ma w sumie ok. 5000 rdzeni. Pozwala ono na realizacje renderingu rastrowego, jak też renderingu dla metody śledzenia promieni. Zapewnia również wspomaganie obliczeń dedykowanych dla zastosowań związanych ze sztuczną inteligencją, a zwłaszcza z zaawansowanymi sieciami neuronowymi (deep learning) oraz zaawansowanymi obliczeniami cieniowania powierzchni obiektów.
Procesory graficzne zawierają duże liczby multiprocesorów, co zachęca wielu użytkowników do wykorzystywania zasobów GPU do wykonywania obliczeń równoległych dla innych zastosowań niż tylko grafika komputerowa. W celu ułatwienia wykonywania takich obliczeń firma Nvidia opracowała środowisko programistyczne CUDA (Compute Unified Device Architecture).
Podsumowując część wykładową kursu mam nadzieję, że przedstawiony materiał był zrozumiały i wyjaśnił o co chodzi w grafice komputerowej, ale równocześnie nasunął refleksję, że wciąż pojawia się wiele problemów, które wymagają rozwiązania .Taka refleksja jest oczywiście w pełni uzasadniona. Grafika komputerowa jest bardzo rozległą dziedziną wiedzy i nie sposób jest przedstawić wszystkich problemów w ramach jednego kursu. Równocześnie, jest to dziedzina wciąż rozwijająca się - stale pojawiają się nowe metody, umożliwiające tworzenie obrazów o coraz lepszej jakości i coraz szybciej. Wciąż też pojawiają się nowe obszary zastosowań, które wymagają opracowywania następnych rozwiązań.
Sądzę również, że dołączone do poszczególnych wykładów pytania i problemy do samodzielnego rozwiązania pozwoliły każdorazowo zweryfikować czy dany wykład został dobrze zrozumiany. Wszystkie pytania i problemy zostały tak dobrane, żeby można było znaleźć odpowiedzi na nie albo bezpośrednio w wykładzie albo żeby można było na podstawie znajomości wykładów dojść samodzielnie do poprawnego rozwiązania. Gdyby jednak pojawiły się trudności ze znalezieniem poprawnych odpowiedzi, bądź gdyby pewne fragmenty wykładów były mimo wszystko niezrozumiałe, to proszę o kontakt za pomocą poczty elektronicznej (jza@ii.pw.edu.pl). Będę również zobowiązany za zwrócenie uwagi na ewentualnie zauważone usterki oraz za wszelkie sugestie, które pozwolą ulepszyć kurs.
Z pewnością przedstawiony w wykładach materiał teoretyczny przyda się również w czasie zajęć laboratoryjnych, w ramach których poznamy praktycznie narzędzia stosowane w programach graficznych.
Ponieważ, jak to już było sygnalizowane na początku kursu, czeka nas egzamin z materiału wykładowego, niżej podane są przykładowe tematy egzaminacyjne.
W każdym z tematów od 1 do 10 podane są trzy stwierdzenia. Niektóre z tych stwierdzeń są poprawne, inne nie. Proszę w odpowiednich polach wpisać TAK gdy stwierdzenie jest poprawne albo NIE gdy stwierdzenie jest niepoprawne. Za każdy z tematów 1-10 uzyskuje się 3 punkty, jeżeli związane z tematem trzy odpowiedzi zostały zaznaczone poprawnie. Za każdy z tematów 11, 12, 13 można uzyskać po 10 punktów. Minimum dla uzyskania oceny pozytywnej wynosi 31 punktów.
1. Podstawowe algorytmy techniki rastrowej
a. W algorytmie rysowania okręgu korzysta się z symetrii okręgu
b. Odcinek o współrzędnych końców (2,1), (5,6) narysowany przy wykorzystaniu algorytmu Bresenhama składa się z 6 pikseli
c. Aliasing jest skutkiem skończonej rozdzielczości rastra
2. Barwa w grafice komputerowej
a. Pojęcie barwy jest wrażeniem percepcyjnym człowieka
b. Model RGB reprezentuje wszystkie barwy widzialne
c. W wykresie chromatyczności widmowe barwy nasycone znajdują się na obwiedni wykresu
3. Podstawowe przekształcenia geometryczne
a. Kwadrat o współrzędnych wierzchołków (0, 0), (1, 0), (1, 1), (0, 1) został poddany operacji skalowania ze współczynnikami Sx = 2, Sy = 3 i przesunięty o wektor (3, 2). Współrzędne jednego z wierzchołków otrzymanej figury to (2, 5)
b. Punkt o współrzędnych jednorodnych (5, 4, 3, 1) w układzie współrzędnych xyz ma współrzędne (5, 4, 3)
c. W przekształceniu typu obrót, punkt wokół którego następuje obrót musi pokrywać się z początkiem układu współrzędnych
11. Omówić krzywe Béziera
12. Wyjaśnić różnice między cieniowaniem płaskim, cieniowaniem Gouraud i cieniowaniem z wykorzystaniem równania Phonga
13. Omówić metodę śledzenia promieni