Referat: „Rendering 3D: potok 3D, możliwości wsparcia

advertisement
Architektura
Procesorów
Graficznych
Referat: „Rendering 3D: potok 3D,
możliwości wsparcia sprzętowego, możliwości
przyspieszenia obliczeń”.
Grupa wyrównawcza
Cezary Sosnowski
1. Renderowanie
Renderowanie (z j. ang rendering tj. spowodować, zinterpretować) przedstawienie informacji zawartych w dokumencie elektronicznym w formie
najbardziej właściwej dla danego środowiska (np. wizualnie, w tym na ekranie i
w druku, czy dźwiękowo).
1.1 Renderowanie w Grafice Trójwymiarowej
Renderingiem w grafice trójwymiarowej nazywa się proces przekształcenia
danych trójwymiarowych w dane dwuwymiarowe. Przekształcenie polega na
przeliczeniu danych wejściowych reprezentujących scenę graficzną, w wyniku
czego powstaje obraz dwuwymiarowy:
Dane wejściowe stanowią model opisujący trójwymiarowe obiekty w
określonym języku programowania lub strukturze danych, zrozumiałej dla
komputera renderującego. Opis może dotyczyć wielkości i koloru obiektów,
oświetlenia, położenia obserwatora sceny, ruchu obiektów na scenie. W procesie
renderowania uwzględniane są różne zjawiska fizyczne m.in. odbicia promieni,
cienie, załamania światła, przezroczystość i inne zjawiska optyczne.
Scena 3D:
 Obiekty 3D stanowią pewien fragment przestrzeni ograniczonej
powierzchniami o różnym stopniu komplikacji. Chociaż każda taka
powierzchnia da się jednoznacznie zdefiniować przy pomocy równań
matematycznych, to ich przetwarzanie pochłonęło by całą dostępną
moc obliczeniową.
 Zagadnienie 3D można w ogromnym stopniu uprościć rozkładając
każdą z takich powierzchni na odpowiednio dużą (zależną od stopnia
dokładności) liczbę wielokątów płaskich. Najprostszym z wielokątów
jest trójkąt.
 Każdy z wierzchołków trójkąta jest jednoznacznie zawieszony w
przestrzeni 3D przy pomocy trzech współrzędnych (x, y, z). Cały obiekt
3D przechowywany jest w spójnym fragmencie pamięci
Scena 3D - budowa:
- Geometria obiektów 3D
- Materiały pokrywające obiekty:
 Kolor powierzchni obiektów;
 Tekstura;
 Własności powierzchni
- Kamera
- Źródło światła
- Parametry środowiska (mgła, dym, itp.)
Reprezentacja obiektów geometrycznych Sceny 3D:
 Reprezentacja wielokątowa: trójkąt( obiekt podstawowy), pasy wachlarze.
 Krzywe i powierzchnie
Podstawowe etapy renderingu:







