Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Rendering pipeline Ogre3D. Render target textures Input Assembler I. input streaming Vertex Shader Geometry Shader Vertex buffer Instance buffer Index.

Hasonló előadás


Az előadások a következő témára: "Rendering pipeline Ogre3D. Render target textures Input Assembler I. input streaming Vertex Shader Geometry Shader Vertex buffer Instance buffer Index."— Előadás másolata:

1 Rendering pipeline Ogre3D

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

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

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

5 Vertexek összeállítása Vertex buffer Vertex buffer rekordok tömbjerekordok tömbje posnormaltexposnormaltexposnormaltex vertex

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

7 Primitívek összeállítása non-indexed non-indexed vertex bufferben egymás után következőkvertex bufferben egymás után következők triangle listtriangle strip triangle fan

8 Lapeldobás körüljárási irány (képernyőn) alapján eldobhatunk lapokat 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 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édera belsejét úgysem látjuk, ha poliéder

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

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

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

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

13 Z-teszt a 3D takarási probléma megoldására a 3D takarási probléma megoldására 

14 Stencil teszt a stencil buffer a z-buffer pár használatlan bitje a stencil buffer a z-buffer pár használatlan bitje beállítódik valamire, ha a pixelbe rajzoltunk valamit 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 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 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

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

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

17 Vertex shader és környezete Vágás: -w

18 “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 );

19 Lineáris interpoláció X Y I I(X,Y) = aX + bY + c I(X,Y) I(X+1,Y) = I(X,Y) + a (X 1,Y 1,I 1 ) (X 2,Y 2,I 2 ) (X 3,Y 3,I 3 ) I(X,Y) X számlálóI regiszter a X  CLK

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

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

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

23 Ogre3D

24 Object-Oriented Graphics Rendering Engine ManualManual API referenceAPI reference SDKSDK DemosDemos Tools (exporter)Tools (exporter) WikiWiki ForumForum

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

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

27

28 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(); )

29 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);

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

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

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

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

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

35 Vége


Letölteni ppt "Rendering pipeline Ogre3D. Render target textures Input Assembler I. input streaming Vertex Shader Geometry Shader Vertex buffer Instance buffer Index."

Hasonló előadás


Google Hirdetések