Potok graficzny - Graphics pipeline

W grafice komputerowej , a rurociągu grafiki komputerowej , rurociągu renderingu  lub po prostu  graficznym rurociągu , to koncepcyjny model, który opisuje, jakie kroki do potrzeb system graficzny do wykonywania do  renderowania sceny 3D na ekranie 2D. Po utworzeniu modelu 3D , na przykład w grze wideo lub jakiejkolwiek innej animacji komputerowej 3D, potok graficzny jest procesem przekształcania tego modelu 3D w to, co wyświetla komputer. Ponieważ kroki wymagane do tej operacji zależą od używanego oprogramowania i sprzętu oraz pożądanych właściwości wyświetlania, nie ma uniwersalnego potoku graficznego odpowiedniego dla wszystkich przypadków. Jednak graficzne interfejsy programowania aplikacji (API), takie jak Direct3D i OpenGL, zostały stworzone w celu ujednolicenia podobnych kroków i kontrolowania potoku graficznego danego akceleratora sprzętowego . Te interfejsy API abstrahują podstawowy sprzęt i trzymają programistę z dala od pisania kodu w celu manipulowania akceleratorami sprzętowymi grafiki ( AMD / Intel / NVIDIA itp.).

Model potoku graficznego jest zwykle używany w renderowaniu w czasie rzeczywistym. Często większość etapów potoku jest implementowana sprzętowo, co pozwala na specjalne optymalizacje . Termin „potok” jest używany w podobnym znaczeniu jak potok w procesorach: poszczególne kroki potoku działają równolegle, o ile dany krok ma to, czego potrzebuje.

Pojęcie

Potok 3D zwykle odnosi się do najpopularniejszej formy komputerowego renderowania 3D, zwanej renderowaniem wielokątów 3D , w odróżnieniu od raytracingu i raycastingu . W raycastingu promień pojawia się w miejscu, w którym znajduje się kamera, a jeśli ten promień uderza w powierzchnię, obliczany jest kolor i oświetlenie punktu na powierzchni, w który trafił promień. W renderowaniu wielokątów 3D dzieje się odwrotnie - obszar, który jest widoczny dla kamery, jest obliczany, a następnie promienie są tworzone z każdej części każdej powierzchni w polu widzenia kamery i śledzone z powrotem do kamery.

Struktura

Potok graficzny można podzielić na trzy główne części: Aplikację, Geometrię i Rasteryzację.

Potok graficzny 2 pl.svg

Podanie

Krok aplikacji jest wykonywany przez oprogramowanie na procesorze głównym ( CPU ). Podczas etapu aplikacji zmiany są wprowadzane do sceny zgodnie z wymaganiami, na przykład poprzez interakcję użytkownika za pomocą urządzeń wejściowych lub podczas animacji. Nowa scena ze wszystkimi jej prymitywami , zwykle trójkątami, liniami i punktami, jest następnie przekazywana do następnego etapu w potoku.

W nowoczesnym Game Engine, takim jak Unity , programista zajmuje się prawie wyłącznie etapem aplikacji i używa języka wysokiego poziomu, takiego jak C# , w przeciwieństwie do C lub C++ .

Przykłady czynności, które są zwykle wykonywane podczas nanoszenia jest wykrycie kolizji , animacje, Morfing i techniki z zastosowaniem przestrzennych przyspieszeń systemów podziałowe jak Quadtrees lub Octrees . Są one również używane do zmniejszenia ilości pamięci głównej wymaganej w danym momencie. „Świat” współczesnej gry komputerowej jest znacznie większy niż to, co mogłoby zmieścić się w pamięci.

Geometria

Krok geometrii (z Geometry potok ), który odpowiada za większość operacji z wielokątami i ich wierzchołkami (z Vertex potok ), można podzielić na pięć następujących zadań. Zależy to od konkretnej implementacji sposobu organizacji tych zadań jako rzeczywistych kroków potoku równoległego.

Potok geometrii en.svg

Definicje