przekształcenia (transformacje) sceny
ustawienie źródeł światła
rzutowanie na płaszczyznę
usuwanie niewidocznych powierzchni
obcinanie widoku
przekształcenie widoku
rasteryzacja – obliczenie barwy każdego piksela obrazu
2. Potok graficzny
Proces renderingu polega na przeliczeniu danych reprezentujących
trójwymiarową scenę. Efektem końcowym tej operacji jest obraz lub animacja
dwuwymiarowa. Przekształcenie sceny 3D w 2 D nie odbywa się jednoetapowo.
Składa się na to szereg operacji. Taka sekwencja przekształceń nazywa się
potokiem graficznym. Przekształcenia te są kolejno stosowane do każdego
obiektu na scenie, w wyniku czego otrzymuje się gotowe do włączenia na
ekranie piksele obrazu końcowego. Pojedynczy potok jest w stanie obliczyć w
jednym momencie kolor tylko jednego piksela. Współczesne karty graficzne
wyposażone są w kilka potoków, np. GeFroce 8800 GTX zbudowanych jest z
trzech 48-potokowych procesorów, co daję łączną liczbę 128 potoków na karcie
graficznej. Większość operacji w potoku jest wspieranych sprzętowo, co
dodatkowo przyspiesza proces renderingu.
Typowy schemat potoku graficznego składa się z dwóch faz, przetwarzanych
przez wyspecjalizowany procesor graficzny znajdujący się na karcie graficznej.
Pierwszą fazą w potoku graficznym jest przetwarzanie geometrii. W fazie tej
wyróżnia się kilka następujących po sobie operacji: transformacja geometrii,
obliczenie oświetlenia, transformacja do układu kamery, rzutowanie, obcinanie,
mapowanie i teksturowanie. Druga faza potoku graficznego to rasteryzacja.
Wynikiem rasteryzacji jest końcowa scena 2D, gotowa do wyświetlenia na
ekranie komputera.
Współrzędne obiektów w potoku
Przetwarzanie w potoku graficznym składa się ze zbioru operacji
przekształcających współrzędne obiektów. Każde z przekształceń polega na
transformacji współrzędnych z jednego układu współrzędnych w drugi, w taki
sposób by ze współrzędnych wirtualnej sceny 3D otrzymać współrzędne ekranu
urządzenia wyświetlającego.
W przetwarzaniu potokowym wyróżnia się 5 różnych układów współrzędnych
różniących się punktem odniesienia:
 współrzędne modelu (MCS - Modelling Coordinate System) – lokalny
układ współrzędnych obiektu x, y, z
 współrzędne świata (WCS - World Coordinate System) – globalny układ
współrzędnych x, y, z
 współrzędne kamery (VCS - Viewer Coordinate System) – punktem
odniesienia jest kamera (obserwator sceny)
 współrzędne znormalizowane (NDCS - Normalized Device Coordinate
System) – punktem odniesienia jest kamera, ale wszystkie współrzędne
rzutowane są na jedną płaszczyznę
 współrzędne ekranowe (SCS - Screen Coordinate System) – puntkem
odniesienia jest lewy górny róg ekranu
Przestrzeń
współrzędnych
lokalnych
x,y,z
Definicja
obiektu
Przestrzeń
współrzędnych
świata
Przestrzeń
oka (kamery)
Przestrzeń 3D
ekranu
xe, ye, ze
xs, ys, zs
Odrzuć (culling)
Obetnij do bryły
widzenia
Usuwanie
powierzchni
niewidocznych
Rasteryzacja
Cieniowanie
Przestrzeń
wyświetlacza
xw, yw, zw
Skomponuj scenę
Zdefiniuj kamerę
Zdefiniuj światła
Przekształcenia
modelowania
Przekształcenia
widoku
Przetwarzanie geometrii
Procesy algorytmiczne
xd, yd, zd
Potok 3D
 Obliczenia wstępne
Pierwszy etap potoku graficznego to obliczenia wstępne i przekształcenie
informacji przez procesor wstępny (tzw. Setup Engine lub Input Assembler).
Ten ostatni rozpoznaje typ danych, tj. bada, czy ma do czynienia z wektorami,
obrazami, czy też kodem programu i odpowiednio przygotowuje informacje do
dalszej obróbki.
 Transformacja geometrii
Obejmuje operację transformacji i rotacji obiektów. Obiekt znajduje się w
środku układu modelu. W wyniku transformacji jest przekształcany do
położenia i kształtu docelowego.
Transformacja geometrii dokonuje przekształcenia współrzędnych modelu
(MCS) do współrzędnych świata (WCS). Jest to często spotykane podejście w
grafice komputerowej. Obiekty są rysowane początkowo na środku układu
współrzędnych, a potem przesuwane w docelowe miejsce na scenie.

