A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja Teljesítménykövetelmények:

Hasonló dokumentumok
HLSL programozás. Grafikus játékok fejlesztése Szécsi László t06-hlsl

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Számítógépes grafika

HLSL programozás. Szécsi László

Modellezési transzformáció: [r lokális,1] T M = [r világ,1] Nézeti transzformáció: [r világ,1] T v = [r képernyo,1]

2D képszintézis. Szirmay-Kalos László

Direct3D pipeline. Grafikus játékok fejlesztése Szécsi László t03-pipeline

2. Generáció ( ) 3. Generáció (2001) NVIDIA TNT2, ATI Rage, 3dfx Voodoo3. Klár Gergely

GPGPU alapok. GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai

Textúrák. Szécsi László

Plakátok, részecskerendszerek. Szécsi László

OpenGL és a mátrixok

Valasek Gábor

OpenCL - The open standard for parallel programming of heterogeneous systems

Grafikus csővezeték és az OpenGL függvénykönyvtár

Árnyalás, env mapping. Szécsi László 3D Grafikus Rendszerek 3. labor

Alkalmazott Informatikai Tanszék SZÁMÍTÓGÉP-PROGRAMOZÁS dr.dudás László 21./0. 3D grafika programozása OpenGL támogatással A 3D API

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Algoritmusok raszteres grafikához

Transzformációk. Grafikus játékok fejlesztése Szécsi László t05-transform

Klár Gergely 2010/2011. tavaszi félév

Grafikus csővezeték 1 / 44

Grafikus csővezeték 2 / 77

Tanács Attila. Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

1. Bevezetés 1. Köszönetnyilvánítás A számítógépes játékfejlesztésről 3

GPGPU. GPU-k felépítése. Valasek Gábor

Szegedi Tudományegyetem Informatikai Tanszékcsoport tanév

Transzformációk. Szécsi László

3D koordináta-rendszerek

A bemutatott példa a Phong modell egy egyszerűsített változatát alkalmazza a Blinn-Phong-féle megközelítést

D3D, DXUT primer. Grafikus játékok fejlesztése Szécsi László t01-system

GPGPU. Architektúra esettanulmány

Diplomamunka. Miskolci Egyetem. GPGPU technológia kriptográfiai alkalmazása. Készítette: Csikó Richárd VIJFZK mérnök informatikus

Algoritmusok raszteres grafikához

Algoritmusok raszteres grafikához

Haladó Grafika EA. Inkrementális képszintézis GPU-n

Geometriai modellezés. Szécsi László

Párhuzamos és Grid rendszerek

Számítógépes Graka - 4. Gyak

Videókártya - CUDA kompatibilitás: CUDA weboldal: Példaterületek:

A számítógépes grafika alapjai kurzus, vizsgatételek és tankönyvi referenciák 2014

Google Summer of Code OpenCL image support for the r600g driver

Véletlen szám generálás Labirintus felépítése 1x1-es felbontástól a teljes méretig

Grafikus csővezeték (Általános áttekintés) Grafikus csővezeték (Általános áttekintés)

Máté: Számítógépes grafika alapjai

Általános áttekintés. Általános áttekintés

Bevezetés a CGI-be. 1. Történelem

Féléves feladat. Miről lesz szó? Bemutatkozás és követelmények

sgame/spaceshootgame képszintézis interakció vezérlés avatar Virtuális világ Windows + GLUT szimuláció input Virtuális világmodell

GPGPU-k és programozásuk Dezső, Sima Sándor, Szénási

Grafika programozása

Máté: Számítógépes grafika alapjai

Maga a tématerület így nagyon nagy. A fények pontos fizikai szimulációja kimondottan számításigényes

Grafikus processzorok általános célú programozása (GPGPU)

Fraktálok és káosz. Szirmay-Kalos László

Máté: Számítógépes grafika alapjai

x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs mátrixa 3D-ben?

OpenGL Compute Shader-ek. Valasek Gábor

OpenCL Kovács, György