Wierzchołek (liczba mnoga: wierzchołki) jest punktem na świecie. Do łączenia powierzchni używa się wielu punktów. W szczególnych przypadkach chmury punktów są rysowane bezpośrednio, ale nadal jest to wyjątek.

Trójkąt jest najczęściej geometryczne prymitywne grafiki komputerowej. Określają go trzy wierzchołki i wektor normalny - wektor normalny służy do wskazania przedniej powierzchni trójkąta i jest wektorem prostopadłym do powierzchni. Trójkąt może być opatrzony kolorem lub teksturą (obrazek „naklejony” na nim). Trójkąty są preferowane w stosunku do prostokątów, ponieważ trzy punkty zawsze istnieją na jednej płaszczyźnie .

Światowy układ współrzędnych

Światowy układ współrzędnych to układ współrzędnych, w którym tworzony jest świat wirtualny. Powinno to spełniać kilka warunków, aby poniższa matematyka była łatwa do zastosowania:

  • Musi to być prostokątny kartezjański układ współrzędnych, w którym wszystkie osie są jednakowo wyskalowane.

Sposób definiowania jednostki układu współrzędnych pozostawia się deweloperowi. To, czy wektor jednostkowy systemu ma w rzeczywistości odpowiadać jednemu metrowi czy angströmowi, zależy od zastosowania.

  • To, czy ma być używany prawostronny czy lewostronny układ współrzędnych, może być określone przez bibliotekę graficzną, która ma być użyta.
Przykład: Jeśli mamy opracować symulator lotu, możemy wybrać światowy układ współrzędnych tak, aby początek znajdował się w środku Ziemi i jednostka była ustawiona na jeden metr. Dodatkowo, aby ułatwić odniesienie do rzeczywistości, definiujemy, że oś X powinna przecinać równik na południku zerowym, a oś Z przechodzi przez bieguny. W systemie praworęcznym oś Y przebiega przez południk 90°-wschód (gdzieś na Oceanie Indyjskim ). Teraz mamy układ współrzędnych, który opisuje każdy punkt na Ziemi w trójwymiarowych współrzędnych kartezjańskich . W tym układzie współrzędnych modelujemy teraz zasady naszego świata, gór, dolin i oceanów.
Uwaga: Oprócz geometrii komputerowej dla Ziemi używane są współrzędne geograficzne , tj. szerokość i długość geograficzna oraz wysokości nad poziomem morza. Przybliżone przeliczenie - jeśli nie wziąć pod uwagę faktu, że Ziemia nie jest dokładną kulą - jest proste:
gdzie R=promień ziemi [6.378.137m], lat=szerokość geograficzna, długość=długość geograficzna, hasl=wysokość nad poziomem morza.
Wszystkie poniższe przykłady dotyczą systemu praworęcznego. W przypadku systemu leworęcznego znaki mogą wymagać zamiany.

Obiekty zawarte w scenie (domy, drzewa, samochody) są często projektowane we własnym układzie współrzędnych obiektu (zwanym również układem współrzędnych modelu lub lokalnym układem współrzędnych) ze względu na prostsze modelowanie. Aby przypisać te obiekty do współrzędnych w globalnym układzie współrzędnych lub globalnym układzie współrzędnych całej sceny, współrzędne obiektu są przekształcane za pomocą translacji, obrotu lub skalowania. Odbywa się to poprzez pomnożenie odpowiednich macierzy transformacji . Ponadto z jednego obiektu można utworzyć kilka różnie przekształconych kopii, na przykład las z drzewa; Ta technika nazywana jest instancją.

Aby umieścić model samolotu na świecie, najpierw wyznaczamy cztery macierze. Ponieważ pracujemy w przestrzeni trójwymiarowej, do naszych obliczeń potrzebujemy czterowymiarowych macierzy jednorodnych .

Po pierwsze, potrzebujemy trzech macierzy rotacji , czyli po jednej dla każdej z trzech osi samolotu (oś pionowa, oś poprzeczna, oś podłużna).

