Programovatelné shadery a jazyk Cg. Petr Kmoch

Podobné dokumenty
Co je grafický akcelerátor

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

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

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

Programování shaderů GLSL

Programování GPU ( shaders )

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

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

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

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

Android OpenGL. Pokročilé shadery

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

Připravil: David Procházka. Shadery

Architektura grafických ip pro Xbox 360 a PS3

HDR obraz (High Dynamic Range)

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

Android OpenGL. Práce s texturami

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.

Jazyk Cg Josef Pelikán, MFF UK Praha

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

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

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

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

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

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

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

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

Josef Pelikán, CGG MFF UK Praha

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

Hardware pro počítačovou grafiku NPGR019

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

Úvod. Programovací paradigmata

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

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

Seznámení s prostředím dot.net Framework

Realistické zobrazení terénu

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

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

3.7.5 Znaménkové operátory Násobící operátory Rùzné operátory Základní objekty Konstanty Sig

Nvidia CUDA Paralelní programování na GPU

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY. programovatelných GPU a CPU (grafických procesorů

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

:5$ =islv GDW V DOWHUQDFt QHMY\ããtKRELWX

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Využití grafického procesoru pro matematické výpočty. Bc. Miloslav Cinibulk

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

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

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

Matematika I Podprostory prostoru V n

XNA Game Studio 3.1. Tomáš Herceg Microsoft Most Valuable Professional Microsoft Student Partner

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

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

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

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

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

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Vláknové programování část I

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

GPU A CUDA HISTORIE GPU CO JE GPGPU? NVIDIA CUDA

Opakování programování

Matematika pro real-time grafiku

Distributed Safety: Koncepce

Univerzita Karlova v Praze Matematicko-fyzikální fakulta. Vít Houska. Kabinet software a výuky informatiky

Ukázka knihy z internetového knihkupectví

Hodnoticí standard. Počítačový 3D grafik (kód: N) Odborná způsobilost. Platnost standardu

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

Vector datový kontejner v C++.

Matematika I Ètvercové matice - determinanty

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

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

Česká pošta, s.p. na Linuxu. Pavel Janík open source konzultant

Přehled paralelních architektur. Dělení paralelních architektur Flynnova taxonomie Komunikační modely paralelních architektur

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

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

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST

Šablony, kontejnery a iterátory

Programování v jazyce C a C++

Pokročilé architektury počítačů

Šablony, kontejnery a iterátory

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

LCD MODULY LCD moduly znakové. LCD moduly grafické

Rekurzivní sledování paprsku

Kapitola 1: Úvod. Systém pro správu databáze (Database Management Systém DBMS) Účel databázových systémů

Program a životní cyklus programu

Informační Systém pro Psychiatrii HIPPO

Základní informace. Operační systém (OS)

Š E D O T Ó N O V Á A B A R E V N Á K A L I B R A C E

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

Řešíme úlohu zpracování velkého množství dat. Data jsou symetrická, úloha je dobře paralelizovatelná

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

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

LCD MODULY LCD moduly znakové. LCD moduly grafické

Flow-X PRŮTOKOMĚR. On-line datový list

Jiné výpočetní platformy J. Sloup, M. Skrbek, I. Šimeček

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

Deformace rastrových obrázků

Srovnání alternativních implementací DirectX

Transkript:

Programovatelné shadery a jazyk Cg Petr Kmoch

Historie Softwarové výpoèty Pevná pipeline Volitelné moduly Programovatelné shadery 11.12.2002 Petr Kmoch, MFF UK 2

Grafická pipeline Triangulace scény Vrcholy Pevné T&L Vertex shader Zpracování vrcholù Transformace & osvìtlení Nedìlá perspektivní projekci Texturování Rasterizace Pixely Zpracování pixelù Urèí výslednou barvu Pixel rendering Pixel shader Ète textury 11.12.2002 Petr Kmoch, MFF UK 3

Programovatelné shadery Asemblerovské instrukce GPU Pøizpùsobené grafickým úèelùm (práce s vektory, interpolace) Vektorové a skalární registry Zadávání programù pøes API (DirectX, OpenGL) Více programù na 1 snímek Krátké (128 instrukcí VS, 8 instrukcí PS) 11.12.2002 Petr Kmoch, MFF UK 4

Programovatelné shadery, vývoj Zvìtšování poètu instrukcí a registrù Rozšiøování instrukèní sady Vìtvení, cykly Podprocedury Vyšší matematické funkce Zvìtšování poètu textur 11.12.2002 Petr Kmoch, MFF UK 5

Ukázka programu shaderu DP3 R0, c[11].xyzx, c[11].xyzx RSQ R0, R0.x MUL R0, R0.X, c[11].xyzx MOV R1, c[3] MUL R1, R0.x, c[0].xyzx DP3 R2, R1.xyzx, R1.xyzx RSQ R2, R2.x MUL R1, R2.x, R1.xyzx ADD R2, R0.xyzx, R1.xyzx DP3 R3, R2.xyzx, R2.xyzx RSQ R3, R3.x MUL R2, R3.x, R2.xyzx DP3 R2, R1.xyzx, R2.xyzx MAX R2, c[3].z, R2.x MOV R2.z, c[3].y MOV R2.w, c[3].y LIT R2, R2 11.12.2002 Petr Kmoch, MFF UK 6

Jazyk Cg C for Graphics, C for GPUs Vývoj: nvidia + Microsoft Corp. Pøedstaven v èervnu 2002 Vysokoúrovòový programovací jazyk pro shadery Vychází ze syntaxe C a C++ HW nezávislý 11.12.2002 Petr Kmoch, MFF UK 7

Pøehled vlastností Cg Pojmenované promìnné Podmínky, cykly Uživatelské funkce Typy: skaláry, vektory, matice, pole, struktury Knihovní funkce Pøetìžování funkcí 11.12.2002 Petr Kmoch, MFF UK 8

Výhody Cg oproti asembleru Èitelnost Pøenositelnost Rychlejší zápis Usnadòuje komunikaci s aplikací Pojmenované parametry 11.12.2002 Petr Kmoch, MFF UK 9

Ukázka programu v Cg float3 cspec = pow(max(0, dot(nf, H)), phongexp).xxx; float3 cplastic = Cd * (cambi + cdiff) + Cs * cspec; vertout main(appin In, uniform float4x4 ModelViewProj : C0, uniform float4x4 ModelViewIT : C4, uniform float4 LightVec) { vertout Out; Out.HPosition = mul(modelviewproj, In.Position); float4 normal = normalize(mul(modelviewit,in.normal).xyzz); float4 light = normalize(lightvec); float4 eye = float4(0.0, 0.0, 1.0, 1.0); float4 half = normalize(light + eye); float diffuse = dot(normal, light); float specular = dot(normal, half); specular = pow(specular, 32); float4 diffusematerial = float4(0.0, 0.0, 1.0, 1.0); float4 specularmaterial = float4(1.0, 1.0, 1.0, 1.0); Out.Color0 = diffuse*diffusematerial + specular*specularmatrial; return Out; } 11.12.2002 Petr Kmoch, MFF UK 10

Použití Cg Zdrojový kód v Cg Kompilátor Cg Cg Pøekládá se do asembleru grafické karty Získaný kód se zavádí pøes API Kód v asembleru DirectX od 8.0 OpenGL od 1.4 DirectX OpenGL API Offline a runtime varianta Grafická karta Hardware 11.12.2002 Petr Kmoch, MFF UK 11

Pøeklad Cg Pøekladaè je open-source Front-end Ukázkový back-end (lidsky èitelný výstup) Pøekladaèe píší výrobci HW Masivní HW-specifická optimalizace 11.12.2002 Petr Kmoch, MFF UK 12

Profily Øešení rùznorodosti grafických karet Profil = podmnožina Cg pro dané API DirectX 8.0 VS, DirectX 8.0 PS, OpenGL ARB VS, NV30 OpenGL, Výbìr v okamžiku kompilace 11.12.2002 Petr Kmoch, MFF UK 13

Datové typy v Cg float, half, fixed bool sampler* Handle na texturu Vektory a matice bool3, float4x4,... Nemá celá èísla Struktury; implicitní typedef Pole Pøedávají se hodnotou 11.12.2002 Petr Kmoch, MFF UK 14

Funkce a pøíkazy v Cg Cykly for, while Operátory se aplikují po složkách Funkce mul násobení vektorù a matic Konstruktor vektorù float4 y = x*float4(3.0,0.0,1.0,0.5); Funkce rozlišují vstupní a výstupní parametry float fce1(out float x) float fce2(inout float x) 11.12.2002 Petr Kmoch, MFF UK 15

Operátor. na vektorech Vektory mají složky x,y,z,w, resp. r,g,b,a Lze je duplikovat, permutovat, zkracovat, prodlužovat, dosazovat float3(a,b,c).zyx == float3(c,b,a) float2(a,b).yyxx == float4(b,b,a,a) float4(a,b,c,d).w == d Efektivní 11.12.2002 Petr Kmoch, MFF UK 16

Zajímavé knihovní funkce cross(a,b) Vektorový souèin 3-složkových vektorù a a b determinant(m) lerp(a,b,f) (1-f)*a + b*f lit(ndotl,ndoth,m) Spoèítá koeficienty okolního, matného a lesklého svìtla noise(x) Šumový vektor stejné velikosti jako x, konzistentní mezi snímky refract(i,n,eta) Spoèítá zalomený paprsek 11.12.2002 Petr Kmoch, MFF UK 17

Rozhraní Cg programu Jedna hlavní funkce (obdoba main) Volá se pro každý prvek (vrchol, pixel) Dva druhy vstupù Variantní závisí na prvku (souøadnice, ) Uniformní jednotné pro scénu (transformaèní matice, ) 11.12.2002 Petr Kmoch, MFF UK 18

Variantní vstupy Specifikace strukturou struct myinput { float3 position : POSITION; float refractive_index : TEXCOORD3; }; outdata mymain(myinput indata) { } Specifikace parametrem outdata mymain(float3 myposition : POSITION, float myindex : TEXCOORD3) { } 11.12.2002 Petr Kmoch, MFF UK 19

Uniformní vstupy Specifikují se parametrem outdata mymain(myinput indata, } uniform float4x4 transformmatrix) { 11.12.2002 Petr Kmoch, MFF UK 20

Offline použití Cg Zdrojový kód se pøeloží Kompilátor vygeneruje seznam registrù Kód i data se zadávají pøes API DirectX, OpenGL Vhodné pro ruèní úpravy kódu 11.12.2002 Petr Kmoch, MFF UK 21

Funkce Cg runtime Kompilace za bìhu (pøi startu) aplikace Pøedání asembleru do API Výbìr shaderu Manipulace s parametry pro shader Verze funkcí pro DirectX a OpenGL 11.12.2002 Petr Kmoch, MFF UK 22

Datové struktury Cg runtime Program Zdrojový kód Jméno hlavní funkce Profil Parametr Jméno Druh Typ Registr Kontext Seznam programù (shaderù) 11.12.2002 Petr Kmoch, MFF UK 23

Shrnutí Vysokoúrovòový jazyk pro vertex shadery a pixel shadery HW nezávislý Nad úrovní DirectX a OpenGL HW-specifické optimalizace pøi kompilaci Možnost kompilace at runtime Runtime API 11.12.2002 Petr Kmoch, MFF UK 24

Další informace http://www.nvidia.com/cg http://www.cgshaders.org 11.12.2002 Petr Kmoch, MFF UK 25