Programování grafiky ÚVOD

Podobné dokumenty
Programování grafiky ÚVOD

Co je grafický akcelerátor

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

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

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

Nvidia CUDA Paralelní programování na GPU

GPU A CUDA HISTORIE GPU CO JE GPGPU? NVIDIA CUDA

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

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

Zobrazovací jednotky a monitory

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

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

Matematika v programovacích

Přednáška 1. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

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

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

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

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

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Osobní počítač. Zpracoval: ict Aktualizace:

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

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

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

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

C2115 Praktický úvod do superpočítání

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

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

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

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

AGP - Accelerated Graphics Port

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

PŘEDSTAVENÍ GRAFICKÉHO PROCESORU NVIDIA G200

Nvidia CUDA Paralelní programování na GPU

Prostředí pro výuku vývoje PCI ovladačů do operačního systému GNU/Linux

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

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

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

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

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

ADT/ADS = abstraktní datové typy / struktury

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

Procesory nvidia Tegra

Opakování programování

monolitická vrstvená virtuální počítač / stroj modulární struktura Klient server struktura

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Maturitní témata pro 1.KŠPA Kladno, s.r.o. Výpočetní technika

Operační systémy. Tomáš Hudec.

Procesy a vlákna (Processes and Threads)

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

Windows a real-time. Windows Embedded

Ing. Igor Kopetschke TUL, NTI

Zobrazování a osvětlování

11. Přehled prog. jazyků

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

Pokročilé architektury počítačů

GPGPU. Jan Faigl. Gerstnerova Laboratoř pro inteligentní rozhodování a řízení České vysoké učení technické v Praze

Systémy pro sběr a přenos dat

Programování v C++ 1, 1. cvičení

Úloha 1. Text úlohy. Vyberte jednu z nabízených možností: NEPRAVDA. PRAVDA Úloha 2. Text úlohy

Pokročilé architektury počítačů

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Témata profilové maturitní zkoušky

téma: Úvod do praktika z ICT autor: Mgr. Radek Machan cíl praktika: organizace výuky, plán výuky, bezpečnost práce doba trvání: 2

Software pro grafické terminály TERM10 a TERM03

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Grafické karty s podporou DirectX 11 Quynh Trang Dao Dao007

KAPITOLA 1 - ZÁKLADNÍ POJMY INFORMAČNÍCH A KOMUNIKAČNÍCH TECHNOLOGIÍ

SYSTÉMY NAČIPU MI-SOC

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

Principy operačních systémů. Lekce 1: Úvod

SADA VY_32_INOVACE_PP1

VÝPOČETNÍ TECHNIKA OBOR: EKONOMIKA A PODNIKÁNÍ ZAMĚŘENÍ: PODNIKÁNÍ FORMA: DENNÍ STUDIUM

Jan Nekvapil ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická

umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora

Analýza a Návrh. Analýza

Zpracování obrazu v FPGA. Leoš Maršálek ATEsystem s.r.o.

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

CineStar Černý Most Praha

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

Autodesk AutoCAD 2018

NÁSTROJE PRO VIRTUALIZACI POČÍTAČE

VYUŽITÍ KNIHOVNY SWING PROGRAMOVACÍHO JAZYKU JAVA PŘI TVORBĚ UŽIVATELSKÉHO ROZHRANÍ SYSTÉMU "HOST PC - TARGET PC" PRO ŘÍZENÍ POLOVODIČOVÝCH MĚNIČŮ

Praktické využití Mathematica CalcCenter. Ing. Petr Kubín, Ph.D. Katedra elektroenergetiky, ČVUT v Praze, FEL

Základy programování Operační systémy (UNIX) doc. RNDr. Petr Šaloun, Ph.D. VŠB-TUO, FEI (přednáška připravena z podkladů Ing. Michala Radeckého)

Počítačová geometrie I

Paralelní výpočetní jádro matematického modelu elektrostatického zvlákňování

Satori. Uživatelský manuál

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

MS WINDOWS I. řada operačních systémů firmy Microsoft *1985 -? Historie. Práce ve Windows XP. Architektura. Instalace. Spouštění

architektura mostů severní / jižní most (angl. north / south bridge) 1. Čipové sady s architekturou severního / jižního mostu

OPS Paralelní systémy, seznam pojmů, klasifikace

Semestrální práce z předmětu Speciální číslicové systémy X31SCS

Procesor Intel Pentium (1) Procesor Intel Pentium (3) Procesor Intel Pentium Pro (1) Procesor Intel Pentium (2)

Autodesk AutoCAD Civil 3D

Virtuální přístroje. Matlab a Instrument Control Toolbox. J.Tomek, A.Platil