Wokół osi X (zwykle definiowanej jako oś podłużna w układzie współrzędnych obiektu)

Wokół osi Y (zwykle definiowanej jako oś poprzeczna w układzie współrzędnych obiektu)

Wokół osi Z (zwykle definiowanej jako oś pionowa w układzie współrzędnych obiektu)

Używamy również macierzy translacji, która przenosi samolot do pożądanego punktu w naszym świecie: .

Uwaga : Powyższe macierze są transponowane w stosunku do macierzy rotacji artykułów . Zobacz poniżej wyjaśnienie, dlaczego.

Teraz możemy obliczyć położenie wierzchołków samolotu we współrzędnych świata, mnożąc kolejno każdy punkt przez te cztery macierze. Ponieważ mnożenie macierzy wektorem jest dość kosztowne (czasochłonne), zwykle wybiera się inną ścieżkę i najpierw mnoży cztery macierze razem. Mnożenie dwóch macierzy jest jeszcze droższe, ale musi być wykonane tylko raz dla całego obiektu. Mnożenia i są równoważne. Następnie uzyskaną macierz można zastosować do wierzchołków. W praktyce jednak mnożenie przez wierzchołki nadal nie jest stosowane, ale macierze kamer – patrz niżej – są wyznaczane w pierwszej kolejności.

Jednak dla naszego przykładu z góry translacja musi być określona nieco inaczej, ponieważ powszechne znaczenie góra - poza biegunem północnym - nie pokrywa się z naszą definicją dodatniej osi Z i dlatego model musi być również obrócony wokół środka Ziemi: Pierwszy krok przesuwa początek modelu na odpowiednią wysokość nad powierzchnią Ziemi, a następnie jest obracany o szerokość i długość geograficzną.

Ważna jest kolejność, w jakiej macierze są stosowane, ponieważ mnożenie macierzy nie jest przemienne . Odnosi się to również do trzech obrotów, co można zademonstrować na przykładzie: Punkt (1, 0, 0) leży na osi X, jeśli obróci się go najpierw o 90° wokół X-, a następnie wokół osi Y , kończy się na osi Z (obrót wokół osi X nie ma wpływu na punkt znajdujący się na osi). Jeśli natomiast najpierw kręcimy się wokół osi Y, a potem wokół osi X, to wynikowy punkt znajduje się na osi Y. Sama kolejność jest dowolna, o ile zawsze jest taka sama. Sekwencja z x, potem y, potem z (przechylenie, skok, kurs) jest często najbardziej intuicyjna, ponieważ obrót powoduje, że kierunek kompasu pokrywa się z kierunkiem „nosa”.

Istnieją również dwie konwencje definiowania tych macierzy, w zależności od tego, czy chcesz pracować z wektorami kolumn czy z wektorami wierszy. Różne biblioteki graficzne mają tutaj różne preferencje. OpenGL preferuje wektory kolumnowe, wektory wierszowe DirectX . Decyzja określa, z której strony wektory punktowe mają być pomnożone przez macierze transformacji. Dla wektorów kolumnowych, mnożenie jest wykonywane z prawej strony, to znaczy , gdzie v out i V w są 4x1 wektory kolumnowe. Łączenie macierzy odbywa się również od prawej do lewej, tj. na przykład przy pierwszym obrocie, a następnie przesunięciu.

W przypadku wektorów wierszowych działa to dokładnie odwrotnie. Mnożenie odbywa się teraz od lewej, tak jak w przypadku wektorów 1x4-wierszowych, a konkatenacja następuje wtedy, gdy najpierw obracamy, a następnie przesuwamy. Przedstawione powyżej macierze obowiązują w drugim przypadku, natomiast macierze dla wektorów kolumnowych są transponowane. Obowiązuje zasada , która w przypadku mnożenia wektorami oznacza, że ​​można zmienić kolejność mnożenia poprzez transpozycję macierzy.

