3d akcelerátory – historie a - univerzita karlovapepca/lectures/pdf/hwintro.pdf · alfa-test,...
Post on 19-May-2020
5 Views
Preview:
TRANSCRIPT
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 1
3D akcelerátory – historie a architektura
© 2003-2010 Josef Pelikán, MFF UK Praha
http://cgg.mff.cuni.cz/~pepca/
pepca@cgg.mff.cuni.cz
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 2
Pokroky v hardware
3D akcelerace běžná i v konzumním sektoru
zaměření na hry, multimedia
vzhled – kvalita prezentacevelmi důmyslné techniky texturování
kombinace mnoha textur, modularita zpracování
vysoký výkonnejmodernější čipové technologie pro výrobu GPU (65 nm), masivní paralelismus
velmi rychlé paměti (dvoucestný přístup, GDDR3, ..)
výjimečné sběrnice mezi GPU a CPU – AGP, PCI-E
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 3
Pokroky v software
dvě hlavní knihovny pro 3D grafikuOpenGL (SGI, open standard) a Direct3D (Microsoft)přístup je podobný, API je velmi ovlivněno hardwarem
nastavení parametrů a úsporný přenos dat do GPUmaximální sdílení společných datových polí
programování grafického řetězce !revoluce v programování 3D grafiky„vertex-shader”: zpracování vrcholů sítě„geometry shader“: generování elementů..„fragment-shader” („pixel-shader”): zpracování jednotlivých pixelů před vykreslením
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 4
Vývojové nástroje
příjemné pro programátory i umělce
vyšší jazyky pro programování GPUCg (NVIDIA), HLSL (DirectX), GLSL (OpenGL)
Cg a HLSL jsou téměř shodné
kompozice grafických efektůkompaktní popis celého efektu (GPU programy, odkazy na data) v jednom souboru
DirectX .FX formát, NVIDIA CgFX formát
nástroje: Effect Browser (Microsoft), FX Composer (NVIDIA), RenderMonkey (ATI)
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 5
Historie I: Silicon Graphics
první masově rozšířené grafické pracovní stanicehardwarově akcelerovaný grafický subsystém
SW nástroje a aplikační programy, “grafika = SGI”
vybrané stanice (http://sgistuff.g-lenerz.de/machines/)
1983: Iris 1000 – grafický terminál k VAXu (Motorola 68k @ 8MHz, Geometry Engine, ..)
1984: Iris 2000 (grafická stanice, Clark GE), Iris 3000
1986: Professional Iris 4D (první s MIPS procesory)
1988: Power series, GTX, Personal Iris 4D
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 6
Historie II: Silicon Graphics, SGIdalší stanice a grafické systémy:
1991: Iris Indigo (asi nejpopulárnější stanice SGI)
1992: Iris Crimson
1992: Indigo R4000 (64bit), RealityEngine
1993: Iris Indy (levná stanice, i bez HW grafiky)
1993: Onyx (server s RE2)
1993: Iris Indigo2 (Extreme graphics)
1996: O2 (levná stanice), InfiniteReality engine
1997: Octane (2 procesory)
2000: Octane2 (Vpro gr.)
2002: Fuel, 2003: Ezro
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 7
Historie III: Komoditní produkty
první grafický akcelerátor do domácího počítače1996: 3Dfx Voodoo 1doplňuje klasickou grafickou kartu („pass-through”)API Glide
první karty od NVIDIA1997: NVIDIA Riva 1281998: NVIDIA Riva TNT („TwiNTexel”)
první HW T&L („transform & lighting”)1999: NVIDIA GeForce 256
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 8
Historie IV: Komoditní produkty
rok 2000NVIDIA GeForce2ATI Radeon
rok 2001: programování GPUDirectX 8.0 (vertex shaders, fragment shaders, 1.0, 1.1)NVIDIA GeForce3, GeForce3 TitaniumDirectX 8.1 (PS 1.2, 1.3, 1.4)ATI Radeon 8500
rok 2002: rozšířené programováníDirectX 9.0 – VS, PS 2.0NVIDIA GeForce4 TitaniumATI Radeon 9000, 9700 [Pro]
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 9
Historie V: Komoditní produkty
rok 2003DirectX 9.0 kompatibilní karty jsou už levné (VS, PS 2.0)NVIDIA GeForce FX 5200-5800ATI Radeon 9800
rok 2004: rozšířené programováníDirectX 9.0c (VS, PS 3.0)NVIDIA GeForce 6800, 6200, 6600ATI Radeon X800
Rok 2005:PCI-Express sběrnicespřažení dvou GPU – NVIDIA: SLI, ATI: CrossFireNVIDIA GeForce 7800ATI Radeon X550, X850
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 10
Historie VI: Komoditní produkty
Rok 2006:OpenGL 2.0DirectX 10 (Windows Vista) .. geometry shadersNVIDIA GeForce 7600, 7900ATI Radeon X1800, X1900
Rok 2007:CUDA (NVIDIA) – programování GPU v CNVIDIA GeForce 8600, 8800ATI Radeon R600 (HD 2400, 3850)
další výrobciMatrox, Intel, 3DLabs, S3, PowerVR (Kyro), SiS
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 11
Řetězec zpracování 3D grafiky I
Aplikace Geometrie Rasterizace
Aplikacereprezentace 3D dat (virtuální uložení na disku i v paměti), parametrizace, šablony, ..
chování objektů: fyzikální simulace, umělá inteligence
interakce mezi objekty: kolize, deformace, ..
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 12
Řetězec zpracování 3D grafiky II
Geometrie („HW T&L”)
modelové transformace (pomáhají aplikační vrstvě)
projekční transformace (perspektiva), ořezávání
výpočet osvětlení (příp. jen příprava jistých vektorů..)
dlouhý řetězec (pipeline), řetězců může být více
Aplikace Geometrie Rasterizace
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 13
Řetězec zpracování 3D grafiky III
Rasterizace (vykreslení)převod objektů scény do fragmentů a jejich zpracování do jednotlivých pixelůvýpočet viditelnosti („depth-buffer”), mapování textur a jejich kombinace, interpolace barev, průhlednost, mlhavysoký paralelismus (nezávislé zpracování)
Aplikace Geometrie Rasterizace
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 14
Programovatelný grafický řetězecData vrcholu Topologie sítě
Pevný řetězecT & L
Vertex-shader
Ořezání a okénková transformace
Pixel-shaderKombinace textur
Alfa-test, stencil-test, Z-test
Mlha
Geometrie
Rasterizace
HW T&L („Hardware Transform & Lighting”)
IrisGL: dříve, display listod NVIDIA GeForce 256 (1999)
Rasterizace se na čipu dělá již dlouho
stanice Silicon GraphicsAPI: IrisGL apod.multi-texturování: až druhá polovina 90. let
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 15
Schéma OpenGL (FFP)
OpenGL Fixed Functionality Pipeline:
PrimitiveAssembly
ClipProject
ViewportCull
FragmentProcessing
Per-FragmentOperations
FrameBuffer
Operations
PixelTransfer
PixelUnpack
PixelPack
ReadControl
Pixel Groups
Textures
FragmentsVertices
Geom.
AppMemory
Pixels
TextureMemory
FrameBuffer
Per-VertexOperations Geom.
Rasterize
Pixels
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 16
OpenGL: geometrická primitiva
typy geometrických primitiv:bod, úsečka, lomená čára, smyčka
polygon, trojúhelník, proužek trojúhelníků, vějíř troj-úhelníků, čtyřúhelník, proužek čtyřúhelníků
zpracování jednotlivých vrcholůglVertex, glColor, glNormal, glTexCoord, ...
neefektivní (mnoho volání gl* funkcí)
pole vrcholůglDrawArrays, glMultiDrawArrays, glDrawElements, ...
glColorPointer, glVertexPointer, ... nebo prokládání
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 17
Geometrická primitiva I
GL_POINTS
V0V1
V2
V3
V4
V5
GL_LINES
V0V1
V2
V3
V4
V5
GL_LINE_STRIP
V0V1
V2
V3
V4
V5
GL_LINE_LOOP
V0V1
V2
V3
V4
V5
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 18
Geometrická primitiva II
GL_TRIANGLES
V0V1
V2
V3
V4
V5
GL_TRIANGLE_STRIP
V0V1
V2
V3
V5
V4
GL_TRIANGLE_FAN
V6
V0
V5
V4
V3
V2
V1
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 19
Geometrická primitiva III
GL_QUADS
V0V3
V1V2
V6
V5
GL_QUAD_STRIP GL_POLYGON
V6
V0
V5
V4
V3
V2
V1
V4 V7
V1V0
V3V2
V6
V7
V5 V4
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 20
OpenGL „makra“ (Display Lists)
DISPLAY_LIST_MODE místo IMMEDIATE_MODE
uložení posloupnosti GL příkazů do paměti:glNewList, glEndList
seznam („list”) může být uložen na serveru (graf. HW)
idea: „seznam = makro”
přehrávání seznamuglCallList, glCallLists
může být mnohem efektivnější (optimalizace posloupnosti příkazů na straně grafického serveru)
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 21
Geometrická data na serveru
až od OpenGL 1.5
buffer na straně grafického serveru obsahující geo-metrická data
založení bufferu: glBindBuffer
zadání dat z pole: glBufferData, glBufferSubData
mapování do paměti aplikace: glMapBuffer, glUnmap..
práce s klientskou pamětí nebo s bufferemglColorPointer, glNormalPointer, glVertexPointer, ...
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 22
Zpracování vrcholu
transformace vrcholů modelovacími a projekčními maticemi
glMatrixMode
glLoadIdentity, glLoadMatrix, glMultMatrix
glRotate, glScale, glTranslate, ...
osvětlovací atributyglLight, glLightModel, glMaterial
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 23
Sestavení a zpracování primitiv
sestavení (Assembly)určení, kolik vrcholů primitivum potřebuje
shromáždění balíčku dat a odeslání dál
zpracování primitivořezávání („clipping”)
projekce do zorného objemu („frustum”) – dělení „w“
projekce a ořezání do 2D okénka („viewport”)
odstranění odvrácených stěn („culling”)− jednostranná vs. oboustranná primitiva
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 24
Rasterizace, fragmenty
rasterizace = vykreslení vektorových primitivrozklad geometrických objektů na fragmentygeometrické objekty: body, úsečky, trojúhelníky, bitmapy
fragmentrastrový element, který potenciálně přispívá k barvě nějakého pixeluvelikost: stejná nebo menší než u pixelu (anti-aliasing)“balíček dat” procházející rasterizační jednotkou GPU:
− vstup/výstup: x, y, z (pouze hloubku lze měnit!)− texturovací souřadnice t0 až tn
− lesklá a difusní barva, koeficient mlhy, uživatelská data, ...− výstupní barva RGB a neprůhlednost α (frame-buffer op.)
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 25
Interpolace ve fragmentech
atributy fragmentů se automaticky interpolují z hodnot ve vrcholech:
hloubka (z nebo w)
texturové souřadnice
barvy (lesklá a difusní složka)
uživatelské atributy, ...
rychlé HW interpolátory
perspektivně korektní interpolacejen [ x, y ] se mění lineárně
ostatní veličiny vyžadují jedno dělení na každý fragment
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 26
Zpracování fragmentů
texturovací operacemaximálně optimalizované operace
výběr barvy z texturovací paměti
interpolace texelů:− mip-mapping, anisotropic filtering, ...
kombinace několika textur (výběr z mnoha operací)
zvláštní efekty (bump-mapping, environment mapping)
výpočet mlhypodle hloubky z
kombinace primární a sekundární barvy (diff., spec.)
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 27
Upotřebení fragmentů („per-fragm. op.“)
lokalizace fragmentudo kterého pixelu patří?
test uživatelského ořezání (glScissor)
test odmítnutí podle průhlednosti (glAlphaFunc)
test šablony („stencil test”, glStencilOp) * write
test hloubky („depth test”, glDepthFunc) *
kompozice barvy (podle případné průhlednosti) *
„dithering” (příp. konverze barvy pro frame-buffer)
logická operace (glLogicOp) *
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 28
Globální operace s frame-bufferem
frame-buffer se skládá z několika bufferůfront, back, left, right, ... (double-buffering, stereo)
nastavení aktuálního kreslicího bufferu (glDrawBuffer)
inicializace bufferů (glClear)glClearColor, glClearDepth, glClearStencil, glClearAccum
řízení přenosu dat do grafického serveruglFlush: vyprázdní buffery
glFinish: dokončí celou kresbu v daném kontextu
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 29
Rastrové obrázky v OpenGL
Per-VertexOperations
PrimitiveAssembly
ClipProject
ViewportCull
FragmentProcessing
Per-FragmentOperations
FrameBuffer
Operations
PixelTransfer
PixelUnpack
PixelPack
ReadControlPixel Groups
Textures
FragmentsVertices
Geom.
AppMemory
Pixels
TextureMemory
FrameBuffer
Geom.
Rasterize
Pixels
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 30
Přenos rastrových obrázků
aplikační paměť → frame-bufferpřes fázi rasterizace (převod na fragmenty)glDrawPixels, glBitmap
aplikační paměť → texturová paměťjen přes „unpacking” a „pixel transfer”glTexImage, glTexSubImage
přenos uvnitř OpenGLglCopyPixels: uvnitř frame-bufferuglCopyTexImage, glCopyTexSubImage: cílem je textura
frame-buffer → aplikační paměťglReadPixels: bývala to velmi pomalá operace (≤AGP)
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 31
Konverze a rastrové operace
„pixel unpacking”převod z formátu aplikace do OpenGL („coherent stream of pixels”, „group of pixels”){ RGB[α] | depth | stencil } [][]zdrojový formát, délka rozkladové řádky, offsety, ...nastavení: glPixelStore
„pixel packing”opačný převod
„pixel transfer”změna měřítka, jasu, tabulkové operace (LuT)nastavení: glPixelTransfer, glPixelMapmožnosti rozšíření: konvoluce, jiné filtry, histogramy, ...
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 32
Schéma OpenGL (Programmable Pip.)
PrimitiveAssembly
ClipProject
ViewportCull
Per-FragmentOperations
FrameBuffer
Operations
PixelUnpack
PixelPack
Pixel Groups
Textures
Fragments
Vertices
FragmentProcessor
VertexProcessorGeom.
AppMemory
Pixels
TextureMemory
FrameBuffer
PixelTransfer
Geom.
Rasterize
Pixels
ReadControl
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 33
Vrcholový procesor
nahrazuje modul zpracování vrcholů:transformace vrcholů
transformace a normalizace normálových vektorů
výpočet/transformace texturovacích souřadnic
výpočet osvětlovacích vektorů
nastavení materiálových konstant do vrcholů
nemůže ovlivnit:počet vrcholů! (nelze přidat ani ubrat vrchol*)
typ / topologii geometrických primitiv− částečné řešení: degenerace primitivu
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 34
Fragmentový procesor
nahrazuje modul zpracování fragmentů:aritmetické operace s interpolovanými hodnotami
čtení dat z textur
aplikace textur
výpočet mlhy
závěrečná syntéza barvy fragmentu
možnost modifikace hloubky fragmentu
nemůže ovlivnit:počet fragmentů! (nelze přidat ani ubrat fragment*)
polohu fragmentu na obrazovce [x,y]
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 35
Programování procesorů v GPU
„Vertex shader”kód zavedený ve vektorovém procesoru
„Fragment shader”kód zavedený ve fragmentovém procesoru
aplikační programátor může tyto kódy měnit !HW nezávislé* programovací jazyky
mikrokód pro GPU se kompiluje až v době běhu aplikace (omezení – různé profily/verze)
low-level instrukce (jazyk se podobá assembleru)
nebo vyšší jazyky Cg, HLSL, GLSL (podobné, „UCA”)
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 36
Schéma Direct3D verze 10
InputAssembler
Rast
eriz
erIn
terp
olat
or
Primitives FragmentsVertices
VertexShader
Virtualized memory (GPU/system memory)
Sten
cil
Dept
h
Rend
erTa
rget
Inputcommands
GeometryShader
PixelShader
Text
ure
OutputMerger
Text
ure
Inde
xBu
ffer
Vert
exBu
ffer
Text
ure
Stre
amou
tput
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 37
Direct3D 10 – základ
grafický systém integrovaný do Windows VistaGPU je potřeba pro zobrazování Windows grafiky (Aero)
GPU je sdíleným prostředkem v OS
snadnější restart grafiky (výpadek HW/driveru)
sdílená grafická paměť transparentně mezi GPU a CPU memory (v režii OS)
GPU – jen programovatelný řetězec !tři programovatelné bloky (shaders: VS, GS, PS)
tři bloky zůstávají pevné (Input assembler, Rasterizer, Output merger)
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 38
Direct3D 10 – nové koncepty
„Geometry shader“ (GS)pracuje s celými grafickými primitivy (trojúhelníky, ..)
může rušit („cut“) a přidávat („emit“) celá primitiva
data se mohou posílat zpátky do IA (přes SO)
„Stream output“ (SO)posílání dat zpátky do IA
duplikace dat (do IA a současně do dalšího zpracování)
„Input assembler“ (IA)umí „instancing“ i zpracování dat ze SO
každý primitiv obdrží své ID, vrchol má „VertexID“
NPGR019, hwintro.pdf 2010 © Josef Pelikán, http://cgg.mff.cuni.cz/~pepca 39
Literatura
Tomas Akenine-Möller, Eric Haines: Real-time rendering, 2nd edition, A K Peters, 2002, ISBN: 1568811829
OpenGL ARB: OpenGL Programming Guide, 4th edition, Addison-Wesley, 2004, ISBN: 0321173481
Randima Fernando, Mark J. Kilgard: The Cg Tutorial, Addison-Wesley, 2003, ISBN: 0321194969
Jack Hoxley: An Overview of Microsoft's Direct3D 10 API, 13.12.2005, www.gamedev.net
top related