Architektura grafických ip pro Xbox 360 a PS3

udspt10r JEDNOTKA IMPLEMENTUJÍCÍ DISPLEJ VZDÁLENÉ VARIANTY TERMINÁLU TERM10 Příručka uživatele a programátora

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič

Transkript:

Programování grafiky ÚVOD Petr Felkel Katedra počítačové grafiky a interakce, ČVUT FEL místnost KN:E-413 (Karlovo náměstí, budova E) E-mail: felkel@fel.cvut.cz S použitím materiálů Bohuslava Hudce, Jaroslava Sloupa, Ondřeje Karlíka a Vlastimila Havrana Poslední změna: 3.3.2016

Cíle předmětu programování grafiky () Porozumět základům počítačové grafiky Umět naprogramovat interaktivní aplikace v OpenGL Nezávislé na platformě (PC / Mac / vestavné systémy / web, )

Organizace Přednášky Teorie počítačové grafiky základy pro grafické aplikace běžící v reálném čase (real time) Syntéza obrazu s použitím OpenGL od verze 3.1 Demonstrační příklady a kódy jednotlivých technik Cvičení Detaily o OpenGL a GLSL Jednoduché úlohy Semestrální projekt (program, web, prezentace) Podrobnosti na webu předmětu https://cent.felk.cvut.cz/courses//

Ukázky semestrálních prací

Dělení počítačové grafiky dle účelu [Karlík] 2D grafika DTP noviny, časopisy Grafická uživatelská rozhraní- GUI Výkresová dokumentace 3D grafika [Karlík] Vizualizace Filmová grafika Realtime grafika - hry http://www.cs.utah.edu/npr/

Vizualizace Reklama, vizualizace produktů, architektury jediný obrázek Fotorealismus x photoshop Dlouhý čas na obrázek (dny až týdny) [Karlík]

Filmová grafika Obrovský rozsah dat (modely, textury, ) 24 obrázků / s, dlouhý výpočetní čas na obrázek (hodiny až dny) Umělecká kontrola nad výsledkem (ne vždy fotorealismus) RenderMan + studia vyvíjejí vlastní SW [Karlík]

Realtime grafika Malý počet polygonů (hrubá dutá slupka tělesa) Rasterizace, 30+ FPS, ~20ms na obrázek GPU Fake [Karlík]

Obrázek, pixely a antialiasing Obrázek Omezené rozlišení (Daný počet pixelů) Zubaté okraje, artefakty Nutno vyhlazovat bez vyhlazování s vyhlazováním

Geometrické modelování x zobrazování Modelování často komplexní plochy Zobrazování trojúhelníky ve 3D (teselace)

Textury

Základ syntézy obrazu

Problém viditelnosti

Negeometrické vlastnosti objektů

Různá kvalita syntetizovaného obrazu (obrázky fy PIXAR) Polygonální model drátové zobrazení Polygonální model drátové zobrazení s viditelností

Různá kvalita syntetizovaného obrazu (obrázky fy PIXAR) II Polygonální model konstantní stínování Polygonální model interpolované stínování Mapování textur Stíny

Vztah počítačové grafiky a vidění Vymezení pojmu počítačová grafika počítačová geometrie objektový prostor počítačové vidění obrazový prostor zpracování obrazu Počítačová grafika transformace dat z objektového (3D) do obrazového prostoru (2D) Počítačová geometrie zpracování geometrických a topologických dat v objektovém prostoru Zpracování obrazu Zpracování nestrukturovaných rastrových obrázků (zlepšování kvality obrazu, vyhledávání obrysů,..) Počítačové vidění Na základě analýzy obrazu se hledají objekty a vztahy mezi objekty v objektovém prostoru.

Velmi hrubý pohled na grafický HW HOST Grafika Monitor CPU MEM GPU VIDEOMEM CPU dodá data Grafika je zpracuje a uloží do paměti obrazu Z paměti obrazu se posílají do monitoru

Host HOST CPU MEM Připraví data balíky vrcholů + konektivita textury Připraví programy pro GPU - shadery Pošle vše na grafickou kartu Nastaví stav OpenGL Posílá příkazy kresli C/C++ OpenGL Obsluhuje interakci s uživatelem (klávesnice, myš) Řídí animace,

Grafika Grafika GPU VIDEOMEM GLSL Přijímá data a nastavení od hosta Ukládá je do své grafické paměti Je to hierarchie pamětí Videopaměť cache L1, L2 registry 60x za sekundu Smaže obrazovou paměť vykreslí obraz Pracuje paralelně Po vrcholech, primitivech, fragmentech Spouští na ně shadery