Obliczanie oświetlenia
Scena 3D zawiera definicje świateł oraz powierzchni odbijających lub
rozpraszających promienie świetlne. Obliczanie oświetlenia sceny polega na
wyliczenia koloru i jasności poszczególnych elementów sceny.
 Transformacja do układu kamery
Wszystkie wierzchołki obiektów transformowane są ze współrzędnych
świata (WCS) do współrzędnych kamery - obserwatora sceny (VCS). Operacje
tę zrealizować można za pomocą jednej transformacji i trzech obrotów (wokół
każdej z osi układu współrzędnych). W wyniku transformacji do układu, kamera
(obserwator) znajduje się w środku układu współrzędnych i „patrzy” w kierunku
ujemnych wartości osi Z.
Kamera patrzy w kierunku ujemnych wartości Z

Rzutowanie
Na tym etapie przetwarzania współrzędne kamery przeliczane są do
współrzędnych znormalizowanych (NDCS). Współrzędne trójwymiarowe
rzutowane są na dwuwymiarową płaszczyznę. Płaszczyznę można traktować
jako wirtualny ekran urządzenia wyświetlającego. Rzutowanie odbywa się na
zasadzie poprowadzenia prostej przechodzącej przez punkt trójwymiarowej
sceny (punkt A) i miejsce usytuowania kamery (punkt C). Przecięcie prostej z
płaszczyzną określa nowe współrzędne punktu (punkt A’) .
Wirtualny ekran
Kamera
Schemat rzutowania
Obiekt
na scenie

Obcinanie
Kamera ma pewien określony kąt widzenia. Przeważnie jest on zbliżony do
kąta, jaki widzi człowiek. W wyniku operacji rzutowania cześć nowych
współrzędnych może znajdować się poza widokiem kamery (obserwatora). W
celu przyspieszenia dalszych obliczeń odrzuca się wszystkie punkty, które nie
znajdują się w polu wiedzenia kamery. Takie punkty nigdy nie zostaną
wyświetlone na ekranie, więc nie ma potrzeby ich dalej przetwarzać (clipping).
Operacja obcinania nie jest niezbędna do stworzenia poprawnego obrazu
wynikowego, ale bardzo ważna ze względu na efektywność renderowania. Na
scenie znajdować się może bardzo dużo obiektów, jednak przeważnie
obserwowany jest tylko fragment sceny, a zatem widoczna jest tylko część
obiektów. Dlatego też nie ma potrzeby, aby przeznaczać czas i pamięć na
przetwarzanie niewidocznych obiektów. Dalej przetwarzanie odbywa się z
pominięciem odrzuconych obiektów.

Mapowanie
Operacja mapowania przekształca współrzędne znormalizowane do
współrzędnych ekranowych. Transformacja polega na przesunięciu środka
układu współrzędnych z miejsca położenia kamery do lewego górnego
wierzchołka płaszczyzny ekranu.
 Teksturowanie
Obiekty świata rzeczywistego mają często bardzo skomplikowaną fakturę.
Zamodelowanie takiego obiektu za pomocą grafiki komputerowej jest niezwykle
trudne, a przekształcanie takiego obiektu jest złożone obliczeniowo. W celu
wyeliminowania tych trudności stosuje się operację zwaną teksturowaniem.
Operacja ta jest kompromisem między efektywnością obliczeń, a jak
najwierniejszym odwzorowaniem rzeczywistego obiektu w świecie wirtualnym.
Teksturowanie polega na nałożeniu na obiekt sceny 3D obrazu (tekstury) 2D.
Zabieg ma na celu oddanie jak największej liczby szczegółów obiektu, nie
zwiększając samego skomplikowania modelu. Liczba współrzędnych
określających obiekt nie zmienia się w wyniku teksturowania.
Proces nakładania tekstury na obiekty nazywa się mapowaniem tekstury
(ang. texture mapping). Obiekty trójwymiarowe są przekształcane do
odpowiadających im na ekranie obiektów dwuwymiarowych, a na te nakładany
jest dwuwymiarowy (również odpowiednio przekształcony) statyczny obraz 2D.
 Rasteryzacja