Interesującą rzeczą w tym łańcuchu macierzy jest to, że przez każdą taką transformację definiowany jest nowy układ współrzędnych. Można go dowolnie przedłużyć. Na przykład śmigło samolotu może być osobnym modelem, który jest następnie umieszczany przez przesunięcie do nosa samolotu. Ta translacja musi jedynie opisać przesunięcie z układu współrzędnych modelu do układu współrzędnych śmigła. W celu narysowania całego samolotu najpierw wyznacza się macierz transformacji dla samolotu, transformuje punkty, a następnie mnoży macierz modelu śmigła do macierzy samolotu, a następnie transformuje punkty śmigła.

Obliczona w ten sposób macierz nazywana jest również macierzą świata . Musi być określony dla każdego obiektu na świecie przed renderowaniem. Aplikacja może tutaj wprowadzić zmiany, na przykład zmienić pozycję samolotu zgodnie z prędkością po każdej klatce.

Transformacja kamery

Po lewej: Pozycja i kierunek wirtualnej przeglądarki (kamery) zdefiniowane przez użytkownika. Po prawej: pozycjonowanie obiektów po transformacji kamery. Jasnoszary obszar to widoczna objętość.

Oprócz obiektów scena definiuje również wirtualną kamerę lub przeglądarkę, która wskazuje pozycję i kierunek widoku, względem którego renderowana jest scena. Scena jest przekształcana w taki sposób, że kamera znajduje się w punkcie początkowym, patrząc wzdłuż osi Z. Wynikowy układ współrzędnych nazywa się układem współrzędnych kamery, a transformacja nazywa się transformacją kamery lub transformacją widoku .

Macierz widoku jest zwykle określana na podstawie pozycji kamery, punktu docelowego (w którym patrzy kamera) i „wektora w górę” („w górę” z punktu widzenia widza). Wymagane są pierwsze trzy wektory pomocnicze:
Zaxis = normal(cameraPosition - cameraTarget)
Xaxis = normal(cross(cameraUpVector, Zaxis))
Yaxis = cross(Zaxis, Xaxis )
Przy normal(v) = normalizacja wektora v;
cross(v1, v2) = iloczyn krzyżowy v1 i v2.
Wreszcie macierz:
z kropką(v1, v2) = iloczyn skalarny v1 i v2.

Występ

Projekcji 3D krok zmienia objętość widoku do sześcianu ze współrzędnymi punktów narożnych (-1, -1, 0) i (1, 1, 1); Czasami używane są również inne woluminy docelowe. Ten krok nazywa się projekcją , mimo że przekształca objętość w inną objętość, ponieważ wynikowe współrzędne Z nie są przechowywane na obrazie, ale są używane tylko w buforowaniu Z w późniejszym etapie rastrowania. Na ilustracji perspektywicznej zastosowano rzut centralny . Aby ograniczyć liczbę wyświetlanych obiektów, wykorzystywane są dwie dodatkowe płaszczyzny przycinające; Wizualna objętość jest więc ściętą piramidą ( frustum ). Rzut równoległy lub ortogonalny jest używany na przykład do przedstawień technicznych, ponieważ ma tę zaletę, że wszystkie równoległości w przestrzeni obiektu są również równoległe w przestrzeni obrazu, a powierzchnie i objętości są tej samej wielkości niezależnie od odległości od widza . Mapy używają na przykład rzutu ortogonalnego (tzw. ortofoto ), ale ukośne obrazy krajobrazu nie mogą być w ten sposób wykorzystane - choć technicznie można je renderować, wydają się tak zniekształcone, że nie możemy ich użyć. Wzór na obliczenie macierzy odwzorowania perspektywicznego to:

Z h = cot (fieldOfView / 2.0) (kąt apertury kamery); w = h /spectRatio (współczynnik proporcji obrazu docelowego); near = Najmniejsza odległość, która ma być widoczna; daleko = najdłuższa odległość, jaka ma być widoczna.

