Hardware pro počítačovou grafiku NPGR019

Podobné dokumenty
3D akcelerátory historie a architektura

Základy OpenGL Josef Pelikán CGG MFF UK Praha. OpenGL / 34

Co je grafický akcelerátor

Geekovo Minimum. Počítačové Grafiky. Nadpis 1 Nadpis 2 Nadpis 3. Božetěchova 2, Brno

Fakulta informačních technologíı. IZG cvičení 6. - Zobrazování 3D scény a základy OpenGL 1 / 38

3D počítačová grafika na PC Josef Pelikán, MFF UK Praha

NPGR019. Geometry & tessellation shaders. MFF UK Praha. Vykreslování v OpenGL Tessellation shaders Geometry shaders Literatura

Hierarchický model Josef Pelikán CGG MFF UK Praha. 1 / 16

Grafické karty. Autor: Kulhánek Zdeněk

Připravil: David Procházka. Základy OpenGL

Nvidia CUDA Paralelní programování na GPU

Textury v real-time grafice Josef Pelikán, MFF UK Praha Josef.Pelikan@mff.cuni.cz

Základní techniky zobrazování Josef Pelikán, MFF UK Praha

GRAFICKÉ ADAPTÉRY. Pracovní režimy grafické karty

Masivně paralelní zpracování obrazu v prostředí systému VisionLab Liberec Roman Cagaš, rc@mii.cz

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Pokročilé osvětlovací techniky Josef Pelikán, MFF UK Praha

HW počítače co se nalézá uvnitř počítačové skříně

PŘEDSTAVENÍ GRAFICKÉHO PROCESORU NVIDIA G200

Základy 3D modelování a animace v CGI systémech Cinema 4D C4D

Počítačová grafika 2 (POGR2)

Hardware pro počítačovou grafiku NPGR019

Vizualizační 3D grafický engine. Bc. Jan Štalmach

Reprezentace 3D modelu

3D ANIMACE POSTAVY V POČÍTAČOVÉ GRAFICE ANIMATION OF 3D CHARACTER IN COMPUTER GRAPHICS

Připravil: David Procházka. Vykreslování grafických primitiv

Karel Johanovský Michal Bílek SPŠ-JIA GRAFICKÉ KARTY

Programování grafiky ÚVOD

Připravil: David Procházka. Vertex Buffer Objects

ak. rok 2013/2014 Michal Španěl,

Počítače a grafika. Ing. Radek Poliščuk, Ph.D. Přednáška 3. z předmětu

Rád bych poděkoval Ing. Davidu Ambrožovi za jeho cenné rady a připomínky a za ochotu po celou dobu vedení mé diplomové práce.

Úvod do GPGPU J. Sloup, I. Šimeček

B4B35OSY: Operační systémy

Architektura grafických ip pro Xbox 360 a PS3

PB001: Úvod do informačních technologíı

Počítačová grafika 1 (POGR 1)

Programování grafiky ÚVOD

Pokročilé architektury počítačů

Vytváříme dobré aplikace vykreslovače grafiky v programovém prostředí Control Web

Grafické karty s podporou DirectX 11 Quynh Trang Dao Dao007

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

SEZNAM A VYSVĚTLENÍ VYBRANÝCH POJMŮ TÝKAJÍCÍCH SE PARAMETRŮ ZOBRAZOVACÍCH JEDNOTEK ELEKTRONICKÝCH SYSTÉMŮ

Surfels: Surface Elements as Rendering Primitives

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Geneze grafických karet jako základní součásti PC Drahoslav Stejskal

Nvidia CUDA Paralelní programování na GPU

Pokročilá architektura počítačů

Zobrazování terénu. Abstrakt. 1. Úvod. 2. Vykreslování terénu

Univerzita Karlova v Praze Matematicko-fyzikální fakulta DIPLOMOVÁ PRÁCE. Daniel Fromek. Výpočet geometrie na GPU

Fakulta informačních technologíı. Rendering Seminář 1. 1 / 28

GPGPU Aplikace GPGPU. Obecné výpočty na grafických procesorech. Jan Vacata

Obsah. 1 Úvod Moderní grafické adaptéry Grafická rozhraní Návrh grafické knihovny MGL... 32

Profilová část maturitní zkoušky 2017/2018

