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

Podobné dokumenty
3D akcelerátory historie a architektura

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

Hardware pro počítačovou grafiku NPGR019

Hardware pro počítačovou grafiku NPGR019

Co je grafický akcelerátor

Matematika pro real-time grafiku

Reprezentace 3D scény

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

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

Matematika pro real-time grafiku

Reprezentace 3D modelu

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

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

Základy programování shaderů v OpenGL Část 2 - přenos dat

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

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

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

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

Metamorfóza obrázků Josef Pelikán CGG MFF UK Praha

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

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

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

Základy programování shaderů v OpenGL Část 2 - přenos dat

Programování shaderů GLSL

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

Programovatelné shadery a jazyk Cg. Petr Kmoch

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

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

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

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.

Programování GPU ( shaders )

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

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

Transformace (v OpenGL)

Rekurzivní sledování paprsku

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

Připravil: David Procházka. Shadery

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

Surfels: Surface Elements as Rendering Primitives

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

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

Úvod Typy promítání Matematický popis promítání Implementace promítání Literatura. Promítání. Pavel Strachota. FJFI ČVUT v Praze

Pokročilé programování v jazyce C pro chemiky (C3220) 3D grafika v knihovně Qt

Android OpenGL. Pokročilé shadery

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

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

Souřadnicové prostory

PŘEDSTAVENÍ GRAFICKÉHO PROCESORU NVIDIA G200

Architektura grafických ip pro Xbox 360 a PS3

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

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

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

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

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

Osvětlování a stínování

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

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

HDR obraz (High Dynamic Range)

Nvidia CUDA Paralelní programování na GPU

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

Deformace rastrových obrázků

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

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

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

Vektorové grafické formáty

Téma: Vektorová grafika. Určete pravdivost následujícího tvrzení: "Grafická data jsou u 2D vektorové grafiky uložena ve voxelech."

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

Geometrické transformace pomocí matic

Android OpenGL. Práce s texturami

Lineární transformace

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

SOFTWARE NA ZPRACOVÁNÍ MRAČEN BODŮ Z LASEROVÉHO SKENOVÁNÍ. Martin Štroner, Bronislav Koska 1

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

Watkinsův algoritmus řádkového rozkladu

Modely prostorových těles

11 Zobrazování objektů 3D grafiky

Textura a mapovací funkce Způsoby aplikace textury Použití textury pro prostorovou modifikaci povrchu Mipmapping Literatura.

Geoinformační technologie

Vývoj počítačové grafiky

7 Transformace 2D. 7.1 Transformace objektů obecně. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

9 Prostorová grafika a modelování těles

Simulátor jízdy městem

Univerzita Pardubice Fakulta ekonomicko-správní. Počítačová grafika a geometrické transformace v rovině a prostoru. Eva Hladíková

PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY DIPLOMOVÁ PRÁCE. Grafický model zahrady ve 3D Petr Šebesta

Distribuované sledování paprsku

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

Programování grafiky ÚVOD

Kde se používá počítačová grafika

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Geoinformační technologie

České vysoké učení technické v Praze Fakulta elektrotechnická. Autorský nástroj pro projektivní zobrazování na fasády budov

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

Stru ný obsah. Úvod do Microsoft.NET Kapitola 1: Vývoj her a ízený kód...15

Rastrová reprezentace

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

MATURITNÍ TÉMATA Z MATEMATIKY

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

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

GIS Geografické informační systémy

Jana Dannhoferová Ústav informatiky, PEF MZLU

Transkript:

Základy OpenGL 2003-2016 Josef Pelikán CGG MFF UK Praha pepca@cgg.mff.cuni.cz http://cgg.mff.cuni.cz/~pepca/ 1 / 34

Pokroky v hardware 3D akcelerace běžná i v konzumním sektoru hry, multimedia, i mobilní app. (OpenGL ES) vzhled kvalita prezentace velmi důmyslné techniky texturování kombinace mnoha textur, modularita zpracování vysoký výkon nejmodernější čipové technologie pro výrobu GPU (NVIDIA Pascal: 16 nm), masivní paralelismus velmi rychlé paměti (vícecestný přístup, GDDR5, HBM) výjimečné sběrnice mezi GPU a CPU (dnes PCI-E) 2 / 34

Pokroky v software dvě hlavní knihovny pro 3D grafiku OpenGL (SGI, open standard) a Direct3D (Microsoft) přístup je podobný, API je velmi ovlivněno hardwarem nastavení parametrů a úsporný přenos dat do GPU maximá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/tesselation-sh. : generování elementů.. fragment-shader ( pixel-shader ): zpracování jednotlivých pixelů před vykreslením 3 / 34

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

