Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Wprowadzenie do programowalnego potoku renderowania

No description
by

Ekzuzy Milsfar

on 8 January 2015

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Wprowadzenie do programowalnego potoku renderowania

WPROWADZENIE
DO
PROGRAMOWALNEGO
POTOKU RENDEROWANIA

Paweł Łapiński
SPIS TREŚCI
Grafika 3D
Historia w obrazkach
Potok
renderowania

Języki
cieniowania

Programowalny potok gaficzny
Popularne standardy
Podstawowe informacje i założenia
Stały potok graficzny
Podstawowe informacje i założenia
Historia
Popularne języki cieniowania
PRZYKŁADY
Shade -
aplikacja prezentująca przykłady zastosowań języków cieniowania
GRAFIKA 3D
Historia
Informacje
Standardy
Grafika nieinteraktywna
1980
1990
2000
The Adventures of Andre and Wally B.
'84
Luxo Jr.
'86
'87
Red's Dream
'88
Tin Toy
'89
Knick Knack
'95
Toy Story
'97
Geri's Game
'98
A Bug's Life
'00
For the Birds
'02
Mike's New Car
'05
Jack-Jack Attack
Grafika interaktywna
1980
1990
2000
Battlezone
'80
3D Monster Maze
'81
'84
Elite
'88
Star Glider
'90
Stunts
'91
'92
4D Sports Boxing
Doom
'93
Wolfenstein 3D
'95
Star Wars: Dark Forces
'96
Duke Nukem 3D
'97
Tekken 3
Tomb Rider
Quake
'98
Unreal
'99
Quake III Arena
Riva 128
Pentium II (350 nm)
Geforce 256
Pentium III (250 nm)
'00
NFS: Porshe
'01
GTA 3
Dead or Alive 3
'02
The Legend of Zelda: Wind Waker
'03
Splinter Cell
'04
Half-Life 2
Doom 3
Far Cry
Geforce 3
Pentium III (130 nm)
Czas rzeczywisty
Trójwymiar
Budowa sceny
Algebra
Przekształcenia
Rendering
Przetwarzanie danych z prędkością większą lub równą prędkości ich dostarczania.
Tworzenie i nadążanie z tworzeniem obrazu w odpowiedzi na dostarczane dane.
Prezentowane obiekty posiadają szerokość, wysokość oraz głębokość.
Co z płaskim ekranem komputera?
A stereoskopia?!
Symulowanie sposobu obserwowania czy postrzegania rzeczywistości przez ludzi.
Skrót perspektywiczny - obiekty bliżej są pozornie większe niż obiekty dalej)
Kwestia programów typu CAD
Przesłanianie - obiekty znajdujące się za innymi obiektami są niewidoczne
Cienie - blokowanie promieni światła
Kwestia popularnych bibliotek graficznych
Mgła - obiekty w oddali pozornie tracą kolor
Źródła światła:
Obiekty:
Kamery:
reprezentacja brzegowa (tylko zewnętrzna powierzchnia)
siatka wielokątów wypukłych (zazwyczaj trójkątów)
wpływają na wygląd obiektów pozostając niewidoczne w wynikowym obrazie
zwiększają realizm sceny
typowe rodzaje: punktowe, stożkowe, kierunkowe
definiują punkt obserwacji sceny
definiują parametry rzutowania trówymiarowej sceny na płaski ekran
Obiekty reprezentowane za pomocą siatki wielokątów wypukłych (zawyczaj trójkątów).
Kształt siatki zdefiniowany przez zbiór wierzchołków.
Wierzchołek:
pozycja - 3 współrzędne (x, y, z) -
wektor
atrybuty - np. kolor, wektor normalny, koordynaty tekstur -
wektory
interpolacja atrybutów pomiędzy wierzchołkami (wewnątrz wielokąta)
Ponadto:
ekran - płaszczyzna
2D
wierzchołek - obiekt
3D
przekształcenie 2D -> 3D -
rzutowanie
sposób rzutowania definiuje kamera
Macierz 4x4
Współrzędne niejednorodne:
<x/w, y/w, z/w, 1>
Translacja:
Obrót:
Skala:
V' = V + T
V' = V * R
V' = V * S
Współrzędne jednorodne:
<x, y, z, w>
Translacja / Obrót / Skala / Rzutowanie:
V' = M4x4 * V
Proces wizualizacji trójwymiarowych danych (obiektów) w dwuwymiarowym oknie aplikacji.

Wykonywany etapami, w sekwencji kroków tworzących potok graficzny.
OpenGL
Direct 3D
Opracowany i rozwijany przez Microsoft
Wysokopoziomowy
Małoplatformowy
Windows, Windows Phone, Xboxy
Grafika (Direct 3D) + biblioteki do obsługi m.in dźwięku, sieci, urządzeń wejściowych itp.
POTOK
RENDEROWANIA

Stały potok graficzny
JĘZYKI
CIENIOWANIA