GPU A CUDA HISTORIE GPU CO JE GPGPU? NVIDIA CUDA

Programování shaderů GLSL

Hardware. Z čeho se skládá počítač

Bakalářská práce Editor vizuálních vlastností objektů pro real-time grafiku

Programování GPU ( shaders ) Josef Pelikán, MFF UK Praha

G R A F I C K É K A R T Y

GRAFICKÉ KARTY. Pracovní režimy grafické karty. Základní blokové schéma grafické karty

3D počítačová grafika na PC

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Soukromá vyšší odborná škola a Obchodní akademie s.r.o. Absolventská práce Jiří VAŠEK

Vývoj a technologie grafických karet

Bakalářská práce. Téma: Rešerše moderních grafických karet Literature retrieval of modern graphic cards. Zadání

OBRAZU FAKULTA INFORMAČNÍCH TECHNOLOGIÍ BRNO UNIVERSITY OF TECHNOLOGY FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA

Programovatelné shadery a jazyk Cg. Petr Kmoch

Ing. Jan Buriánek. Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Jan Buriánek, 2010

Paralelní výpočty ve finančnictví

Transformace (v OpenGL) příklady a knihovna GLM

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

Úvod do problematiky. Význam počítačové grafiky. Trochu z historie. Využití počítačové grafiky

Úvod do problematiky. Význam počítačové grafiky. Trochu z historie. Využití počítačové grafiky

ARCHITEKTURA AMD PUMA

Vývoj grafických karet

Návrhy elektromagnetických zení

Profilová část maturitní zkoušky 2013/2014

Pokročilé techniky Josef Pelikán, MFF UK Praha

Pokročilé architektury počítačů

Počítačová grafika letem světem

Výpočet vržených stínů

Reprezentace 3D scény

DATOVÉ FORMÁTY GRAFIKY, JEJICH SPECIFIKA A MOŽNOSTI VYUŽITÍ

Architektura počítače

DUM č. 14 v sadě. 31. Inf-7 Technické vybavení počítačů

Tutoriál programování grafických procesorů

Návod k použití softwaru Solar Viewer 3D

Představení a srovnání grafických procesorů ATI RV770 a NVIDIA G(T)200

monitor a grafická karta

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010

27. listopadu 2013, Brno Připravil: David Procházka

Grafická karta SVGA (2) Grafická karta SVGA (1) Grafická karta SVGA (4) Grafický akcelerátor: Grafická karta SVGA (3) Grafická karta SVGA (5)

Zobrazovací a zvuková soustava počítače

Základní deska (1) Označována také jako mainboard, motherboard. Deska plošného spoje tvořící základ celého počítače Zpravidla obsahuje:

GPGPU- provádění vědeckých výpočtů prostřednictvím grafických karet osobních počítačů

Zobrazovací jednotky a monitory

Simulátor jízdy městem

Informatika Počítačová grafika Mgr. Jan Jílek (v.11/12) Počítačová grafika

Programování GPU ( shaders )

Pokročilé architektury počítačů

Transkript:

Hardware pro počítačovou grafiku NPGR019 3D akcelerátory - historie a architektura Josef Pelikán Jan Horáček http://cgg.mff.cuni.cz/ MFF UK Praha 2012

Pokroky v hardware 3D akcelerace běžná i v konzumním sektoru zaměření na hry, multimédia vzhled - kvalita prezentace velmi důmyslné techniky texturování a stínování kombinace mnoha textur, modularita zpracování vysoký výkon nejmodernější čipové technologie pro výrobu GPU,masivní paralelismus velmi rychlé paměti (GDDR5) výjimečné sběrnice mezi GPU a CPU - AGP, PCI-E

Pokroky v software dvě hlavní knihovny pro 3D grafiku OpenGL (SGI, open standard, nyní Khronos) a Direct3D (Microsoft) přístup je podobný, API velmi ovlivněno hardwarem nastavení parametrů a úsporný přenos dat do GPU maximální sdílení společných datových poĺı programování grafického řetězce revoluce v programování 3D grafiky vertex-shader: zpracování vrcholů sítě tesselation: rozdělování plátů na menší trojůhelníky, deformace podle textury, atp. geometry-shader: generování elementů fragment-shader (pixel-shader): zpracování jednotlivých pixelů před vykreslením