A CUDA előnyei: - Elszórt memória olvasás (az adatok a memória bármely területéről olvashatóak) PC-Vilag.hu CUDA, a jövő technológiája?!

Tanács Attila. Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Nincs szinkronizáció és kommunikáció Csővezeték alkalmazása Párhuzamosítás

Érdekes informatika feladatok

KÉPFELDOLGOZÓ ALGORITMUSOK FEJLESZTÉSE GRAFIKUS HARDVER KÖRNYEZETBEN

Játékfejlesztés. Szirmay-Kalos László

Hajder Levente 2016/2017.

GRAFIKA PROGRAMOZÁSA. Bemutatkozás és követelmények. Dr. Mileff Péter

KUTATÁSOK INFORMATIKAI TÁMOGATÁSA. Dr. Szénási Sándor

OSZTOTT 2D RASZTERIZÁCIÓS MODELL TÖBBMAGOS PROCESSZOROK SZÁMÁRA

Első sikerek. GPU áttekintése

GPU Lab. 14. fejezet. OpenCL textúra használat. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Számítógépes Grafika mintafeladatok

Termék modell. Definíció:

GPGPU: Általános célú grafikus processzorok cgpu: computational GPU GPGPU = cgpu Adatpárhuzamos gyorsító: dedikált eszköz, ami eleve csak erre

Tartalom. Hajder Levente 2016/2017. I. félév

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

Számítógépes grafika

Szegedi Tudományegyetem Informatikai Tanszékcsoport tanév

GPU-Accelerated Collocation Pattern Discovery

Számítógépes grafika

Bevezetés. Bevezetés. Bevezetés. Történeti áttekintés. Bevezetés

Realisztikus színtér 1 / 59

A számítógépes grafika alapjai kurzus, vizsgatételek és tankönyvi referenciák 2016

3D-s számítógépes geometria és alakzatrekonstrukció

Tartalom. Tartalom. Hajder Levente 2018/2019. I. félév

FEJLETT GRAFIKAI ALGORITMUSOK

GPGPU programozás lehetőségei. Nagy Máté Ferenc Budapest ALICE ELTE TTK Fizika MSc 2011 e-science Café

Grafika programozása

Hajder Levente 2018/2019. II. félév

A keretrendszer. A linuxos keretrendszer az eredeti alapján készült (nagyrészt C++-ban), ezért nagyjából azzal azonos funkcionalitásokkal rendelkezik.

Megjegyzés: jelenti. akkor létezik az. ekkor

Hajder Levente 2014/2015. tavaszi félév

SZAKDOLGOZAT. Rákos Dániel

SZE, Doktori Iskola. Számítógépes grafikai algoritmusok. Összeállította: Dr. Gáspár Csaba. Felületmegjelenítés

Teszt Az nvidia GeForce VGA kártyák gyakorlati teljesítménye a Dirt3-ban

PÁRHUZAMOS SZÁMÍTÁSTECHNIKA MODUL AZ ÚJ TECHNOLÓGIÁKHOZ KAPCSOLÓDÓ MEGKÖZELÍTÉSBEN

HARDVERESEN GYORSÍTOTT 3D/2D RENDERELÉS

Programfejlesztés az OpenGL segítségével (1. rész) A 3D programozás alapjai

A táblázatkezelő mérnöki alkalmazásai. Számítógépek alkalmazása előadás nov. 24.

Átírás:

Beveetés

A sámítógépes grafika inkrementális képsintéis algoritmusának hardver realiációja Teljesítménykövetelmények: Animáció: néhány nsec/ képpont Massívan párhuamos Pipeline(stream processor) Párhuamos ágak

MODELVIEW PROJECTION Virtuális világ 2. 1. Kamera transformáció, illumináció Perspektív transformáció + Vágás homogén koordinátákban sín mélység Képernyő transf+rasteriáció+interpoláció megjelenítés