Powody, dla których należy tu podać najmniejszą i największą odległość, są z jednej strony dzielenie tej odległości przez, aby osiągnąć skalę sceny (obiekty bardziej odległe są mniejsze na obrazie perspektywicznym niż obiekty bliskie) , a z drugiej strony skalowanie wartości Z do zakresu 0..1 w celu wypełnienia bufora Z . Bufor ten często ma rozdzielczość tylko 16 bitów, dlatego wartości bliskie i dalekie należy dobierać ostrożnie. Zbyt duża różnica między wartością bliską i daleką prowadzi do tak zwanej walki Z ze względu na niską rozdzielczość bufora Z. Ze wzoru widać również, że bliska wartość nie może wynosić 0, ponieważ ten punkt jest punktem ogniskowym projekcji. W tym momencie nie ma obrazu.

Dla kompletności wzór na rzut równoległy (rzut prostopadły):

gdzie w = szerokość sześcianu docelowego (wymiar w jednostkach światowego układu współrzędnych); H = w / proporcje (współczynnik proporcji obrazu docelowego); near = Najmniejsza odległość, która ma być widoczna; daleko = najdłuższa odległość, jaka ma być widoczna.

Ze względu na wydajność, kamera i macierz projekcji są zwykle łączone w macierz transformacji, tak że układ współrzędnych kamery jest pominięty. Wynikowa macierz jest zwykle taka sama dla pojedynczego obrazu, podczas gdy macierz świata wygląda inaczej dla każdego obiektu. W praktyce więc widok i projekcja są wstępnie obliczone, tak że podczas wyświetlania trzeba dostosować tylko macierz świata. Możliwe są jednak bardziej złożone przekształcenia, takie jak mieszanie wierzchołków . Można również wykonywać swobodnie programowalne shadery geometrii, które modyfikują geometrię.

Na etapie rzeczywistego renderowania obliczana jest macierz świata * macierz kamery * macierz projekcji, a następnie jest ostatecznie stosowana do każdego pojedynczego punktu. W ten sposób punkty wszystkich obiektów są przenoszone bezpośrednio do układu współrzędnych ekranu (przynajmniej prawie, zakres wartości osi nadal wynosi -1..1 dla zakresu widzialnego, patrz rozdział "Window-Viewport-Transformation").

Oświetlenie

Scena często zawiera źródła światła umieszczone w różnych pozycjach, aby oświetlenie obiektów wyglądało bardziej realistycznie. W takim przypadku współczynnik wzmocnienia tekstury jest obliczany dla każdego wierzchołka na podstawie źródeł światła i właściwości materiału związanych z odpowiednim trójkątem. W późniejszym etapie rasteryzacji wartości wierzchołków trójkąta są interpolowane na jego powierzchni. Na wszystkich powierzchniach stosowane jest oświetlenie ogólne (światło otoczenia). Jest to rozproszona, a zatem niezależna od kierunku jasność sceny. Słońce jest ukierunkowanym źródłem światła, które można założyć, że jest nieskończenie daleko. Oświetlenie wywołane przez słońce na powierzchni jest określane przez utworzenie iloczynu skalarnego wektora kierunkowego od słońca i wektora normalnego powierzchni. Jeśli wartość jest ujemna, powierzchnia jest zwrócona w stronę słońca.

Obrzynek

Obcinanie prymitywów na sześcianie. Niebieski trójkąt jest odrzucany, a pomarańczowy trójkąt jest przycięty, tworząc dwa nowe wierzchołki
Stożek ścięty

Tylko prymitywy znajdujące się w objętości wizualnej muszą być faktycznie zrastrowane (narysowane). Ta wizualna objętość jest definiowana jako wnętrze frustum , kształtu w formie piramidy z odciętym wierzchołkiem. Prymitywy, które są całkowicie poza wizualnym obszarem, są odrzucane; Nazywa się to ubojem frustum . Dalsze metody cullingu, takie jak culling backface, które zmniejszają liczbę branych pod uwagę prymitywów, mogą teoretycznie zostać wykonane na dowolnym etapie potoku graficznego. Prymitywy, które są tylko częściowo wewnątrz sześcianu, muszą być przycięte do sześcianu. Zaletą poprzedniego etapu rzutowania jest to, że przycinanie zawsze odbywa się na tym samym sześcianie. Do ostatniego kroku przekazywane są tylko - ewentualnie przycięte - prymitywy, które znajdują się w wizualnej objętości.