Obrazová paměť Grafika GPU VIDEOMEM Obrazová paměť = framebuffer Ukládá vykreslený obraz Má více vrstev: Barvu, hloubku, Čte se z ní obraz do monitoru - 60x za sekundu Problémy propustnosti (bandwidth), současného čtení, latence paměti (=>cache),

Problém propustnosti sběrnice HOST Grafika Monitor CPU MEM GPU VIDEOMEM Omezený datový tok ~8 GB/s (PCI Express v 2.0, 16 linek) Video ~0,3 GB/s (1920x1080, 60FPS) Dat ke generování obrazu je mnohem více: Geometrie (300 mil. tr., 50FPS => 10.2 GB/s, Textury, => Maximum dat předem na grafickou kartu a na ní grafické výpočty

Typické zřetězení grafických operací graphics pipeline [http://open.gl/drawing]

Typické zřetězení grafických operací graphics pipeline Vertex Data Pixel Data Vertex processing Texture Store Primitive Assembly and Rasterization Fragment Processing Fragment operations

Architektura grafického systému Grafický HW se vyvíjel od konce ~1991 První byl HW rasterizátor (pixelů je nejvíc) 1999 Poté geometrie (vertex processing) HW transform & lighting (T&L) - GeForce 256 fix-pipeline byla omezením 2000 shadery => GPU lze programovat dataflow architektura výpočet se spustí, když dorazí data na rozdíl od CPU, které je sériové, řízeno programem data nevědí nic o sousedech 2006 unifikované procesory (streaming processor) ~2007 Použití GPU pro negrafické výpočty GPGPU CUDA, CTM, OpenCL,

Hrubé schéma OpenGL se shadery Vertex Data Pixel Data Vertex Shader Texture Store Primitive Assembly and Rasterization Fragment Shader Fragment operations OpenGL verze 3.1 Každá aplikace definuje dva programy (tzv. shadery): vertex shader (VS) program zapsaný v jazyku GLSL zpracovává každý vrchol fragment shader (FS) program zapsaný v GLSL zpracovává tzv. fragment

Grafická rozhraní, knihovna OpenGL, GLUT

Co je OpenGL? Grafická knihovna (Open Graphics Library) API = SW rozhraní k rastrovému grafickému HW nezávislé na OS a na použitém HW poskytuje nástroje na vykreslení 3D dat a textur do 2D nestará se o okna, události, formáty souborů, Odnože OpenGL WebGL pro web OpenGL ES pro mobily, navigace,

Co je OpenGL? minimální knihovna geometrická primitiva (body, úsečky, trojúhelníky, pásy troj. ) obrazová primitiva (rastrové obrázky) textury předává balíky dat grafické kartě (GPU) vrcholy primitiv - základem všech primitiv je bod textury programy (shadery) zapíná a vypíná jednotlivé funkce

Výhody OpenGL Jednoduchost Konzistentní implementace & design Rozsáhlá dokumentace Přenositelnost Další rozvoj je dán konsorciem firem Otevřenost a rozšiřitelnost!! výrobci HW mohou rozšiřovat funkcionalitu sami (viz GL Extensions) např. v Direct3D je všechno vydáno na milost a nemilost Microsoftu, který jediný spravuje a aktualizuje Direct3D

Knihovny kolem OpenGL (1) Aplikace závislá na operačním systému aplikační program Operační systém X, Win32, Mac O/S OpenGL ovladače hardware (periferie, GPU, ) Courtesy Siggraph2004 Course 29

Knihovny kolem OpenGL (2) Aplikace nezávislá na operačním systému aplikační program Správa oken, GUI Operační systém X, Win32, Mac O/S OpenGL ovladače hardware (periferie, GPU, ) Courtesy Siggraph2004 Course 29

Knihovny kolem OpenGL (3) Správa oken / GUI GLUT FreeGLUT SDL

Evoluce OpenGL 1994 - OpenGL 1.0 - fixní proudové zpracování ( fixed pipeline ) 2004 - OpenGL 2.0 - programovatelnost pomocí tzv. shaders 2008 - OpenGL 3.0 - zavedení dopředné kompatibility a možnosti zrušit staré funkce 2009 - OpenGL 3.1 - kompletně odstraněno fixní proudové zpracování, nutnost použití shaders 2010 - OpenGL 4.0 - řízení teselace přímo na GPU, volání funkcí (podprogramů), externí API, atd. 2014 - OpenGL 4.5 - podpora vícevláknových aplikací, robustnost, emulace DX11, atd. 2016 Vulkan 1.0 portabilita desktopy - mobilní zařízení Podrobněji zpracováno na: http://en.wikipedia.org/wiki/opengl

OpenGL 3.1, březen 2009 Vertex Data Vertex Shader Primitive Setup and Rasterization Fragment Shader Blending Pixel Data Texture Store

OpenGL 3.2, srpen 2009 Vertex Data Vertex Shader Geometry Shader Primitive Setup and Rasterizati on Fragment Shader Blending Pixel Data Texture Store

OpenGL 4.1, březen 2010 Vertex Data Vertex Shader Tessellation Control Shader Tessellation Evaluation Shader Geometry Shader Primitive Setup and Rasterization Fragment Shader Blending Pixel Data Texture Store

Kontext a profily OpenGL Profily (context profiles) Od verze > 3.0 Určují verzi OpenGL a množinu použitelných příkazů Dva typy profilu core a compatible Context Type Profile Description Full Forward Compatible core compatible core compatible Všechny funkce dané verze OpenGL (i ty, označené jako zavržené, ale bez zrušených funkcí) Všechny funkce ze všech předchozích verzí OpenGL (full v OpenGL 3.0) Pouze nezavržené funkce dané verze OpenGL Není podporován

Syntaxe příkazů v OpenGL Konstanty ( Constants ) Velká písmena, prefix GL_ Například: GL_COLOR_BUFFER_BIT, GL_DEPTH_TEST Datové typy Malá písmena s prefixem GL Například: GLfloat, GLbyte Volání procedur a funkcí: Malá písmena, první velké, prefix gl Například: glcreateprogram() Datový typ parametrů (další slajd) suffix Parametry oddělené čárkou gl<command name>[<num> <type> [v]]( parameter(s) ); prefix gl př. gluniform1f( index, 5.8f); double attrib_array[3] = {1.0, 5.0, 6.0}; gluniform3fv (index, attrib_array); Počet parametrů - celé číslo v pokud je parametrem ukazatel do pole

Datové typy parametrů příkazů Suffix Datový typ Datový typ v ANSI C OpenGL definice b 8bit integer signed char GLbyte s 16bit integer short GLshort i 32bit integer long GLint, GLsizei i64 64bit integer (long long, _int64) GLint64 f 32bit float float GLfloat, GLclampf d 64bit float double GLdouble, GLclampd ub 8bit unsigned int unsigned char GLubyte, GLboolean us 16bit unsigned int unsigned short GLushort ui 32bit unsigned int unsigned long GLunit, GLenum, GLbitfield ui64 64bit unsigned int GLunit64

OpenGL jako automat (state machine) OpenGL je automat v každém okamžiku má definován svůj vnitřní stav proto ne stavový automat!!! Vnitřní stav je definován hodnotami vnitřních proměnných Pokud je nezměníme, mají své iniciální hodnoty Tyto proměnné lze nastavovat a ptát se na jejich hodnotu Např. zapnutí hloubkového testu

Nastavení a získání hodnoty stavové proměnné Nastavení stavu logická hodnota glenable(gl_multisample); gldisable(gl_multisample); Získání stavu bool glisenabled(gl_cull_face); Získání stavu jedné či více hodnot: glgetbooleanv(glenum pname, GLboolean * params); glgetfloatv( GLenum pname, GLfloat * params); glgetintegerv(glenum pname, GLint * params); glgetdoublev( GLenum pname, GLdouble * params);

Zpracování chyb v OpenGL GLenum glgeterror(void); OpenGL detekuje jen minimum z možných chyb Kontrola všeho by byla příliš časově náročná Zapamatuje si první chybu, která nastala Každá chyba má svůj vlastní číselný kód a jemu přiřazenou symbolickou konstantu: GL_NO_ERROR no problem, OK GL_INVALID_ENUM enum value out of range. GL_INVALID_VALUE numeric argument is out of range GL_INVALID_OPERATION illegal operation in current state GL_INVALID_FRAMEBUFFER_OPERATION offending command for current state GL_OUT_OF_MEMORY not enough memory to execute the command

Zpracování chyb v OpenGL OpenGL Debug extension Od OpenGL 4.3. v jádře Mechanismus nahrazující glgeterror() Zavádí dva přístupy Frontu ladících zpráv (message log) Mechanizmus zpětných volání pro vybrané chyby (callbacks)

OpenGL odkazy http://www.opengl.org/ dokumentace, odkazy na programy, http://www.khronos.org/ vývoj, schvalování implementací (OpenGL compliant) http://www.sgi.com/ licence pro HW Ondřej Karlík - Corona renderer: Making of productionready renderer in 3dsMAX, Přednáška, Speciální seminář z počítačové grafiky, 20. 10. 2011