x3, y3, 3 x2, y2, 2 (u3, v3) (u1, v1) (u2, v2) (u3, v3) (u2, v2) x1, y1, 1 Interpolációval: (u1, v1) (u, v) sín (u1, v1) (u2, v2) (u3, v3) Textúra objektum a grafikus kártya memóriájában: kép + sűrés + kilógás keelés

Descartes: (x,y,) Homogén: [X,Y,Z,w] = [xw,yw,w,w] Miértjó? Eltolás, elforgatás, köéppontos vetítés, stb. mind 4x4-es mátrixsal sorás Több transformáció egyetlen mátrixban össefogható Párhuamosok nem okonak gondot (párhuamosok ideális pontban metsik egymást) A homogén koordináták lineáris transformációi: háromsöget háromsögbe visnek át

x, y, a irány w a távolság invere y [x,y,1] [x,y,1/3] [2x,2y,1] = [x,y,1/2] [x,y,0] x

Eltolás Elforgatás [x,y,,1] [x,y,,1] 1 1 1 px, py, p, 1 cosα sinα -sinα cosα 1 1 Skáláás [x,y,,1] Sx Sy S 1

Vetítés ( ) 1,,,, y x y x Nem lineáris = = = = = 1 ' 1 ' 1 1 ' b f K + = ' β α -f -b ( ) + =,1,, ', ', ', ' β α y x w y x ( ) y x,,, 2 β α Nem lineáris

Vetítés ( ) + = + =,1,, ', ', ', ' ' y x w y x β α β α ( ) β α 1 1 -α -1 -β 0 [x,y,,1] ( ) y x,,, β α Lineáris

MODELVIEW PROJECTION Virtuális világ Kamera transformáció Perspektív transformáció [x,y,,1] T modelviewproj = [X,Y,Z,w] Z camera

(1, 1, 1) -1 < x < 1-1 < y < 1-1 < < 1 w > 0 (-1,-1,-1) -w < X < w -w < Y < w -w < Z < w [X,Y,Z,w] = [xw,yw,w,w]

(-1,-1,-1) (1, 1, 1)

(-1,-1,-1) (1, 1, 1)

(1, 1, 1) (-1,-1,-1) Képernyő k. 1 Z(-1,1) (0,1)

(X 3,Y 3 ) (X 2,Y 2 ) (X 1,Y 1 )

Z (X 2,Y 2,Z 2 ) Z(X,Y) = ax + by + c (X 3,Y 3,Z 3 ) Y (X 1,Y 1,Z 1 ) X Z(X,Y) Z(X+1,Y) = Z(X,Y) + a

X Z(X,Y) X sámláló Z register CLK Σ a

v Y Perspektív helyes u X u/w =a u X+b u Y+c u v/w = a v X+b v Y+c v 1/w =a w X+b w Y+c w u = a u X+b u Y+c u a h X+b h Y+c h lineáris w = - v = a v X+b v Y+c v a h X+b h Y+c h

X Div u Div v [u/h](x,y) [v/h](x,y) [1/h](X,Y) X sámláló [u/h] register [v/h] register [1/h] register CLK Σ Σ Σ a u a v a h

2. 1. 3. 0.3 0.6 0.8 0.6 0.3 = 1 Sín buffer Mélység buffer Z-buffer

Interpolált vagy textúrából olvasott sín (R s,g s,b s,a s ) (R d,g d,b d,a d ) * * első első (R,G,B,A) ALU Rastertár (R,G,B,A) = (R s A s +R d (1-A s ), G s A s +G d (1-A s ), B s A s +B d (1-A s ), A s A s +A d (1-A s ))

Csúcspont Transf.+ megvilágítás Vágás + homogén ostás Képernyő transf Triangle setup Rasteriáció+ interpoláció Textúráás Z-buffer kompoit Rastertár

Korai nem PC rendserek A teljes csőveeték megvalósítva Workstation és Graphics Terminal HP, Sun, Textronix Csúcspont Transf.+ megvilágítás Vágás + homogén ostás Képernyő transf Triangle setup Rasteriáció+ interpoláció Textúráás Z-buffer kompoit Rastertár