Transformacja okno-rzutnia

Okno-Widok-Transformacja

Aby wyprowadzić obraz do dowolnego obszaru docelowego (rzutni) ekranu, należy zastosować inną transformację, transformację Window-Viewport . To jest przesunięcie, po którym następuje skalowanie. Wynikowe współrzędne to współrzędne urządzenia wyjściowego. Widok zawiera 6 wartości: wysokość i szerokość okna w pikselach, lewy górny róg okna we współrzędnych okna (zwykle 0, 0) oraz minimalne i maksymalne wartości dla Z (zwykle 0 i 1).

Formalnie:
Z vp=Widok; v=Punkt po projekcji

Na nowoczesnym sprzęcie większość etapów obliczeń geometrii jest wykonywana w Vertex Shader . Jest to w zasadzie swobodnie programowalne, ale generalnie wykonuje przynajmniej transformację punktów i obliczanie oświetlenia. W przypadku interfejsu programowania DirectX użycie niestandardowego modułu cieniowania wierzchołków jest konieczne od wersji 10, podczas gdy starsze wersje nadal mają standardowy moduł cieniujący.

Rasteryzacja

Krok rasteryzacji jest ostatnim krokiem przed potokiem Fragment Shader, za pomocą którego rasteryzowane są wszystkie prymitywy . Na etapie rasteryzacji z ciągłych prymitywów tworzone są dyskretne fragmenty.

Na tym etapie potoku graficznego punkty siatki są również nazywane fragmentami, aby zapewnić większą wyrazistość. Każdy fragment odpowiada jednemu pikselowi w buforze ramki, a to odpowiada jednemu pikselowi ekranu. Mogą być kolorowe (i ewentualnie podświetlane). Ponadto konieczne jest określenie widocznego, bliższego fragmentowi obserwatora, w przypadku nakładających się wielokątów. Bufor Z jest zwykle używany do tego tak zwanego określania ukrytej powierzchni . Kolor fragmentu zależy od oświetlenia, tekstury i innych właściwości materiałowych widocznego prymitywu i często jest interpolowany przy użyciu właściwości wierzchołka trójkąta. Tam, gdzie jest dostępny, Fragment Shader (nazywany również Pixel Shader ) jest uruchamiany na etapie rastrowania dla każdego fragmentu obiektu. Jeśli fragment jest widoczny, można go teraz zmieszać z już istniejącymi wartościami kolorów w obrazie, jeśli używana jest przezroczystość lub wielopróbkowanie. Na tym etapie jeden lub więcej fragmentów staje się pikselem.

Aby użytkownik nie widział stopniowej rasteryzacji prymitywów, ma miejsce podwójne buforowanie. Rasteryzacja odbywa się w specjalnym obszarze pamięci. Gdy obraz zostanie całkowicie zrasteryzowany, jest kopiowany do widocznego obszaru pamięci obrazu.

Odwrotność

Wszystkie użyte macierze są nieosobliwe, a zatem odwracalne. Ponieważ mnożenie dwóch macierzy nieosobliwych tworzy kolejną macierz nieosobliwą, cała macierz transformacji jest również odwracalna. Odwrotność jest wymagana, aby przeliczyć współrzędne świata ze współrzędnych ekranowych - na przykład, aby określić z pozycji wskaźnika myszy kliknięty obiekt. Ponieważ jednak ekran i mysz mają tylko dwa wymiary, trzeci jest nieznany. Dlatego w pozycji kursora rzutowany jest promień w świat, a następnie wyznaczane jest przecięcie tego promienia z wielokątami w świecie.

Shader