Vývojové nástroje příjemné pro programátory i umělce vyšší jazyky pro programování GPU Cg (nvidia), HLSL (DirectX), GLSL (OpenGL) velmi podobné 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)

Historie I: Silicon Graphics první masově rozšířené grafické pracovní stanice hardwarově akcelerovaný grafický subsystém SW nástroje a aplikační programy, grafika == SGI vybrané stanice (http://www.g-lenerz.de/) 1983: Iris 1000 - grafický terminál k VAXu (Motorola 68000 @ 8 MHz, Geometry Engine,... ) 1984: Iris 2000 (grafická stanice, Clark GE), Iris 3000 1986: Profesional Iris 4D (první s MIPS procesory) 1988: Power series, GTX, Personal Iris 4D 1991: Iris Indigo (asi nejpopulárnější stanice SGI) 1992: Iris Crimson

Historie II: Silicon Graphics, SGI další stanice a grafické systémy: 1992: Indigo R4000 (64bit), Reality Engine 1993: Onyx (server s RE2) 1993: Iris Indigo 2 (Extreme graphics) 1996: O2 (levná stanice), InfiniteReality engine 1997: Octane (2 procesory) 2000: Octane2 (Vpro gr.) 2002: Fuel 2003: Tezro (poslední MIPS, SGI podporuje IRIX do 2013) 2008: Virtu (x86-based, nvidia)

Historie III: Komoditní produkty první grafický akcelerátor do domácího počítače 1996: 3Dfx Voodoo doplňuje grafickou kartu ( pass-through ) bilineární filtrování texelů API Glide první karta se SLI 1998: 3Dfx Voodoo 2 Scan Line Interleave - dvě karty spolupracují na vykreslení obrazovky jedna kresĺı sudé řádky, druhá liché nutnost aby obě karty měly stejnou informaci o scéně (tzn. velikost scény limitovaná velikostí paměti jedné karty) později celou firmu koupila nvidia včetně této technologie

Historie IV: Komoditní produkty první karty od nvidia 1997: nvidia Riva 128 1998: nvidia Riva TNT ( TwiNTexel ) první HW T&L ( Transform and Lighting ) 1999: nvidia GeForce 256 rok 2000: nvidia GeForce 2 ATI Radeon rok 2001: programování GPU DirectX 8.0 (vertex shaders, fragment shaders, 1.0, 1.1) nvidia GeForce 3 Titanium DirectX 8.1 (PS 1.2, 1.3, 1.4) ATI Radeon 8500 (TruForm)

Historie V: Komoditní produkty rok 2002: rozšířené programování GPU DirectX 9.0 (VS, PS 2.0) nvidia GeForce 4 Titanium (DX 8) ATI Radeon 9700 [Pro] rok 2003 DirectX 9.0 kompatibilní karty jsou již levné (VS, PS 2.0) nvidia GeForce FX ATI Radeon 9800 rok 2004: rozšířené programování GPU DirectX 9.0c (VS, PS 3.0) OpenGL 2.0 nvidia GeForce 6800 ATI Radeon X800

Historie VI: Komoditní produkty rok 2005: PCI-Express sběrnice nvidia uvádí obnovenou SLI, ATI podobné CrossFire nvidia GeForce 7800 ATI Radeon X550, X850 rok 2006: OpenGL 2.1 DirectX 10 (Widows Vista) - geometry shaders nvidia GeForce 7600, 7900 ATI Radeon X1800, X1900 rok 2007 CUDA - nvidia zpřístupňuje GPU pro obecné úlohy nvidia GeForce 8800 ATI Radeon HD 2400, 3850

Historie VII: Komoditní produkty rok 2009: OpenGL 3.2 DirectX 11 GPU tesselation architektura nvidia Fermi rok 2010 OpenGL 4 OpenCL - multiplatformní programování GPU pro obecné úlohy další výrobci: Matrox, 3DLabs, S3, PowerVR (Kyro), SiS Intel - největší výrobce grafických čipů

Řetězec zpracování 3D grafiky I Aplikace Geometrie Rasterizace Aplikace: reprezentace 3D dat (virtuální uložení na disku i v paměti), parametrizace, šablony,... chování objektů: fyzikální simulace, umělá inteligence interakce uživatele, mezi objekty (kolize, deformace),...

Řetězec zpracování 3D grafiky II Aplikace Geometrie Rasterizace Geometrie: 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

Řetězec zpracování 3D grafiky III Aplikace Geometrie Rasterizace 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, mlha vysoký Josef paralelismus Pelikán, Jan Horáček (nezávislé Hardware zpracování) pro počítačovou grafiku NPGR019

Schéma OpenGL (Fixed Function ) HW T&L (Hardware Transform and Lighting) IrisGL: dříve, display list od nvidia GeForce 256 (1999) Rasterizace se na čipu dělá již dlouho stanice Silicon Graphics API: IrisGL apod. multitexturování: až druhá polovina 90.let Vertex data Vertex Transform and Lighting Pixel Data Texture Store Primitive Setup and Rasterization Fragment Coloring and Texturing Blending OpenGL Fixed Functionality

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ů pozor: v nových verzích přibylo několik dalších (např. patch, bude v přednášce o OpenGL 4), ovšem některá primitiva byla odstraněna např. čtyřůhelník zpracování jednotlivých vrcholů glvertex, glcolor, glnormal, gltexcoord,... neefektivní (mnoho volání funkcí) a dnes už není v core profile pole vrcholů gldrawarrays, glmultidrawarrays, gldrawelements,... glcolorpointer, glvertexpointer, nebo prokládání

I v 0 v 0 v 0 v 0 v 1 v 1 v 1 v 1 v 2 v 3 v 2 v 3 v 2 v 3 v 2 v 3 v 4 v 5 v 4 v 5 v 4 v 5 v 5 v 4 GL POINTS GL LINES GL LINE STRIP GL LINE LOOP

II v 0 v 0 v 1 v 1 v 1 v 2 v 2 v 3 v 2 v 3 v 0 v 3 v 4 v 5 GL TRIANGLES v 4 v 5 GL TRIANGLE STRIP v 5 v 4 GL TRIANGLE FAN

III v nových verzích OpenGL již nejsou existují ještě nová primitiva, budou v přednášce o OpenGL 4 v 0 v 0 v 0 v 1 v 1 v 1 v 3 v2 v 2 v3 v 7 v v 4 v 5 v 4 v 5 v 6 v v 7 v 6 GL QUADS v 6 v 7 GL QUAD STRIP v 5 v 4 GL POLYGON

Geometrická data na serveru až od OpenGL 1.5 dnes ovšem velmi důležité v OpenGL buffer na straně grafického serveru obsahující geometrická data založení bufferu: glgenbuffers, glbindbuffer zadání dat z pole: glbufferdata, glbuffersubdata mapování do paměti aplikace: glmapbuffer, glunmap... práce s klientskou pamětí nebo bufferem: glcolorpointer, glnormalpointer, glvertexpointer,... dnes se uz nepoužívá, skoro vše musí být na straně serveru (zůstalo pouze glvertexattribpointer)

Zpracování vrcholů transformace vrcholů modelovacími a projekčními maticemi glmatrixmode glloadidentity, glloadmatrix, glmultmatrix glrotate, glscale, gltranslate,... osvětlovací atributy gllight, gllightmodel, glmaterial

Sestavení a zpracování primitiv sestavení (Assembly) určení, kolik vrcholů primitivum potřebuje shromáždění baĺıčku dat a odeslání dál zpracování primitiv oř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

Rasterizace, fragmenty rasterizace = vykreslení vektorových primitiv rozklad geometrických objektů na fragmenty geometrické objekty: body, úsečky, trojůhelníky fragment rastrový element, který potenciálně přispívá k barvě nějakého pixelu velikost: stejná nebo menší než u pixelu (anti-aliasing) baĺıček dat procházející rasterizační jednotkou GPU: vstup/výstup: x,y,z (pouze hloubku lze měnit!) texturovací souřadnice t 0 až t n lesklá a difusní barva, textury, koeficient mlhy, uživatelská data,... výstupní barva RGB a neprůhlednost α (frame-buffer op.)

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í interpolace jen [x,y] se mění lineárně ostatní veličiny vyžadují jedno dělení na každý fragment

texturovací operace maximálně optimalizované operace výběr barvy z texturovací paměti interpolace texelů: lineární, mip-mapping, anisotropic filtering,... speciální HW pro načítání a interpolaci texelů kombinace několika textur (výběr z mnoha operací) zvláštní efekty (bump-mapping, environment mapping) výpočet mlhy podle hloubky z kombinace primární a sekundární barvy (diff., spec.)

Upotřebení fragmentů (per-fragment op.) lokalizace fragmentu do kterého pixelu patří? test uživatelského ořezání (glscissor) test odmítnutí podle průhlednosti (glalphafunc) test šablony (stencil test, glstencilop) test hloubky (depth test, gldepthfunc) kompozice barvy (podle případné průhlednosti) dithering (příp. konverze barvy pro frame-buffer) logická operace (gllogicop)

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 kresĺıcího bufferu (gldrawbuffer) inicializace bufferů (glclear) glclearcolor, glcleardepth, glclearstencil, glclearaccum řízení přenosu dat do grafického serveru glflush: neblokující volání, všechny dosavadní příkazy se ukončí co nejdříve (příkazy mohou být bufferované, např. pro lepší výkon) glfinish: blokující, dokončí celou kresbu v daném kontextu, čeká dokud vše na serveru není hotovo

Přenos rastrových obrázků aplikační pamět frame-buffer dříve se přímo dalo použít vykreslování: gldrawpixels, glbitmap efektivnější uložit do textury a vykreslit pomocí texturovaného polygonu aplikační pamět texturová pamět jen přes unpacking a pixel transfer glteximage, gltexsubimage přenos uvnitř OpenGL glblitframebuffer (dříve glcopypixels) glcopyteximage, glcopytexsubimage: cílem je textura frame-buffer aplikační pamět glreadpixels: pomalá operace i na rychlých sběrnicích, je třeba vyprázdnit pipeline

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

Schéma OpenGL (Programmable ) přidáno oficiálně v OpenGL 2.0 (pomocí rozšíření i dříve) zůstal i fixní řetězec stejné až do roku 2009 - OpenGL 3.1 vertex shading vylepšil fixní T&L fragment shading vylepšil zpracování fragmentů Vertex data Pixel Data Vertex Processor Texture Store Primitive Setup and Rasterization Fragment Processor Blending

Vertexový 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 primitiv

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 (ale vyřadí early depth test) nemůže ovlivnit počet fragmentů (nelze přidat ani ubrat fragment) polohu fragmentu na obrazovce [x,y]

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

OpenGL 3 Úvod a historie odstraněna FFP a přímý mód (glbegin/glend) nový systém kontextových profilů - způsob odstraňování staré funkcionality textury v plovoucí řádové čárce HW instancing geometry shaders možnost generovat/odstraňovat vrcholy i primitiva hned za vertex shaderem GLSL 1.3-1.5 nativní bitové operace a práce s celými čísly rozšíření mnoha dalších parametrů

OpenGL 4 Úvod a historie nová primitiva (GL PATCHES), trojúhelníky a čáry se sousedností (GL TRIANGLES ADJACENCY),... ) HW tesselation dva nové shadery: Tesselation Control Shader, Tesselation Evaluation shader přímé propojení s externími výpočetními API, např. OpenCL bez CPU možnost ukládat binární verzi shaderů GLSL 4.00 podpora pro 64-bitovou plovoucí čárku shaderové podprogramy oddělené shaderové řetězce

Literatura Úvod a historie Tomas Akenine-Möler, Eric Haines: Real-time rendering, 2 nd edition, A K Peters, 2002, ISBN:1568811829 OpenGL Architecture Review Board: OpenGL Programming Guide: The Official Guide to Learning OpenGL, Addison-Wesley, nejnovější vydání (aktuálně 8. vydání pro OpenGL 4.1) Randi J. Rost, Bill Licea-Kane: OpenGL Shading Language, 3 rd Edition, Addison-Wesley, Randima Fernando, Mark J. Kilgard: The Cg Tutorial, Addison-Wesley, 2003, ISBN: 0321173481

Literatura Úvod a historie The Khronos Group: The OpenGL Graphics System: A Specification (Core/Compatibility profile), http://www.opengl.org/registry/ Christophe Riccino: OpenGL reviews, http://www.g-truc.net/post-opengl-review.html Wikipedia: http://en.wikipedia.org/wiki/opengl OpenGL tutorials: http://nehe.gamedev.net