Schéma OpenGL (FFP) OpenGL Fixed Functionality Pipeline: Geom. Per-Vertex Operations Vertices Primitive Assembly Clip Project Viewport Cull Geom. Rasterize Fragment Processing Fragments Per-Fragment Operations App Memory Pixel Unpack Pixel Transfer Pixels Textures Texture Memory Frame Buffer Operations Pixels Pixel Pack Pixel Groups Read Control Frame Buffer 5 / 34

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í 6 / 34

Geometrická primitiva I GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP V 0 V 1 V 0 V 1 V 0 V 1 V 0 V 1 V 2 V 2 V 2 V 2 V 3 V 3 V 3 V 3 V 4 V 4 V 4 V 4 V 5 V 5 V 5 V 5 7 / 34

Geometrická primitiva II GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN V 0 V 1 V 0 V 1 V 6 V 5 V 4 V 2 V3 V 2 V3 V 0 V3 V 4 V 5 V 2 V 5 V 4 V 1 8 / 34

Geometrická primitiva III GL_QUADS V 0 V 3 GL_QUAD_STRIP V 1 V 0 GL_POLYGON V 6 V 5 V 4 V 1 V 2 V 3 V 2 V 3 V 4 V 7 V 5 V 4 V 0 V 2 V 6 V 6 V 1 V 5 V 7 9 / 34

Souřadné soustavy Souřadnice modelu (Object space) Modelovací transformace (Modeling transform) Světové souřadnice (World space) [x,y,z,w] -z Pohledová transformace (View transform) Souřadnice kamery (Eye space) xy -z Projekční transformace (Projection transform) Ořezávací souřadnice (Clip space) xy n f [x,y,z,w] -z xy -z xy 10 / 34

Souřadné soustavy II Ořezávací souřadnice (Clip space) [x,y,z,w] Perspektivní dělení (Perspective divide) Okénková transformace (Viewport transform) Normalizovaný prostor (Normalized device space) [x,y,z] -z Souřadnice v okně (Window space) [x,y,z] xy OpenGL: [-1,-1,-1] až [1,1,1] DirectX: [-1,-1, 0] až [1,1,1] [x,y] z skutečná velikost v pixelech na obrazovce (fragmenty) hloubka kompatibilní s z-bufferem 11 / 34

Souřadné soustavy III souřadnice modelu databáze objektů, ze kterých se skládá scéna 3D modelovací programy (3DS, Maya,..) světové souřadnice absolutní souřadnice virtuálního 3D světa vzájemná poloha jednotlivých instancí objektů souřadnice kamery 3D svět se transformuje do relativních souřadnic kamery střed projekce: počátek, směr pohledu: -z (nebo z) 12 / 34

Souřadné soustavy a transformace transformace model kamera společná transformační matice modelview světové souřadnice nejsou moc důležité projekční transformace definuje zorný objem = frustum [ l, r, b, t, n, f ] přední a zadní ořezávací vzdálenost: n, f výsledkem je homogenní souřadnice (před ořezáním) ořezávací souřadnice ( clip space ) výstupní souřadnice vertex shaderu! 13 / 34

Projekční transformace vzdálený bod f lze posunout do nekonečna [ ] 2n 2n 0 0 0 r l r l 2n 0 0 0 2n t b 0 r l t b t b f n 1 r l t b f n r l t b 0 0 2fn r l t b 0 f n xy [ n ] 0 0 0 0 0 1 1 0 0 2n 0 f -z 14 / 34

Souřadné soustavy a transformace perspektivní dělení pouze převádí homogenní souřadnice do kartézských normalizované souřadnice zařízení ( NDC ) kvádr standardní velikosti OpenGL: [-1,-1,-1] až [1,1,1] DirectX: [-1,-1,0] až [1,1,1] souřadnice v okně ( window space ) výsledkem okénkové transf. a transformace hloubky používají se při rasterizaci a práci s fragmenty 15 / 34

Transformace tuhého tělesa zachovává tvar těles, mění pouze jejich orientaci skládá se jenom z posunutí a otáčení často se používá k převodu mezi souřadnicovými systémy (např. mezi světovými souřadnicemi a systémem spojeným s pozorovatelem) z u (up) r (right) v (view) y (levoruký = pravotočivý systém) x 16 / 34

Převod mezi dvěma orientacemi z u O s x y t [1, 0, 0 ] M stu xyz = s [0, 1, 0 ] M stu xyz = t [0, 0, 1 ] M stu xyz = u Souřadný systém má počátek v O a je zadán trojicí jednotkových vektorů [ s, t, u ] [ M stu xyz = M xyz stu s x s y s z t x t y t z u x u y u z] T = M stu xyz 17 / 34