Istnieje 11 faz, z których każda została tutaj wymieniona.  Vertex Shader i kod 3D to dane wejściowe do animacji i transformacji.  Druga faza to shader kadłuba, teselacja i shader domeny.  Trzecia faza to Geometry Shader.  Czwarta faza to transformacja perspektywiczna.  Piąta faza to przycinanie i ubój tylnej powierzchni.  Szósta faza to rasteryzacja trójkątów, która generuje współrzędne tekstury.  Siódma faza, pamięć podręczna tekstur, rozpoczyna się oddzielnie i pobiera tekstury jako dane wejściowe.  Siódma faza i współrzędne tekstury przechodzą do ósmej fazy, filtrowania tekstur.  Od szóstej fazy i wyjścia z ósmej fazy, teksele przechodzą do fazy dziewiątej, wczesnego Z i cieniowania pikseli, które również pobiera pixel shader jako dane wejściowe.  Dziesiąta faza to test Z, alpha blending i antyaliasing.  Następnie jedenasta faza to przetwarzanie końcowe, które wyprowadza z powrotem do bufora wstecznego.

Klasyczne karty graficzne są nadal stosunkowo blisko potoku graficznego. Wraz ze wzrostem wymagań dotyczących GPU ograniczenia były stopniowo usuwane, aby zapewnić większą elastyczność. Nowoczesne karty graficzne wykorzystują swobodnie programowalny, kontrolowany przez shader potok, który umożliwia bezpośredni dostęp do poszczególnych etapów przetwarzania. Aby odciążyć główny procesor, dodatkowe etapy przetwarzania zostały przeniesione do potoku i GPU.

Najważniejszymi jednostkami shaderów są Vertex Shader , Geometry Shader i Pixel Shader .

Wprowadzono Unified Shader , aby w pełni wykorzystać wszystkie jednostki. Daje to jedną dużą pulę jednostek cieniujących. W razie potrzeby pula jest podzielona na różne grupy shaderów. Ścisła separacja między typami shaderów nie jest więc już przydatna.

Możliwe jest również użycie tak zwanego compute-shadera do wykonywania dowolnych obliczeń poza wyświetlaniem grafiki na GPU. Zaletą jest to, że biegną bardzo równolegle, ale istnieją ograniczenia. Te uniwersalne obliczenia są również nazywane obliczeniami ogólnego przeznaczenia na procesorach graficznych lub w skrócie GPGPU .

Zobacz też

Źródła

  • Tomas Akenine-Möller, Eric Haines: Renderowanie w czasie rzeczywistym. AK Peters, Natick, Mass. 2002, ISBN  1-56881-182-9 .
  • Michael Bender, Manfred Brill: Grafika komputerowa: ein anwendungsorientiertes Lehrbuch. Hanser, Monachium 2006, ISBN  3-446-40434-1 .
  • Fischer, Marcin (2011-07-04). Pixel-Fabrik. Wie Grafikchips Spielewelten auf den Schirm zaubern . c't Magazin für Computer Technik. Heise Zeitschriften Verlag. P. 180. ISSN  0724-8679 .

Bibliografia

  1. ^ „Graficzny potok” . Microsoft . 30 maja 2018 r . Źródło 15 czerwca 2015 .
  2. ^ „Wykład: Potok graficzny i animacja” . Zarchiwizowane z oryginału w dniu 7 grudnia 2017 r . Źródło 15 czerwca 2015 .
  3. ^ Lawrence, Jason (22 października 2012). "Potok renderowania wielokątów 3D" ( PDF ) . www.archiwum.org . Zarchiwizowane (PDF) z oryginału w dniu 29 grudnia 2016 r . Źródło 2019-09-19 .
  4. ^ Tomas Akenine-Möller, Eric Haines: Renderowanie w czasie rzeczywistym , S. 11. ( PDF )
  5. ^ K. Nipp, D. Stoffer; Algebra liniowa ; v/d/f Hochschulverlag der ETH Zürich; Zurych 1998, ISBN  3-7281-2649-7 .

Zewnętrzne linki