Wierzchołki i ich atrybuty
Fragmenty i ich dane
Rasteryzacja
Przycinanie
Obliczanie współrzędnych tekstur
Oświetlanie
Przekształcenia
Operacje na fragmentach
Wygładzanie
(antialiasing)
Mgła
Suma kolorów
Teksturowanie
Zapis do bufora ramki
Cechy
Realizowany sprzętowo na znaczącej większości kart graficznych (do niedawna - obecnie symulowany potokiem programowalnym)
Możliwy do wykonania na CPU z sensowną wydajnością
Wysoce wyspecjalizowany - każdy etap wykonuje konkretne zadanie i przekazuje kolejnym etapom konkretne dane
Pozwala na równoległe realizowanie wielu zadań (ze względu na specyfikę danych)
Konfigurowalny - nie programowalny
Podobny wygląd gier (np. z powodu oświetlenia, mgły)
Statyczny
Programowalny potok graficzny
Wierzchołki i ich atrybuty
Fragmenty i ich dane
Rasteryzacja
Przycinanie
Przetwarzanie geometrii
Teselacja
Przetwarzanie wierzchołków
Operacje na fragmentach
Wygładzanie
(antialiasing)
Przetwarzanie fragmentów
Zapis do bufora ramki
Cechy
Realizowany sprzętowo na kartach graficznych od 2001 roku
Raczej niemożliwy do wykonania na (samym) CPU z sensowną wydajnością
Wysoce wyspecjalizowany - każdy etap wykonuje konkretne zadanie i przekazuje kolejnym etapom konkretne dane
Pozwala na jeszcze większe zrównoleglenie realizowanych zadań
GPU vs CPU - 2000 : 8
W pełni programowalny (ograniczenie to właściwie tylko FPS)
Pozwala na pisanie dowolnych programów (w ramach specyfiki języków cieniowania)
Dynamiczny
Obliczanie współrzędnych tekstur
Oświetlanie
Przekształcenia
Mgła
Suma kolorów
Teksturowanie
Historia
Przegląd
Informacje
RenderMan Shading Language
Używany przy tworzeniu efektów w filmach i reklamach
Prosty w użyciu
Generuje obraz o fotorealistycznej jakości
Brak czasu rzeczywistego
Oparty na drzewach cieniowania ("shade trees")
Opracowany przez ... ?
Pixar
PixelFlow Shading Language
Powstał jako część projektu PixelFlow na Uniwersytecie Północnej Karoliny
Dostosowany do architektury opartej na wierzchołkach i fragmentach
Wydajniejszy
Projekt (jako całość) okazał się za drogi
Pixar
Opracowany na Stanford University
Dostosowany do kart graficznych korzystających z biblioteki OpenGL
Shadery (efekty) kompilowane do wielu przebiegów renderowania z wykorzystaniem stałego potoku
GeForce 3
Real-Time Shading Language
C for Graphics (Cg)
Opracowany przez firmy Nvidia i Microsoft
Język cieniowania wysokiego poziomu (nie ASM)
Niezależny od platformy
Podobny do "C"
Dostosowany do "matematycznej" strony przetwarzania grafiki (wbudowane typy zmiennych, funkcje itp.)
Pierwsza popularna karta graficzna wprowadzająca sprzętowe wsparcie dla programowalnych shaderów
Programy cieniujące pisane w ASM (czyli zależne od platformy)
1988
1998
2001
2002
Opracowany przez SGI
Rozwijany wpierw przez ARB, następnie przez Khronos
Wysokopoziomowy
Multiplatformowy
Windows, Linux/Unix, Mac, iOS, Android
Tylko grafika (2D i 3D) - brak obsługi wejścia, wyjścia, dźwięku, okien itp.
Metal
Mantle
Opracowany przez Apple
Dostępny tylko dla systemu iOS
Tylko grafika (2D i 3D)
Niskopoziomowy - większa kontrola nad organizacją, przetwarzaniem i wyświetlaniem grafiki
Używa języka cieniowania opartego na C++11
Opracowany przez AMD
Tylko dla kart graficznych AMD i tylko dla Windows (Linux w planach)
Niskopoziomowy
obniżenie narzutu na CPU wywołanego obsługą poleceń graficznych
większa kontrola nad organizacją, przetwarzaniem i wyświetlaniem grafiki
Wykorzystuje HLSL
PRZYKŁADY
Shade
Lektura
Program prezentujący przykłady wykorzystania programów cieniujących
developer.nvidia.com, developer.ati.com
Cg
HLSL
GLSL
Opracowany przez firmy Nvidia i Microsoft
Rozwijany przez Nvidię
Uniwersalny
OpenGL, Direct3D
Playstation 3
Unity
Rozwijany przez konsorcjum Khronos
Opracowywany jednocześnie z biblioteką OpenGL
Tylko dla biblioteki OpenGL
Multiplatformowy
Odłączony z Cg
Opracowywany przez Microsoft
Tylko dla systemu Windows i biblioteki Direct3D (w tym dla konsol z serii Xbox)
Rodzaje
Charakterystyka
Uwagi
Przykład
Vertex:
operuje na wierzchołkach rysowanej geometrii
musi wyliczyć wpółrzędne wierzchołka w tzw. przestrzeni przycięcia

