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

Hasonló előadás


Az előadások a következő témára: "Rendering pipeline Ogre3D"— Előadás másolata:

1 Rendering pipeline Ogre3D

2 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

3 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

4 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

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

6 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]

7 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

8 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

9 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

10 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

11 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é

12 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]

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

14 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

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

16 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, …

17 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ó

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 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

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

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

22 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

23 Ogre3D

24 Object-Oriented Graphics Rendering Engine
Manual API reference SDK Demos Tools (exporter) Wiki Forum

25 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

26 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

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) } }; setupListeners() MyFrameListener* mFrameListener= new MyFrameListener(); OgreRoot::getSingleton().addFrameListener(mFrameListener);

31 Material script (.material)
material PacmanFace { receive_shadows off technique main pass main lighting on ambient diffuse specular 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 }

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 entry_point vs target vs_2_0 } fragment_program ToonPS hlsl entry_point ps target ps_2_0

34 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

35 Vége


Letölteni ppt "Rendering pipeline Ogre3D"

Hasonló előadás


Google Hirdetések