+ All Categories
Home > Documents > 3D akcelerátory – historie a - Univerzita Karlovapepca/lectures/pdf/hwintro.pdf · Alfa-test,...

3D akcelerátory – historie a - Univerzita Karlovapepca/lectures/pdf/hwintro.pdf · Alfa-test,...

Date post: 19-May-2020
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
39
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/ [email protected]
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/

[email protected]

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


Recommended