Geometry:
operuja na całych prymitywach (najczęściej trójkątach)
może dodawać nową lub usuwać istniejącą geometrię (dowolne prymitywy przekazane do narysowania)

Fragment:
operuje na fragmentach ekranowych (pixelach)
musi określić finałowy kolor przetwarzanego fragmentu
może odrzucać (usuwać) fragmenty (ale nie może tworzyć nowych)

Compute:
nie jest częścią typowego potoku renderowania
wykorzystywany w celu wykonywania dowolnych obliczeń matematycznych
umożliwia wykorzystanie możliwości kart graficznych w rówoległym przetwarzaniu danych do znacznego przyspieszenia obliczeń o charakterze wektorowym

Tesselation:
operuje na tzw. łatach/płatach (ang.
patches
)
umożliwia uszczegółowienie geometrii przekazanej do rysowania
dwa rodzaje shaderów wchodzących w skład bloku teselacji
Wbudowane specjalne typy danych:
skalary, wektory, macierze, samplery (tekstury)
np. int, float3 / vec3, float4x4 / mat4, sampler2D

Obsługa operacji na nowych typach danych:
wektor * wektor, wektor * macierz
odwołanie się do dowolnego elementu wektora/macierzy
pobranie koloru z tekstury
np. color.ba, color.rbg, position.xyzw, zmienna.xxyw

Biblioteka specjalnych (bardzo szybkich) funkcji:
pow, sin, cos, min, max, lerp / mix, smoothstep
Wszytkie shadery (instancje dane typu) wykonywane są
niezależnie
Instancja shadera operuje na
pojedynczym
elemencie danych
np. vertex shader wykonywany jest dla wszystkich rysowanych wierzchołków, ale pojedyncza instancja przetwarza tylko
pojedynczy
wierzchołek
Program cieniujący
nie posiada
informacji o pozostałych, przetwarzanych w danym momencie elementach
Tego typu dane należy dostarczyć we własnym zakresie
Program cieniujący
nie posiada
także informacji o kolejnych etapach, którym poddany zostanie przetwarzany przez niego element (np. jakie fragmenty wygeneruje dany trójkąt)
Nie
jest znana
kolejność
wykonywania (przetwarzania) danych
Istnieją metody wymuszające kolejność (polegające na oczekiwaniu, aż inne obliczenia zostaną zakończone - kosztem wydajności/czekania)
SIMD - Single Instruction Multiple Data
jeden program cieniujący wykonywany na wielu elementach danego typu
np. pełnoekranowy obiekt przy rozdzielczości 1280 x 720 wygeneruje
921 600
fragmentów (wykonywanych praktycznie równocześnie)
Shadery przypominają rój, stado
niezależne jednostki tworzące jedną, spójną całość
Vertex Shader
Fragment Shader
Intel Corporation
#version 140
precision highp
float
;

in
vec4
inPosition;
in
vec3
inNormal;

uniform
mat4
uMVPMatrix;
uniform
mat4
uMVMatrix;

out
float
light;

void
main() {
gl_Position = uMVPMatrix * inPosition;
vec3
normal = (uMVMatrix *
vec4
( inNormal,
0.0
)).xyz;
light = clamp( dot( normal, normalize(
vec3
(
0.1
,
0.1
,
0.9
) ) ),
0.0
,
1.0
);
}
#version 140
precision highp
float
;

in
float
light;
out
vec4
oColor;

void main() {
oColor = light *
vec4
(
1.0
,
1.0
,
0.0
,
0.0
)
+
vec4
(
0.2
,
0.2
,
0.2
,
0.2
);
}

Introduction to 3D Game Programming with DirectX 11,
Frank D. Luna
OpenGL Księga Eksperta (6. edycja),
Richard S. Wright ...
Świetna pozycja, niby do Direct3D, ale bardzo dobrze opisuje także zagadnienia ogólnie z zakresu grafiki 3D
Księga obowiązkowa w przypadku biblioteki OpenGL, ale niestety zawierająca błędy
Real-Time Rendering (3. edycja), Eric Haines ...
Bardzo ciekawa pozycja przedstawiająca szczegółowo teorię i przykłady różnych zagadnień z grafiki 3D
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html
Online'owa wersja książki o języku Cg. Bardzo dobre wprowadzenie w zagadnienia pisania shaderów
Trochę przestarzała, bo dotyczy tylko stałego potoku renderowania, aczkolwiek tutoriale przygotowane są bardzo dobrze
nehe.gamedev.net
www.arcsynthesis.org/gltut
Polecona przez kolegę z pracy strona dotycząca OpenGLa
Full transcript