Rendering pipeline Ogre3D

Slides:



Advertisements
Hasonló előadás
OpenGL 2. gyakorlat Hapák József
Advertisements

2D képszintézis Szirmay-Kalos László.
2D grafikus rendszerek Szirmay-Kalos László. 2D grafikus editor: GUI, use-case, dinamikus modell L L L R LD LU MouseLDown első pont MouseLDown második...
Inkrementális 3D képszintézis
GPU Szirmay-Kalos László.
Inkrementális 3D képszintézis Szirmay-Kalos László.
OpenGL Szirmay-Kalos László In theory, there is no difference
Számítógépes grafika Szirmay-Kalos László
Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László.
Számítógépes grafika Szirmay-Kalos László
3D képszintézis fizikai alapmodellje
Bevezetés.  A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja  Teljesítménykövetelmények:  Animáció: néhány nsec.
Grafikus játékok fejlesztése Szécsi László g11-physics
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.
Grafikus Rendszerek Zsitnyánszki Zoltán.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, D képszintézis 4. előadás.
A számítógépes grafika céljai és feladatai
Mérnöki objektumok leírása és elemzése virtuális terekben c. tantárgy Budapesti Műszaki Főiskola Neumann János Informatikai Kar Intelligens Mérnöki Rendszerek.
Szűrés és konvolúció Vámossy Zoltán 2004
2D képszintézis és textúrák
Számítógépes grafika 3. gyakorlat.
Számítógépes Grafika Programtervező informatikus (esti)‏ Textúrázás.
2008/2009 tavasz Klár Gergely  Gyakorlatok időpontjai: ◦ Szerda 10:05–11:35 ◦ Csütörtök 10:00+ε –11:30+ε  Gyakvez: ◦ Klár Gergely ◦
A program a „Tudáshasznosulást, tudástranszfert segítő eszköz-, és feltételrendszer kialakítása, fejlesztése a Műegyetemen” (TÁMOP /1/KMR )
Pixel műveletek, képek Szirmay-Kalos László.
Vektorok különbsége e-x = [ex-xx ey-xy ez-xz] e e-x x szempozíció
2D képszintézis Szirmay-Kalos László.
Inkrementális 3D képszintézis Szirmay-Kalos László.
Számítógépes grafika Bevezetés
2D grafikus rendszerek Szirmay-Kalos László.
Textúrák Grafikus játékok fejlesztése Szécsi László g07-texture.
Plakátok, részecskerendszerek Grafikus játékok fejlesztése Szécsi László g09-billboard.
Többmenetes renderelés Grafikus játékok fejlesztése Szécsi László g11-multipass.
Grafikus játékok fejlesztése Szécsi László t09-texture
Rekurzív algoritmusok
 Kvantált kép fényesség értékei: G [ 0, Gmax ]  G fényességű pontok száma: P(G)
