gam532 dps932 – week 6
DESCRIPTION
GAM532 DPS932 – Week 6. Render Targets and Post Processing. The Back Buffer & Depth Buffer. Buffer Flipping. Frame Buffer. Render. Back Buffer. Depth Buffer. Buffer Description. Back Buffer. Depth Buffer. Type. 2D Texture. 2D Texture. 1440 x 900. 1440 x 900. Resolution. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/1.jpg)
GAM532DPS932 – Week 6Render Targets and Post Processing
![Page 2: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/2.jpg)
The Back Buffer & Depth Buffer
Frame Buffer
Back Buffer Depth Buffer
Render
Buffer Flipping
![Page 3: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/3.jpg)
Buffer Description
1440 x 900
Back Buffer Depth Buffer
2D Texture2D Texture1440 x 900
R8 G8 B8 A8 D24 S8Colors to be display on the monitor
Depth of each pixel for depth testing
TypeResolutionPixel Format
Purpose
![Page 4: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/4.jpg)
What is a Render Target?
Render
Back Buffer
Target Types
Depth Buffer
Color Target
Depth Target
Color Texture
Depth Texture
Target Objects
Bound To
Monitor
System Reserve
Shader Resource
Shader Resource
![Page 5: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/5.jpg)
How to use Render Targets
Color TargetPre-Render Camera
Main Camera
Material
Actor
Scene
2 Renders=
1 Frame
![Page 6: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/6.jpg)
Initializing Color Render Targets
//Create and initialize the textureglGenTextures(1, &textureID);glBindTexture(dim, textureID);glTexStorage2D(dim, 1, iFormat, width, height);
//Create the render target and bind it to the textureglGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,textureID, 0); //Unbind when done glBindTexture(dim, 0);glBindFramebuffer(GL_FRAMEBUFFER, 0);
//First, make a 2D texture we’ll use for the targetD3D11_TEXTURE2D_DESC desc;desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;desc.CPUAccessFlags = 0;desc.Format = //Texture formatdesc.MipLevels = 1;desc.MiscFlags = 0;desc.Usage = D3D11_USAGE_DEFAULT;//Fill in remainder of struct
dev->CreateTexture2D(&desc, 0, &tex2d);dev->CreateShaderResourceView(tex2d, 0, &texture);
//Make the render target and bind it to the textureD3D11_RENDER_TARGET_VIEW_DESC rDesc;rDesc.Format = desc.Format;rDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;rDesc.Texture2D.MipSlice = 0;
dev->CreateRenderTargetView(tex2d, &rDesc, &rend);
![Page 7: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/7.jpg)
Binding Color Render Targets
glBindFramebuffer(GL_FRAMEBUFFER, targetView);
//Clear before usingglClear(GL_COLOR_BUFFER_BIT);
//Indicate the buffer will output a colorGLenum drawBuffer[1] = {GL_COLOR_ATTACHMENT0};glDrawBuffers(1, drawBuffer);
//Adjust the view port to for the dimensions of//the new render target
glViewport(left, top, targetWidth, targetHeight);
//Clear before bindingcon->ClearRenderTargetView(targetView, D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f));
//Bind it as the system’s render targetcon->OMSetRenderTargets(1, &targetView, 0);
//Adjust the view port to for the dimensions of//the new render target
D3D11_VIEWPORT v; v.TopLeftX = left;v.TopLeftY = top;v.MinDepth = 0.0f;v.MaxDepth = 1.0f;v.Width = targetWidth;v.Height = targetHeight;
con->RSSetViewports(1, &v);
![Page 8: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/8.jpg)
Unbinding & Deleting Color Render Targets
//Unbind the color targetglBindFramebuffer(GL_FRAMEBUFFER, 0);
//don’t forget to reset the view ports!
//Delete the texture and color targetglDeleteFramebuffers(1, &framebuffer);glDeleteTextures(1, &textureID);
//To unbind a color target, rebind the system’s//back buffercon->OMSetRenderTargets(1, &backbuffer, 0);
//don’t forget to reset the view ports!
//Delete the texture and color targetrend->release();texture->release();
![Page 9: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/9.jpg)
Target Depth Binding DX vs GL
Color Texture
Color Target Depth Target
Depth Texture
DX Context
Color Texture
Color Target(glFramebuffe
r)
Depth Buffer
Depth Texture
GL Context
![Page 10: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/10.jpg)
Initializing Depth Render Targets
glGenTextures(1, &textureID);glBindTexture(dim, textureID);glTexStorage2D(dim, 1, iFormat, width, height);
glGenRenderbuffers(1, &depthBuffer);glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);glRenderbufferStorage(GL_RENDERBUFFER, iFormat, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);glBindTexture(dim, 0);
D3D11_TEXTURE2D_DESC desc;desc.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE;desc.Format = DXGI_FORMAT_R32_TYPELESS;//fill in rest of struct
dev->CreateTexture2D(&desc, 0, &tex2d);
D3D11_SHADER_RESOURCE_VIEW_DESC desc2;desc2.ViewDimension= D3D11_SRV_DIMENSION_TEXTURE2D;desc2.Format = textureFormat;//single channel//fill in rest of struct
dev->CreateShaderResourceView(tex2d, &desc2, &texture);
D3D11_DEPTH_STENCIL_VIEW_DESC descDSV;descDSV.Format = depthFormat;descDSV.ViewDimension=D3D11_DSV_DIMENSION_TEXTURE2D;//fill in rest of struct
dev->CreateDepthStencilView(tex2d,&descDSV,&dsv);
![Page 11: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/11.jpg)
Binding Depth Render Targets
//Bind the buffer to the color targetglFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthTarget);
//Bind the texture to the color targetglFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTexture, 0);
//Clear before usingglClear(GL_DEPTH_BUFFER_BIT);
//Since color and depth targets should match in//when bound together, viewport is only set once
//Clear before bindingcon->ClearDepthStencilView(depthTarget, D3D11_CLEAR_DEPTH, 1.0f, 0);
//Bind it as the system’s render target//(also binds the render target)con->OMSetRenderTargets(1, colorTarget, depthTarget);
//Since color and depth targets should match in//when bound together, viewport is only set once
![Page 12: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/12.jpg)
Unbinding & Deleting Color Render Targets
//Unbind the depth target/texture from color targetglFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, 0, 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0);
//Delete the texture and color targetglDeleteRenderbuffers(1, &depthBuffer);glDeleteTextures(1, &textureID);
//To unbind a depth target, set it to zero//Alternative, set it back to the system’s buffercon->OMSetRenderTargets(1, &backbuffer, depthbuffer);
//Delete the texture and color targetdsv->release();texture->release();
![Page 13: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/13.jpg)
Uses of Render Targets
Dynamic Mirrors Post Processing Effects Shadows
![Page 14: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/14.jpg)
Setting Up Dynamically Rear View
Main CameraRear View
![Page 15: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/15.jpg)
Setting Up a Dynamic Mirror
Main Camera
Mirror Camera
Actors
![Page 16: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/16.jpg)
Fragment Isolation
Fragments Processed Concurrently
Limited Scope, no adjacency data
GlowMotion Blur
Following effects are difficult:
![Page 17: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/17.jpg)
Post Processing
Color TargetRender Camera
Post Processing Camera
Screen Space Quad (100%)
Back Buffer
1 Fragment
Can sample from
Any number of Texels
![Page 18: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/18.jpg)
Basic Post Processing Effects
![Page 19: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/19.jpg)
Storing Post Processing Data
Color for Frame BufferRed Green Blue Alpha
Often unused
Red Green Blue Luminosity
Color for Color Target (Post Processing)
Make use of unused variables to store data for post
processing
Alternatively…Hiding Data in Color
1st Color Target 2nd Color Target
Use the 2nd color target to store post processing data which you use to manipulate
the colors in the 1st
![Page 20: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/20.jpg)
Post Processing Effects
God Rays
Screen Distortion Motion Blur
![Page 21: GAM532 DPS932 – Week 6](https://reader035.vdocuments.site/reader035/viewer/2022062410/568164aa550346895dd6a6cb/html5/thumbnails/21.jpg)
To Do• Read over Lab 5• Finish Proposal Documents and Prepare to Submit• Research your engine enhancement