Rasteryzacja polega na odwzorowaniu w jak najwierniejszy sposób prostej
figury geometrycznej (np. punktu, odcinka, trójkąta, wielokąta, okręgu, elipsy)
na dyskretnym zbiorze punktów, reprezentujących piksele ekranu. Można
powiedzieć, że zadaniem procesu rasteryzacji, wykonywanego podczas
renderowania grafiki 3D jest przekształcenie sceny trójwymiarowej na zbiór
pikseli, które wyświetlone zostaną na ekranie monitora. Każdy punkt sceny
odpowiadać będzie jednemu pikselowi na monitorze w zadanej rozdzielczości.
Operacje rasteryzacji wykonuje wyspecjalizowana jednostka (rasteryzator)
znajdująca się na karcie graficznej. Z punktu widzenia układu współrzędnych
rasteryzacja jest transformacją współrzędnych znormalizowanych (współrzędne
mają charakter ciągły) do współrzędnych ekranowych (współrzędne dyskretne)
wynikających z rozdzielczości ekranu. Dla prostych figur geometrycznych
istnieją bardzo proste i efektywne algorytmy, które we współczesnych kartach
graficznych są implementowane sprzętowo.
3. Wsparcie sprzętowe
Renderowanie jest procesem bardzo złożonym obliczeniowo. Z tego
powodu dzisiejsza grafika komputerowa wykorzystuje wsparcie sprzętowe do
tworzenia obrazów i animacji. Procesory graficzne we współczesnych kartach
graficznych pozwalają na bardzo efektywne i szybkie renderowanie grafiki
trójwymiarowej. Umożliwiają to specjalne podzespoły dedykowane do obliczeń
geometrycznych i wyliczania efektów świetlnych. Takie sprzętowe podejście
pozwala w znaczący sposób przyspieszyć proces renderowania. Przeniesienie
obliczeń z procesora głównego na procesor graficzny pozwala efektywniej
przetwarzać aplikacje graficzne. Skoro główna jednostka obliczeniowa
komputera nie zajmuje się przetwarzaniem grafiki, to można ją wykorzystać do
innych obliczeń, np. związanych z ruchem obiektów na scenie, wykrywaniem
kolizji obiektów lub innym zachowaniem się świata wirtualnego.
Moc obliczeniowa kart graficznych z roku na rok rośnie. Jednak wydajność
pojedynczego procesora graficznego nadal stanowi poważne ograniczenie dla
bardziej skomplikowanych scen. Proces renderowania dla: scen zawierających
ogromna liczbę obiektów, obiektów o skomplikowanej strukturze, animacji o
wysokiej liczbie klatek na sekundę, obrazów o bardzo wysokiej rozdzielczości
jest bardzo czasochłonną operacją. Dlatego powstało wiele mechanizmów oraz
algorytmów rozproszonego renderowania, które mają na celu w znaczący
sposób przyspieszyć proces renderowania grafiki trójwymiarowej.
Nieprogramowalne elementy potoku
Odpowiadają m.in za:




przetwarzanie instrukcji asemblera;
składanie figur z wierzchołków;
rasteryzacja;
zapis do bufora wynikowego obrazu;
Z programistycznego punktu widzenia niektóre z tych operacji wykonywane są
automatycznie, natomiast możliwa jest ich ograniczona konfiguracja. Rysunek
poniższy przedstawia schemat, który zawiera również te niezmienne etapy
przetwarzania potokowego.
Program/API
Program - Jest to program wykonywany przez CPU. To w tym programie
zdefiniowana zostaje ‘praca’ do wykonania przez GPU, tj. wygenerowanie
wierzchołków i tekstur, które następnie podlegają przetworzeniu przez shakery
za pomocą określonego programu.
Driver – sterownik
 W większości przypadków producenci GPU nie ujawniają
