+ All Categories
Home > Documents > GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers...

GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers...

Date post: 14-Dec-2015
Category:
Upload: monica-beeby
View: 233 times
Download: 4 times
Share this document with a friend
19
GAM531 DPS931 – Week 11 Render State
Transcript
Page 1: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

GAM531DPS931 – Week 11Render State

Page 2: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

The Render State

Render State

Buffers Shaders Samplers

Rasterizer State

Blend State

Page 3: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

The Render Process

Clear Buffer

Update Graphic Context

(per object)

Draw Object (per object)

Merge Output With Buffer (per

object)

Flip Back Buffer

Send object’s position, camera’s projection etc to the graphics

card

Transform 3D object representations into

2D textures

Combine the 2D output with the back buffer / render target

Context Shader Blend State

Page 4: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

What The Blend State Does

Blending On

Blending Off

Page 5: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

Color Model

Unsigned CharMin: 0Max: 255

Float

Min: 0.0Max: 1.0

Non-Alpha Color

Red | Green | Blue

Alpha Color

Red | Green | Blue | Alpha

[255,0,0]

[0,50,0] [255,0,255]

[255,255,255]

[0,0,0]

[1.0,0,0,1.0]

[0.5,0.5,0,1.0]

[1.0,1.0,0,0.5]

[0,0,0,0.5]

Page 6: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

Blending Parameters

Operation Sources Factors(Source vs Destination)

Add (D = S + D)

Subtract (D = S – D)Reverse Subtract (D = D – S)Min (D = S < D ? S : D)Max (D = S > D ? S : D)

Const Zero

Const One

Source Color

Inverse Source Color

Destination Color

Inverse Destination Color

Page 7: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

The Blend StateBlend State

Color Operation

Source Color

Destination Color

Alpha Operation

Source Alpha

Destination Alpha

ColorOperation: AddSource: OneDest: One

AlphaOperation: AddSource: OneDest: Zero

[255,0,0,255]

[0,255,0,255]

+ =

Page 8: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

Programming Blend State

_glBlend t;

t.index = rt; //The render targett.enableFunc = //proxy function (Emperor code)t.blendOp = //Blend operationt.blendOpAlpha = //Blend operationt.destBlend = //Destination Colort.destBlendAlpha = //Destination Alphat.srcBlend = //Source Colort.srcBlendAlpha = //Source Alpha

//Nothing to be created, the device will be set with this struct

D3D11_BLEND_DESC bsd;ZeroMemory(&bsd, sizeof(D3D11_BLEND_DESC));

bsd.RenderTarget[rt].BlendEnable = //true or falsebsd.RenderTarget[rt].BlendOp = //Blend operationbsd.RenderTarget[rt].BlendOpAlpha = //Blend operationbsd.RenderTarget[rt].DestBlend = //Destination colorbsd.RenderTarget[rt].DestBlendAlpha = //Dest alphabsd.RenderTarget[rt].RenderTargetWriteMask = 0x0f;bsd.RenderTarget[rt].SrcBlend = //Source Colorbsd.RenderTarget[rt].SrcBlendAlpha = //Source Alpha

bsd.IndependentBlendEnable = //true or falsebsd.AlphaToCoverageEnable = //true or false

dev->CreateBlendState(&bsd, &bs));

Page 9: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

Binding Blend State

t->enableFunc(t->index);glBlendEquationSeparatei(t->index, t->blendOp, t->blendOpAlpha);glBlendFuncSeparatei(in, t->srcBlend, t->destBlend, t->srcBlendAlpha, t->destBlendAlpha);

//enable function activates one of two functionsglEnablei(GL_BLEND, index); //if enabled is true//orglDisablei(GL_BLEND, index); //if enabled is false

con->OMSetBlendState(bs, Vector4(0,0,0,0).data, 0xffffffff); //blend state, blend factor, sample mask

Page 10: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

The Render Process

Clear Buffer