Inkrementális 3D képszintézis
Árnyalás – a felületi pontok színe A tárgyak felületi pontjainak színezése A fényviszonyok szerint.
Pipeline Vertex shader Fragment shader. Transzformációs modul A modellünket a saját koordinátarendszerében adjuk meg Azonban a saját koordinátarendszerükben.
GPU ELTE IK Számítógépes Grafika II. Jeni László Attila
OpenGL 4 shaderek, GLSL Valasek Gábor
GPGPU A grafikus hardver általános célú felhasználása
Jeni László Attila Klár Gergely
Web-grafika II (SVG) 9. gyakorlat Kereszty Gábor.
Árnyalás – a felületi pontok színe A tárgyak felületi pontjainak színezése A fényviszonyok szerint.
Bevezetés a számítógépi grafikába 2. Paraméteres görbék Paraméteres görbe: 2D-ben: paraméter: általában: kikötések: legyen folytonos legyen folytonosan.
Informatikai eszközök a virtuális valóság szolgálatában Hapák József ELTE-IK X. Eötvös Konferencia.
4. A grafikus szerelőszalag - áttekintés 4.0. Bevezetés.
Számítógépes grafika gyakorlat: DirectX 2007/2008 tavasz Klár Gergely
Számítógépes Grafika OpenGL 4 shaderek, GLSL. OpenGL 4 A következő programozható fázisok vannak a 4.x-es OpenGL-ben: Vertex shader Tesselation control.
A számítógépes grafika alapjai, PPKE-ITK, Benedek Csaba, 2010 Tanagyag forrás © Szirmay-Kalos László, BME A számítógépes grafika céljai és feladatai 1.
Képek, képfeldolgozás Szirmay-Kalos László.
Anyagok, megvilágítás. Rendering egyenlet I(x,  )=I e (x,  )+   I(h(x,-  ’ ,  ’) f r (  ’,x,  ) cos  ’d  ’
Bevezetés.  Miért …  … egyszálúan programozunk?  … probléma ez?  Hogyan …  … változik ez?  … tudjuk kihasználni?  Megéri-e párhuzamosítani?
3D grafika összefoglalás
Framebuffer.
Lighting III.
A grafikus hardware programozása
OpenGL 2. gyakorlat Valasek Gábor
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
Vizualizáció és képszintézis
Szécsi László 3D Grafikus Rendszerek 14. előadás
OpenGL IV.
Átlátszóság, csipkézettség, köd
Vizualizáció és képszintézis
GPGPU – CUDA 2..
OpenGL II.
Bevezetés GPGPU Alkalmazások.
Environment mapping Szécsi László
Előadás másolata:

Rendering pipeline Ogre3D

vertex data, instance data RESOURCES PIPELINE STAGES RENDER STATES Vertex buffer Input Assembler I. input streaming Input layout Instance buffer vertex data, instance data Shader program Constant buffers and textures Vertex Shader Uniform parameters processed vertex data Input Assembler II. primitive setup Index buffer Primitive type primitive data Constant buffers and textures Shader program Geometry Shader Uniform parameters Output buffer primitive strip data Cull mode Rasterizer face culling depth bias adjustment clipping homogenous division viewport transformation output filtering Depth bias Viewport Fill mode Filtering fragments with interpolated data Constant buffers and textures Fragment Shader Shader program Uniform parameters fragment color and depth Render target textures Render target textures Render target textures Output merger stencil test depth test blending Depth-stencil state Blending state Depth-stencil texture

Lépések I. vertexek összeállítása Vertex Shader model trafó árnyalás view és proj trafó primitívek összeállítása Geometry Shader [csak DX10] extra geometria előállítása

Lépések II. raszterizálás Pixel shader z-teszt blending hátsólap-eldobás vágás homogén osztás viewport trafó Pixel shader pixel szín meghatározása z-teszt blending

Vertexek összeállítása Vertex buffer rekordok tömbje pos normal tex pos normal tex pos normal tex vertex

Vertex shader bejövő adat kimenő adat uniform: model, view, proj mátrixok, fények, ... minden vertexre más: [pozíció, normál, szín, texcoord] kimenő adat pozíció homogén normalizált képernyő koordinátákban árnyalás eredménye [szín] bármi más [normál, texcoord]

Primitívek összeállítása non-indexed vertex bufferben egymás után következők triangle list triangle strip 1 2 3 4 5 6 1 2 3 4 5 2 5 2 4 1 3 4 6 1 5 3 2 triangle fan 1 3 1 2 3 4 5 5 4

Lapeldobás körüljárási irány (képernyőn) alapján eldobhatunk lapokat ha a modellünkben (index bufferben) konzisztens a háromszögek körüljárási iránya, ezzel eldobhatjuk a test hátsó lapjait a belsejét úgysem látjuk, ha poliéder

Vágás ami kilógna a képernyőről, vágjuk le normalizált képernyőkoordinátákban [-1, -1, 0] [1, 1, 1] téglatestre vágunk [Descartes] Átfordulási probléma a homogén osztás előtt kell vágni

Raszterizáció homogén osztás viewport trafó: pixel koordináták lineáris interpoláció vertex output adatok (kivéve pozíció) interpolálása minden kitöltendő pixelhez pixel shader indítása minden pixelszín meghatározásához

Pixel shader bejövő adat kimenő adat vertex shader kimenő adatai lineárisan interpolálva pixel koordináták kimenő adat pixel szín [RGBA] mélység, ha felül akarjuk írni a háromszög csúcsainak z-jéből interpolált eredetit ha nem, akkor a z-teszt előrehozható a pixel shader elé

Kimeneti műveletek bufferek műveletek célterület: frame buffer vagy textúra mélység-stencil buffer műveletek mélység teszt stencil teszt keverés [alfa blending]

Z-teszt a 3D takarási probléma megoldására 2. 1. 3.  1325 628 628 3325

Stencil teszt a stencil buffer a z-buffer pár használatlan bitje beállítódik valamire, ha a pixelbe rajzoltunk valamit később feltételként szabhatjuk a pixel felülírására a stencil buffer értéket pl. kirajzoljuk a tükör téglalapját, utána a tökörben látható objektumokat csak a tükör pixeleire rajzoljuk

Keverés A célterületen már meglevő érték [dest] és az újonnan számított szín [src] kombinálása mindkettőhöz megadható egy súly (0, 1, srcalpha, dstalpha, 1-alpha ...) megadható a függvény (add, subtract, min, max ...) átlátszóság: hátulról előre rajzolás + blending src * srcalpha + dst * (1- srcalpha)

Grafikus kártyák Interfész Transzformáció+ Vertex Illumináció Shader Fragment Transzformáció+ Illumináció Geometry Shader Vágás + Nézeti transzf + Raszterizáció + interpoláció Textúrázás Textúra memória Kompozitálás (Z-buffer, átlátszóság) Buffers: szín, z, stencil, …

Vertex shader és környezete glBegin(GL_TRIANGLES) glVertex glNormal glColor glTextCoord glEnd( ) POSITION, NORMAL, COLOR0, TEXTCOORD0,… Állapot Transzformációk Fényforrások Anyagok *MV *MVIT Vertex shader *MVP Illumináció POSITION, COLOR0, TEXTCOORD0,… háromszögre Geometry shader Vágás: -w<X<w, -w<Y<w, -w<Z<w, 0<color<1 Homogén osztás: X=X/w, Y=Y/w, Z=Z/w + nézet transzformáció

“Standard” vertex shader (Cg) void main( in float4 position : POSITION, in float3 normal : NORMAL, in float4 color : COLOR0, in float2 texcoord : TEXCOORD0, uniform float4x4 modelviewproj: state.matrix.mvp, out float4 hposition : POSITION, out float4 ocolor : COLOR0, out float2 otexcoord : TEXCOORD0 ) { hposition = mul(modelviewproj, position); otexcoord = texcoord; ocolor = color; } glDisable(GL_LIGHTING );

Lineáris interpoláció X I(X,Y) Lineáris interpoláció X számláló I regiszter CLK S a (X2,Y2,I2) I I(X,Y) = aX + bY + c (X1,Y1,I1) Y (X3,Y3,I3) I(X,Y) X I(X+1,Y) = I(X,Y) + a

“Standard” pixel shader float4 main( in float4 color : COLOR0) : COLOR { return color; } in float2 texcoord : TEXCOORD0, in float3 color : COLOR0, uniform sampler2D texture_map ) : COLOR float4 pcolor = text2D(texture_map, texcoord); return pcolor; glDisable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