wszystkich tajemnic związanych z implementacją sterowników;
 Może stanowić ‘wąskie gardło’ i problemy z kompatybilnością w
przypadku błędów lub brakach w implementacjach niektórych
funkcji.
Input Asembler/Obliczenia wstępne
Zadaniem tego niezmiennego elementu potoku jest odbiór danych
pochodzących ze sterownika i translację do formy wykorzystywanej przez GPU.
Odnosi się to do zadanych przez CPU do przetworzenia figur podstawowych
(punkty, linie, trójkąty).
Składanie prymitywów
Transformacja wierzchołków, będących wynikiem działań Vertex
Processor w figury geometryczne, np. punkty, linie, trójkąty
Rasteryzacja oraz Interpolacja
Przypisanie wartości współrzędnych fragmentów wielokąta w przestrzeni
do współrzędnych w buforze/teksturze (rasteryzacja). Następuje również
interpolacja wartości w przypadku braku odwzorowania 1:1.
Frame Buffet/Bufor Ramki
Tutaj budowane i przechowywane są obrazy przeznaczone do wyświetlenia
na ekranie w postaci dwuwymiarowej tablicy pikseli.
Powyższy schemat przedstawia poszczególne etapy powstawania obrazu,
zaczynając od programu wykonywanego przez CPU, gdzie następuje wywołanie
tworzące 3 wierzchołki oraz przypisanie do nich współrzędnych tekstury. Reszta
operacji wykonywana jest już po stronie GPU. Sterownik (Driver) pełni w tym
przypadku rolę pośrednika pomiędzy CPU a GPU. Procesor wierzchołków
dokonuje transformacji ich współrzędnych. Program dla procesora geometrii
może zwiększyć ilość wierzchołków opisujących figurę, tak aby zamodelować
krzywą. Pixel Shader przetwarza każdy piksel tekstury nałożonej na obiekt, w
celu ustawienia wartości koloru w zależności od położenia i innych danych.
Ostatnim etapem przetwarzania jest umieszczenie obrazu wynikowego w
specjalnym buforze (Frame buffer).
4. Przyspieszenie obliczeń - zrównoleglenie obliczeń w
procesie renderowania.
Celem rozproszenia obliczeń w procesie renderowania jest zrównoleglenie
obliczeń, co znacząco przyspiesza cały proces. Istnieje kilka różnych sposobów
zrównoleglenia obliczeń w procesie renderowania grafiki trójwymiarowej.
Zalicza się do nich: zrównoleglenie funkcjonalności (z ang. functional
parallelism), rozproszenie danych (z ang. data parallelism) oraz zrównoleglenie
w czasie (z ang. temporal parallelism). W zależności od aplikacji graficznej i
celu, jaki realizuje, stosuje się różne metody zrównoleglenia. Wpływ na wybór
najefektywniejszej formy zrównoleglenia obliczeń ma wiele czynników, np.
rodzaj sceny, oczekiwany wynik renderingu (obraz statyczny lub animacja). W
bardziej skomplikowanych problemach renderingu stosuje się metody
hybrydowe (z ang. hybrid parallelism) łączące różne podstawowe metody
zrównoleglenia.
Zrównoleglenie funkcjonalności
Jednym ze sposobów zrównoleglenia jest podział całego procesu
renderowania na mniejsze zadania. Każde zadanie realizuje pewną
funkcjonalność. Przykładem tego typu zrównoleglenia jest potok graficzny.
Potok składa się z kilku następujących po sobie zadań. Każde zadanie
odpowiada jednemu etapowi. Dane wyjściowe jednego etapu są danymi
wejściowymi następnego. Gdy dane zostaną przeliczone przez jedno zadanie
(zakończony zostanie jeden z etapów) są przekazywane do następnego. W tym
czasie pierwsze zadanie może przeliczyć nową porcję danych. Poziom
zrównoleglenia jest wprost proporcjonalny do liczby etapów w potoku.
Zrównoleglenie funkcjonalności jest szczególnie efektywne dla danych
reprezentujących proste obiekty takie jak: punkty, odcinki, proste figury
geometryczne. Zrównoleglenie funkcjonalności stało się na tyle popularną
metodą przyspieszania obliczeń graficznych, że współcześnie metoda ta
realizowana jest prawie tylko sprzętowo. Nawet najprostsze karty graficzne
dysponują możliwością przetwarzania potokowego.
Pomimo swoich zalet i tak powszechnego stosowania zrównoleglenia
funkcjonalności, metoda ta ma dwie wady. Po pierwsze, szybkość przetwarzania
w tym podejściu równa jest najwolniejszemu zadaniu realizowanemu w potoku.
Dlatego szybkość przetwarzania wszystkich etapów w potoku powinna być
zbliżona. Druga wada to fakt, że stopień zrównoleglenia jest zależny od liczby
etapów w potoku, których nie jest wystarczająco wiele (wyróżnia się tylko kilka
do kilkunastu etapów przetwarzania potokowego).
Rozproszenie danych
Celem tego podejścia jest rozproszenie danych i przetwarzania ich
równolegle. Obliczenia wykonywane są przez więcej, niż jedną jednostkę
renderującą. W porównaniu z metodą zrównoleglenia funkcjonalności
rozproszenie danych nie jest ograniczone liczbą etapów. Ograniczenie stanowi
połączenie i komunikacja między jednostkami renderującymi. Wiąże się to z
dodatkowym narzutem obliczeniowym na zarządzanie procesem renderowania,
tak by przebiegał poprawnie. Obraz wynikowy musi być identyczny jak w
przypadku sekwencyjnego przetwarzania tych samych danych. Metodę
rozproszenia danych implementować można programowo oraz sprzętowo. Na
rynku oprogramowania można znaleźć wiele bibliotek udostępniających
algorytmy renderingu wykorzystujące metodę rozproszenia danych.
Rozproszenie danych między jednostki liczące może odbywać się w
dowolnej fazie przetwarzania potokowego. W zależności od miejsca podziału,
wyróżnia się dwa sposoby rozproszenia: rozproszenie obiektu i rozproszenie
obrazu. W pierwszej metodzie rozproszenie danych odbywa się w pierwszej
fazie potoku graficznego, transformacji geometrii. Podejście polega na
rozesłaniu do jednostek obliczeniowych danych w postaci prymitywów.
Prymityw w grafice komputerowej to pojęcie określające proste figury
geometryczne: odcinki, trójkąty, wielokąty. Rozproszenie obrazu odbywa się
drugiej fazie przetwarzania potokowego (w fazie rasteryzacji) i polega na
podziale między jednostki obliczeniowe pikseli obrazu wynikowego.
W praktyce stosuje się równocześnie oba podejścia. Brak zrównoleglenia
we wszystkich etapach potoku graficznego jest bardzo nieefektywne
(spowolnienie proces renderingu).
Zrównoleglenie w czasie
W aplikacjach graficznych, których wynikiem jest obraz ruchomy nie jest
ważny czas renederowania pojedynczej klatki tylko całej sekwencji
kolejnych klatek animacji. W zrównolegleniu w czasie klatki rozdziela się
między jednostki renderujące. Każda jednostka otrzymuje do
wyrenderowania określoną liczbę klatek, które są następnie w odpowiedniej
kolejności prezentowane.
Metody hybrydowe
Metody hybrydowe zrównoleglenia procesu renderingu polegają na
łączeniu metod opisanych powyżej. Przykładem podejścia hybrydowego jest
współczesna karta graficzna, która łączy dwie metody: zrównoleglenie
funkcjonalności oraz rozproszenie danych, przetwarzając dane w kilku potokach
naraz. Inne rozwiązania to różnego rodzaju zrównoleglenia realizowane
programowo lub programowo-sprzętowo.
Download