1970-1990 Tipikusan 2D Spriteok, primitivek Blitter, vonal, négysög rajolás Ablakkeelő gyorsítás Amiga, Atari, S3 Csúcspont Transf.+ megvilágítás Vágás + homogén ostás Képernyő transf Triangle setup Rasteriáció+ interpoláció Textúráás Z-buffer kompoit Rastertár

1990-1998 Vertex feldolgoás, textúra sűrés, Z-buffer PlayStation, Nintendo64 S3 Virge, ATI Rage, Matrox Mystique 3dfx Voodoo 3dfx Glide Microsoft DirectX 5.0 Csúcspont Transf.+ megvilágítás Vágás + homogén ostás Képernyő transf Triangle setup Rasteriáció+ interpoláció Textúráás Z-buffer kompoit Rastertár

1990-2000 A csőveetés felbontása Transform& Lighting Microsoft DirectX 7.0 OpenGL NVIDIA GeForce 256 (NV10) a első nem professionális 3D gyorsító Csúcspont Transf.+ megvilágítás Vágás + homogén ostás Képernyő transf Triangle setup Rasteriáció+ interpoláció Textúráás Z-buffer kompoit Rastertár

2000 Shaderek megjelenése Vertex és fragmens shader (2001) Geometria shader (2006) Programoható tesselátor (2010) Csúcspont Transf.+ megvilágítás Vágás + homogén ostás Képernyő transf Triangle setup Rasteriáció+ interpoláció Textúráás Z-buffer kompoit Rastertár

Általános felület a GPU-ho Csőveeték veérlése Shaderek Geometria definíció Textúrák Framebuffer Párhuamos renderelés

Microsoft DirectX Windows specifikus DirectX7: transform & lighting DirectX9: vertex és pixel shader DirectX10: geometry shader DirectX11: tesselation, DirectCompute

OpenGL OpenGL 2.0: vertex és pixel shader OpenGL 3.0: framebuffer objects OpenGL 3.1: opencl interop OpenGL 3.2: geometry shader OpenGL 3.3/4.0: tesseláció, GPGPU

CUDA Compute Unified Device Architecture 2007. NVIDIA Magas sintű, C serű nyelv Atomi műveletek Savaás Dupla pontosságú sámítás Sinkroniáció

OpenCL 2008 november, Khronos Group Gyártó független GPGPU API CPU és GPU össemosás ATI, Intel, Apple, IBM és NVIDIA

CPU Textúra memória Vertex buffer Transformáció+ Vertex Illumináció Shader Geometry Shader Vágás + Viewport transf. + Rasteriáció + interpoláció Korai eldobás Fragment Textúráás Shader csúcspont primitív GPU fragmens Kompoitálás (mélység, átlátsóság) Bufferek: sín,, pixel

Felsín árnyaló (Hull Shader) Felbontás veérlése Tesselátor (Tesselator) Fix funkciójú egység Tartomány árnyaló (Domain Shader) Felbontás ellenőrése Vertexek létrehoása Vertex Shader Hull Shader Tesselator Domain Shader Geometry Shader

glbegin(gl_triangles) glvertex glnormal glcolor gltextcoord glend( ) POSITION, NORMAL, COLOR0, TEXTCOORD0, *MVP Illumináció Vertex shader Vágás: -w<x<w, -w<y<w, -w<z<w CPU GPU Állapot Transformációk Fényforrások Anyagok POSITION, COLOR0, TEXTCOORD0, háromsögre Geometry shader Homogén ostás: X=X/w, Y=Y/w, Z=Z/w + viewport transformáció

POSITION, COLOR0, TEXTCOORD0, háromsög csúcsokra Háromsög kitöltés és interpoláció POSITION, COLOR0, TEXTCOORD0, pixelekre Korai -eldobás Fragment shader Textúráás X,Y, DEPTH COLOR Kompoitálás: blending, -bufferelés Állapot Textúra aonosító és paraméterek Textúra memória Rastertár és -buffer

