GPGPU labor III. Iteratív algoritmusok. Kezdeti teendők Tantárgy honlapja, Iteratív algoritmusok A labor kiindulási alapjának letöltése (lab3base.zip),

Slides:



Advertisements
Hasonló előadás
 Folyékony anyagok  Füstszerű jelenségek  Felhők  Festékek.
Advertisements

 Árnyalási egyenlet  Saját emisszió  Adott irányú visszaverődés.
Térfogatvizualizáció Szirmay-Kalos László. Térfogati modellek v(x,y,z) hőmérséklet sűrűség légnyomás potenciál anyagfeszültség... v(x,y,z) tárolás: 3D.
Digitális képanalízis
 Bővítmény rendszer  Az OpenGL bővítményeihez hasonló  A specifikiáció természetes fejlődése ▪ Gyártó specifikus bővítmény ▪ Általános bővítmények.
 Gauss szűrő uniform sampler2D colorMap; const float kernel[9] = float[9]( 1.0, 2.0, 1.0, 2.0, 4.0, 2.0, 1.0, 2.0, 1.0); out vec4 outColor; void main(){
GPGPU labor I. OpenGL, Cg.
 Nincs szinkronizáció és kommunikáció  Csővezeték alkalmazása  Párhuzamosítás Proc 2Proc 1 Csővezeték Proc 1 Proc 21 Proc 22 Párhuzamosság.
GPGPU labor V. GPU ray tracing. Kezdeti teendők Tantárgy honlapja, GPU ray tracing A labor kiindulási alapjának letöltése (lab5_base.zip), kitömörítés.
Szintézis Keresztes Péter, 2005 A GAJSKI-KUHN DIAGRAM Alapelv: Rendezzük a digitális- rendszerek leírásait célok és szintek szerint.
Ellenőrző kérdések a)Auto-indexing enabled b)Auto-indexing disabled c)Nem eldönthető 1.
Programozás I. Horváth Ernő.
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
További vektor, mátrix algoritmusok
Fejlett grafikai algoritmusok Megvilágítási modellek
Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Térfogatvizualizáció
Terep Szécsi László. Mechanizmus NxHeightField-ek definiálása PhysicsModel-be NxHeightFieldShapeDesc-ek betöltése Mesh-ek gyártása az NxHeightField- ekből.
Fraktálok és csempézések
Motor I. Scene graph XML Rendering Szécsi László.
Environment mapping Szécsi László. Új osztály: Lab3EnvMap copy&paste: Lab2Trafo.h -> Lab3EnvMap.h copy&paste: Lab2Trafo.cpp -> Lab3EnvMap.cpp copy&paste:
Térfogatvizualizáció
Kezdeti teendők Letöltés: CharacterModellingBase.zip Blender3D futtatása headBase.blend betöltése.
Grafikus játékok fejlesztése Szécsi László t09-texture
Rekurzív algoritmusok
 MipMap  glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA32F,...);  glFramebufferTexture2D(GL_FRAMEBUFFER,..., TexID, mipLevel);
 Kvantált kép fényesség értékei: G [ 0, Gmax ]  G fényességű pontok száma: P(G)
GPGPU labor IX. Lineáris egyenletrendszerek megoldása.
GPGPU labor II. GPU mint vektor processzor. Kezdeti teendők Tantárgy honlapja, Bevezetés – Alap könyvtárak letöltése Tantárgy honlapja, GPU mint vektor.
Számítógépes grafika DirectX 5. gyakorlat. Emlékeztető Háromdimenziós alapok befejezése Textúrázás.
Komoróczy Tamás 1 Java programozási nyelv Stringek.
Gyakorlat 10. Számítógép hálózatok I.
A Van der Waals-gáz molekuláris dinamikai modellezése Készítette: Kómár Péter Témavezető: Dr. Tichy Géza TDK konferencia
2. gyakorlat DirectX 2007/2008 tavasz Klár Gergely
Programozás I. Típus algoritmusok
CUDA C/C++ programozás
A Visual Basic nyelvi elemei
Vizualizáció és képszintézis Sugárkövetés (Dart + GLSL) Szécsi László.
Számítógépes grafika OpenGL 5. gyakorlat.
1 Mivel foglalkoz(t)unk a laborokon? 1.Labor: Word alapok Excel alapok: Excel alapok: Cellahivatkozás, munkalapfüggvény, diagram varázsló, trendvonal 2.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Excel programozás (makró)
Számítógépes Grafika 3. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
Képek, képfeldolgozás Szirmay-Kalos László.
Vizualizáció és képszintézis Térfogati textúrák kezelése (Dart + GLSL) Szécsi László.
Grafikus hardver/szoftver alapok Szirmay-Kalos László.
Karakter Animáció és Kontroller Unity. Kezdeti lépések Alap projekt letöltése Egy statikus geometriát láthatunk Meg vannak a fizikai befoglalók is.
Szécsi László 3D Grafikus Rendszerek 15. előadás
OpenCL bővítmények.
Lighting III.
Script nyelvek előadás
A grafikus hardware programozása
OpenGL 2. gyakorlat Valasek Gábor
02. GYAKORLAT Soros monitor.
Monte Carlo módszerek.
Vizualizáció és képszintézis
Vizualizáció és képszintézis
OpenGL IV.
Vizualizáció és képszintézis
Lineáris egyenletrendszerek megoldása
GPGPU – CUDA 2..
Villogó delay függvény használata nélkül
OpenGL III.
Alapok Model betöltés Anyagjellemzők Fényforrások Shaderek
OpenGL II.
Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor
OpenGL V.
Ghost Hunter Game logic/HUD.
CUDA – OpenGL.
Előadás másolata:

GPGPU labor III. Iteratív algoritmusok

Kezdeti teendők Tantárgy honlapja, Iteratív algoritmusok A labor kiindulási alapjának letöltése (lab3base.zip), kitömörítés a GPGPU\Labs könyvtárba

Gauss szűrő Textúra bekötése a shaderbe: shader->bindUniformTexture( „shader variable", texture->getTextureHandle(), textureUnitNumber); A maximálisan használható textúrák száma: GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS ​

gauss.frag #version 130 uniform sampler2D colorMap; const float kernel[9] = float[9]( 1.0, 2.0, 1.0, 2.0, 4.0, 2.0, 1.0, 2.0, 1.0); out vec4 outColor; // TODO // LOOP X = // LOOP Y = // texelValue[gl_FragCoord.x + X, gl_FragCoord.y + Y] * // kernel[X+1,Y+1] / 16.0 // // texelValue: texelFetch(samplerName, iCoord, mipmap) // texture2D(samplerName, nCoord) // textureSize: textureSize(samplerName, mipmap) void main(){ }

Próba

Iteratív Gauss Framebuffer* computeBuffer[2]; int inputBuffer = 0; int npasses = 5; // TODO // LOOP I = 0.. npasses // IF I == npasses - 1 // renderTarget := screen // ELSE // renderTarget := computeBuffer[(inputBuffer + 1) % 2] // // IF npasses == 0 // colorMap := texture // ELSE // colorMap := computeBuffer[inputBuffer]->getColorBuffer(0) // // GaussShader // inputBuffer = (inputBuffer + 1) % 2 void gaussMultipass() { }

Próba (npasses = 25)

Szeparábilis szűrő I. Shader* gaussShaderV; Shader* gaussShaderH; // TODO // LOOP I = 0.. npasses // IF I == npasses - 1 // renderTarget := screen // ELSE // renderTarget := computeBuffer[(inputBuffer + 1) % 2] // // IF npasses == 0 // colorMap := texture // ELSE // colorMap := computeBuffer[inputBuffer]->getColorBuffer(0) // // GaussShaderH // inputBuffer = (inputBuffer + 1) % 2 // GaussShaderV // inputBuffer = (inputBuffer + 1) % 2 void gaussSeparableMultipass() { }

gaussH.frag #version 130 uniform sampler2D colorMap; const float kernel[3] = float[3]( 1.0, 2.0, 1.0 ); out vec4 outColor; // TODO // LOOP X = // texelValue[gl_FragCoord.x + X, gl_FragCoord.y] * // kernel[X+1] / 4.0 // // texelValue: texelFetch(samplerName, iCoord, mipmap) // texture2D(samplerName, nCoord) // textureSize: textureSize(samplerName, mipmap) void main(){ outColor = vec4(0.0); }

gaussV.frag #version 130 uniform sampler2D colorMap; const float kernel[3] = float[3]( 1.0, 2.0, 1.0 ); out vec4 outColor; // TODO // LOOP Y = // texelValue[gl_FragCoord.x, gl_FragCoord.y + Y] * // kernel[Y+1] / 4.0 // // texelValue: texelFetch(samplerName, iCoord, mipmap) // texture2D(samplerName, nCoord) // textureSize: textureSize(samplerName, mipmap) void main(){ outColor = vec4(0.0); }

Próba (npasses = 25)

Hullám egyenlet void resetWave() { WE_computeBuffer[0]->clear(); WE_computeBuffer[1]->clear(); } void addForce(int x, int y){ WE_computeBuffer[inputBuffer]->setRenderTarget(); WE_addForce->enable(); WE_addForce->bindUniformInt2("center", x, y); fullscreenQuad->render(WE_addForce); WE_addForce->disable(); WE_computeBuffer[inputBuffer]->disableRenderTarget(); }

addForce.frag #version 130 uniform ivec2 center; out vec4 outColor; void main(void){ if(ivec2(gl_FragCoord.xy) == center){ outColor = vec4(1.0, 0.0, 0.0, 1.0); } else { discard; }

visualize.frag #version 130 uniform sampler2D inputMap; out vec4 outColor; void main(void){ outColor = vec4(texelFetch(inputMap, ivec2(gl_FragCoord.xy), 0).x * 100); }

Shader* WE_addForce; Shader* WE_iteration; Shader* WE_visualize; //TODO // // Euler integration // // renderTarget := WE_computeBuffer[(inputBuffer + 1) % 2] // inputMap := WE_computeBuffer[inputBuffer]->getColorBuffer(0), //textureUnit := 0 // WE_iteration_1 // inputBuffer := (inputBuffer + 1) % 2; // // renderTarget := screen // inputMap := WE_computeBuffer[inputBuffer]->getColorBuffer(0), //textureUnit := 0 // WE_visualize void waveEquation1() { } Hullám egyenlet

#version 130 uniform sampler2D inputMap; out vec4 outColor; const float deltat = 0.001; const float deltax = 0.01; const float sqrc = 200.0; // TODO // // data := texelFetch(inputMap, ivec2(gl_FragCoord), 0) // u := data.x // v := data.y // ud2 := Laplace filter (| | // | | // | | // u := u + v * deltat // v := v + sqrc * ud2 * deltat // // out := u,v void main(void){ outColor = vec4(0.0); } iteration.frag

Próba

Mid-point //TODO // // 2nd order Runge-Kutta integration // // renderTarget := WE_computeBuffer[(inputBuffer + 1) % 2] // pass := 0 // inputMap := WE_computeBuffer[inputBuffer]->getColorBuffer(0), textureUnit := 0 // WE_iteration_2 // inputBuffer := (inputBuffer + 1) % 2; // // renderTarget := WE_computeBuffer[(inputBuffer + 1) % 2] // pass := 1 // inputMap := WE_computeBuffer[inputBuffer]->getColorBuffer(0), textureUnit := 0 // WE_iteration_2 // inputBuffer := (inputBuffer + 1) % 2; // // renderTarget := screen // inputMap := WE_computeBuffer[inputBuffer]->getColorBuffer(0), textureUnit := 0 // WE_visualize void waveEquation2() { }

// TODO // // data := texelFetch(inputMap, ivec2(gl_FragCoord), 0) // IF pass == 0 //u := data.x //v := data.y //ud2 := Laplace filter U (| | // | | // | | //um := u + v * deltat / 2.0 //vm := u + sqrc * ud2 * deltat / 2.0 //out := u,v,um,vm // ELSE //u := data.x //v := data.y //um := data.z //vm := data.w //ud2 := Laplace filter UM (| | // | | // | | //u := u + vm * deltat; //v := u + sqrc * ud2 * deltat //out := u,v void main(void){ outColor = vec4(0.0); } iteration2.frag

Próba

Verlet integrálás //TODO // // Verlet integration // // renderTarget := WE_computeBuffer[(inputBuffer + 1) % 2] // inputMap := WE_computeBuffer[inputBuffer]->getColorBuffer(0), //textureUnit := 0 // WE_iteration_1 // inputBuffer := (inputBuffer + 1) % 2; // // renderTarget := screen // inputMap := WE_computeBuffer[inputBuffer]->getColorBuffer(0), //textureUnit := 0 // WE_visualize void waveEquation3() { }

// TODO // // data := texelFetch(inputMap, ivec2(gl_FragCoord), 0) // u := data.x // u0 := data.x // v := data.y // v0 := data.y // ud2 := Laplace filter U0 (| | // | | // | | // a := sqrc * ud2 / deltax^2 // u := u0 + v * deltat + a / 2.0 * deltat^2 // v := (1.0 - sigma * deltat) * v0 + a * deltat // // ud2 := Laplace filter U (| | // | | // | | // a := sqrc * ud2 / deltax^2; // u := u0 + v * deltat + a / 2.0 * deltat^2; // v := (1.0 - sigma * deltat) * v0 + a * deltat; // out := u,v void main(void){ outColor = vec4(0.0); } iteration3.frag

Próba

VÉGE