Geometrická data na serveru VBO, VAO, počátky od OpenGL 1.5 pro.net skoro podmínkou (klientská paměť není fixována) buffer na straně grafického serveru obsahující geometrická 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 bufferem glcolorpointer, glnormalpointer, glvertexpointer,... 18 / 34

Vertex Buffer Objects glbindbuffer( GL_ARRAY_BUFFER, 0 ); glvertexpointer( ); glnormalpointer( ); 0 1 [x,y,z,w] [N x,n y,n z ] [s,t] Vertex buffer [0,1,2] [1,2,3] [3,0,12] id=0 [x,y,z,w] [N x,n y,n z ] [s,t] VBO buffer objects Index buffer id=1 GPU memory glbindbuffer( GL_ELEMENT_ARRAY_BUFFER, 1 ); gldrawelements( GL_TRIANGLES, ); 19 / 34

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

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í 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 21 / 34

Rasterizace, fragmenty rasterizace = vykreslení vektorových primitiv rozklad geometrických objektů na fragmenty geometrické objekty: body, úsečky, trojúhelníky, bitmapy fragment rastrový element, který potenciálně přispívá k barvě nějakého pixelu velikost: 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 t 0 až t n - lesklá a difusní barva, koeficient mlhy, uživatelská data,... - výstupní barva RGB a neprůhlednost α (frame-buffer op.) 22 / 34

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 23 / 34

Zpracování fragmentů texturovací operace maximá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 mlhy podle hloubky z kombinace primární a sekundární barvy (diff., spec.) 24 / 34

Rastrové obrázky v OpenGL Geom. Per-Vertex Operations Vertices Primitive Assembly Clip Project Viewport Cull Geom. Rasterize Fragment Processing Fragments Per-Fragment Operations App Memory Pixel Unpack Pixel Transfer Pixels Textures Texture Memory Frame Buffer Operations Pixels Pixel Pack Pixel Groups Read Control Frame Buffer 25 / 34

Schéma OpenGL (Programmable Pip.) Texture Memory Geom. App Memory Vertex Processor Vertices Pixel Unpack Primitive Assembly Pixel Transfer Clip Project Viewport Cull Geom. Rasterize Pixels Textures Fragment Processor Fragments Per-Fragment Operations Frame Buffer Operations Pixels Pixel Pack Pixel Groups Read Control Frame Buffer 26 / 34

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 27 / 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] 28 / 34

Novinky v OpenGL (2009-2010) dva další kroky zpracování geometrie na GPU geometry shader (OpenGL 3.2) tesselation shaders (OpenGL 4.0) 29 / 34

Geometrická primitiva IV GL_LINES_ADJACENCY GL_LINE_STRIP_ADJACENCY V 0 V 3 V 7 V 6 V 5 V 1 V 2 V 4 V 4 V 0 V 6 V 3 V5 V 1 V 2 V 7 30 / 34

Geometrická primitiva V GL_TRIANGLES_ADJACENCY GL_TRIANGLE_STRIP_ADJACENCY V 1 V 1 V 0 V 0 V 2 V 3 V 2 V 5 V 6 V 3 V 7 V 4 V 9 V 4 V 5 V 8 V 10 V 11 31 / 34

Geometrické procesory Tesselation shaders nově v OpenGL 4.0 HW podporované dělení ploch, subdivision (spline pláty,...) dva shadery: tesselation control a tesselation evaluation první definuje topologii, druhý počítá geometrii (koeficienty) Geometry shader od OpenGL 3.2 těsně před rasterizační jednotkou možnost generovat/odstraňovat vrcholy i primitiva obecnější než TS, avšak pomalejší (na jednoduchá schémata dělení se nehodí) 32 / 34

Programování procesorů v GPU Vertex shader, Fragment shader, kód zavedený ve vrcholovém, 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 (RT optimalizace, různé profily/verze) low-level instrukce (jazyk se podobá assembleru) nebo vyšší jazyky Cg, HLSL, GLSL (podobné) NVIDIA Microsoft OpenGL 33 / 34

Literatura Tomas Akenine-Möller, Eric Haines: Real-time rendering, 2 nd edition, A K Peters, 2002, ISBN: 1568811829 OpenGL ARB: OpenGL Programming Guide, 4 th edition, Addison-Wesley, 2004, ISBN: 0321173481 Randima Fernando, Mark J. Kilgard: The Cg Tutorial, Addison-Wesley, 2003, ISBN: 0321194969 34 / 34