.cpp CPU program: GLUT, OpenGL inicialiálás Shader environment létrehoás GPU képesség beállítás (profile) Vertex/fragment program betöltés és fordítás: CREATE Vertex/fragment program átadás a GPU-nak: LOAD Vertex/fragment program kiválastás: BIND Uniform vertex/fragment input váltoó létrehoás Uniform vertex/fragment váltoó értékadás Váltoó input váltoó értékadás (glvertex, glcolor, gltexcoord) Inicialiálás Display.cg vertex program Fragment program váltoó input váltoó + homogén poíció.cg fragment program Sín kimenet

OpenGL/GLUT inicialiálás, textúra feltöltés #include <GL/glut.h> int main(int argc, char* argv[]) { glutinit(&argc, argv); glutinitdisplaymode(glut_rgba GLUT_DEPTH GLUT_DOUBLE); glutinitwindowsie(600, 600); glutcreatewindow( GLUT Window ); InitCg(); glutdisplayfunc(ondisplay); glutkeyboardfunc(onkeyboard); glutidlefunc(onidle); } glutmainloop(); return(0);

Árnyaló inicialiálás #include <Cg/cgGL.h> // Cg függvények Vertex shader betölté és CGparameter LightDir, TextureShift; // uniform paraméterek a CPU-n int InitCg( ) { CGcontext shadercontext = cgcreatecontext(); // árnyaló kontextus CGprofile vertexprof = cgglgetlatestprofile(cg_gl_vertex); cgglenableprofile(vertexprof); CGprogram vertexprogram = cgcreateprogramfromfile( shadercontext, CG_SOURCE, vertex.cg", vertexprof, NULL, NULL); cgglloadprogram(vertexprogram); cgglbindprogram(vertexprogram); // GPU-ra töltés // e legyen a futó program // vertex program uniform paraméterek. CPU-n LightPos; GPU-n lightpos LightPos = cggetnamedparameter(vertexprogram, lightpos");

CGprofile fragmentprof = cgglgetlatestprofile(cg_gl_fragment); cgglenableprofile(fragmentprof); CGprogram fragmentprogram = cgcreateprogramfromfile( shadercontext, CG_SOURCE, fragment.cg", fragmentprof, NULL, NULL); cgglloadprogram(fragmentprogram); // GPU-ra töltés cgglbindprogram(fragmentprogram); // e a program fusson // fragmens program uniform paraméterek TextureShift = cggetnamedparameter(fragmentprogram, shift");

void ondisplay( ) { // állapot (implicit uniform) paraméterek beállítása glloadidentity(); glulookat(0, 0, -10, 0, 0, 0, 0, 1, 0); glrotatef(angle, 0, 1, 0); } // explicit uniform paraméterek beállítása cgglsetparameter3f(lightpos, 10, 20, 30); // lightpos cgglsetparameter1f(shine, 40); // shininess cgglsetparameter3f(kd, 1, 0.8, 0.2); // kd cgglsetparameter3f(ks, 2, 2, 2); // ks // váltoó paraméterek, a PASS glbegin( GL_TRIANGLES ); for( ) { gltexcoord2f(u, v); // TEXCOORD0 register glvertex3f(x, y, ); } glend(); // POSITION register + trigger

void main( in float4 position : POSITION, in float4 texcoord : TEXCOORD0, in float3 normal : NORMAL, in float3 color : COLOR0, uniform float4x4 MVP : state.matrix.mvp, uniform float3 lightpos, // fényforrás világ k-ban out float4 hposition : POSITION, out float3 otexcoord : TEXCOORD0, out float3 ocolor : COLOR0 ) { hposition = mul(mvp, position); L ocolor = color * dot(normal, lightpos); N otexcoord = texcoord; }

void main( in float2 texcoord : TEXCOORD0, in float3 color : COLOR0, uniform sampler2d texture_map, uniform float2 shift, out float4 ocolor : COLOR ) { texcoord += shift; float3 texcol = tex2d(texture_map, texcoord); ocolor = texcol * color; }