Update Graphic Context

(per object)

Draw Object (per object)

Merge Output With Buffer (per

object)

Flip Back Buffer

Send object’s position, camera’s projection etc to the graphics

card

Transform 3D object representations into

2D textures

Combine the 2D output with the back buffer / render target

Context Shader Blend State

Page 11: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

The Shader Pipeline

Vertex Processing

Primitive Assembly / Processing

Rasterization

Fragment Processing Pixel Output

Creates 2D primitives (triangles, lines,

points) from transformed vertices

Divides 2D primitives into many pixel sized

fragments

Processes each fragment and returns a color to be displayed on the render

targetPrimitive Assembler / Geometry Shader

Rasterizer State Fragment Shader

Tranforms Vertices into homogenous clip

space (and other processing)

Vertex Shader

Page 12: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

What Does The Rasterizer Do?

One Primitive Many

Fragments

Page 13: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

Rasterizer Parameters

Face Culling

Vs

None

Back Face

Winding Order

Front

Vs

Front

Fill Mode

Vs

Solid

Wireframe

Anti-Aliasing

Vs

Page 14: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

Depth Processing

Z Fighting

New Fragment Depth ~= Old Fragment Depth

0.100001111121 ~= 0.100001111111

Floating point precision will cause inconsistent state

if( oldDepth >= newDepth) OverwriteFragment();

Depth Bias

if(oldDepth >= newDepth + DepthBias ) OverwriteFragment();

Page 15: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

Programming Rasterizer State

//No creation code for GL, only Emperor specific code//See binding

D3D11_RASTERIZER_DESC d;

d.AntialiasedLineEnable = //true or falsed.CullMode = //face cull mode, none, front, or backd.DepthBias = //The depth biasd.DepthBiasClamp = //The maximum depth biasd.DepthClipEnable = //true or false, clips far planed.FillMode = //wireframe or solidd.FrontCounterClockwise = //true or false, wind orderd.MultisampleEnable = //true or false, anti-aliasingd.ScissorEnable = //true or false, scissor cullingd.SlopeScaledDepthBias = //sloped depth bias

dev->CreateRasterizerState(&d, &rasterState);

Page 16: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

Binding Rasterizer State

aaLine(GL_LINE_SMOOTH);cullFace(GL_CULL_FACE);glCullFace(cullDir);glPolygonOffset(depthClamp, (GLfloat)depthBias);glPolygonMode(GL_FRONT_AND_BACK, fillMode);glFrontFace(windOrder);multiSample(GL_MULTISAMPLE);scissorTest(GL_SCISSOR_TEST);depthClip(GL_DEPTH_CLAMP);

//Anything not starting with gl is a function pointer//to eitherglEnable(a);//orglDisable(a);

con->RSSetState(rasterState);

Page 17: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

The Render Process

Clear Buffer

Update Graphic Context

(per object)

Draw Object (per object)

Merge Output With Buffer (per

object)

Flip Back Buffer

Send object’s position, camera’s projection etc to the graphics

card

Transform 3D object representations into

2D textures

Combine the 2D output with the back buffer / render target

Context Shader Blend State

Page 18: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

The Shader Pipeline

Vertex Processing

Primitive Assembly / Processing

Rasterization

Fragment Process Pixel Output

Creates 2D primitives (triangles, lines,

points) from transformed vertices

Divides 2D primitives into many pixel sized

fragments

Processes each fragment and returns a color to be displayed on the render

targetPrimitive Assembler / Geometry Shader

Rasterizer State Fragment Shader

Tranforms Vertices into homogenous clip

space (and other processing)

Vertex Shader

Page 19: GAM531 DPS931 – Week 11 Render State. The Render State Render State BuffersShadersSamplers Rasterizer State Blend State.

To Do• Continue work on engine enhancement

• Read this week’s lab

• Read this week’s notes

• Re-implement OpenGL Render State functions


Recommended