Gouraud árnyalás Illumination CPU program Pixel shader Vertex shader Rasterization Interpolation Position Normal Transformations Materials Lights Interpolated color Transf.position Color

Phong árnyalás Illumination CPU program Pixel shader Vertex shader Rasterization Interpolation Position Normal Transformations Light position Transf.position Transf.normal View Light Interpolated Normal View Light Materials Light intensity

Ogre3D

Object-Oriented Graphics Rendering Engine www.ogre3d.org Manual API reference SDK Demos Tools (exporter) Wiki Forum

Objektum orientált Fő külső interface-ek függetlenek: 3D API színtér típus Platform Könnyű bővíthetőség plugin Tervezési minták tudatos használata

Szolgáltatások Multi platform Különböző színtér gráf kezelők Erőforrás kezelő Saját objektum formátum Level of detail Skinning Morphing Material script rendszer (XML) Render state Textúrák (2D,3D,CUBE,animált) Shaderek Részecskerendszerek (script) Alapvető árnyékszámítási algoritmusok Render to texture Post processing keretrendszer Overlay keretrendszer

Vázlat OgreRoot root = new Root(…); root.loadPlugin("RenderSystem_Direct3D9"); RenderSystemList list = root.getAvailableRenderers(); root.setRenderSystem(list.at(0)); root.initialise(…); RenderWindow renderWindow = root.createRenderWindow(…); SceneManager sceneManager = root.createSceneManager(…); ResourceGroupManager.getSingleton().addResourceLocation(…); ResourceGroupManager.getSingleton().initialiseAllResourceGroups(); setupScene(); setupListeners(); root.startRendering(); //main loop ( root.renderOneFrame(); )

setupScene SceneNode rootSceneNode = sceneManager.getRootSceneNode(); camera = sceneManager.createCamera("Main Camera"); camera.setPosition(0, 10, 20); Viewport viewport = renderWindow.addViewport(camera,…); renderWindow.setActive(true); Entity entity = sceneManager.createEntity("cake", "zuh.mesh"); SceneNode cakeNode = rootSceneNode.createChildSceneNode(); cakeNode.attachObject(entity); cakeNode.setPosition(-3.5f, 0, 0);

setupListeners class MyFrameListener : public FrameListener { bool frameStarted(const FrameEvent& evt) … } }; setupListeners() MyFrameListener* mFrameListener= new MyFrameListener(); OgreRoot::getSingleton().addFrameListener(mFrameListener);

Material script (.material) material PacmanFace { receive_shadows off technique main pass main lighting on ambient 1 0.9 0.8 1 diffuse 1 1 1 1 specular 1 1 1 25.6 emissive 0 0 0 texture_unit color texture PMFaceBase.jpg tex_coord_set 0 colour_op modulate scale 1 1 scroll 0 0 rotate 0 }

Öröklődés material PacmanFaceHappy : PacmanFace { technique main pass main texture_unit color texture PMFaceHappy.jpg }

Shader program definíciók (.program) vertex_program ToonVS hlsl { source ToonShader.hlsl entry_point vs target vs_2_0 } fragment_program ToonPS hlsl entry_point ps target ps_2_0

material Toon { receive_shadows off technique main pass earlyZ colour_write off lighting off vertex_program_ref ToonVSEx param_named_auto ModelViewProj worldviewproj_matrix param_named_auto ModelView worldview_matrix param_named_auto Model world_matrix param_named_auto ModelViewIT inverse_transpose_worldview_matrix } pass main scene_blend alpha_blend vertex_program_ref ToonVS fragment_program_ref ToonPS param_named alpha float 1 texture_unit color_ramp tex_address_mode clamp

Vége