1 / 34

Post-Processing

Post-Processing. SET09115 Intro Graphics Programming. Breakdown. Background Review – shading and texturing What is post-processing? Working with Post-Processing Greyscale shader Working with OpenGL Example Post-Processes Gaussian blur, motion blur, depth of field. Recommended Reading.

jemima
Télécharger la présentation

Post-Processing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Post-Processing SET09115 Intro Graphics Programming

  2. Breakdown • Background • Review – shading and texturing • What is post-processing? • Working with Post-Processing • Greyscale shader • Working with OpenGL • Example Post-Processes • Gaussian blur, motion blur, depth of field

  3. Recommended Reading • Course Text • Chapter 8, section 8.11 onwards • Real Time Rendering • Chapter 10 • All interesting • 10.9 onwards relevant

  4. Background

  5. Review – What are Shaders? • Shaders are small programs that run on the GPU • Shaders allow us to implement effects that we may wish for in our rendered scene • Lighting, texturing being the most basic • Three types of shader • Vertex • Geometry • Fragment (or pixel)

  6. Review – Shading Pipeline • Vertex data goes in at the start • Final rendered image comes out at the end • It is possible to get data from the pipeline without displaying anything • Stream output (geometry stage) • Render to texture (rasterization stage)

  7. Review – What is Texturing? • Texturing is the process of attaching images to geometric objects • Texturing can be used to provide more realistic detail than colour and lighting alone

  8. Review – How Texturing Works • Texturing requires two pieces of information • The texture to be used • The texture coordinates for each vertex of the model • The texture coordinates are used to determine parts of the image to attach to individual pieces of geometry • Sort of a mixture between wrapping paper and cutting out and gluing

  9. What do we mean by Post-Processing? • Post-processing is any rendering technique we apply after the main object render • Pixel shader • Post-processing covers a wide range of techniques • Depth of field, toon shading, motion blur, etc.

  10. How does Post-Processing Work? • Post-processing typically utilises two techniques we have covered • Shaders • Textures • Instead of rendering to the screen, we render to a texture • We take this texture, render it to the whole screen, and use a post-process shader on it to manipulate it • Render to texture  Render texture to screen • We can also render the texture to texture again • Multi pass post-processing

  11. OpenGL Frame Buffer Objects • OpenGL uses a technique called frame buffer objects to get textures from the GPU • Three stage process • Create an empty texture • Create a frame buffer object • Attach texture to frame buffer object • We can then use the frame buffer object at any time • Bind it to enable render to the texture • Unbind to enable render to the screen

  12. Example Post Process • Call of Duty: Modern Warfare 2 • Motion Blur [Link]

  13. Questions?

  14. Working with Post-Processing

  15. Simple Example • We are going to render a scene, but we want it to be in greyscale • Surprisingly, getting the greyscale for a render can be useful • The general formula for getting a greyscale of a pixel is to get the colour intensity (how the eye interprets each colour value • We can use this intensity value as all three colour components

  16. GLSL Pixel Shader uniform sampler2D texture; in vec2 texCoord; out vec4 colour; void main( void ) { vec4 temp = texture2D(texture, texCoord); float I = 0.299 * temp.r+ 0.587 * temp.g+ 0.184 * temp.b; colour = vec4(I, I, I, 1.0); }

  17. Setting up OpenGL // Create a texture data = new GLubyte[800 * 600 * 3]; glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexImage2D(GL_TEXTURE_2D, 0, 3, 800, 600, 0, GL_RGB, GL_UNSIGNED_BYTE, data); // Create a framebuffer glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); // Attach texture glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

  18. Performing the Render • First bind the framebuffer • glBindFramebuffer(GL_FRAMEBUFFER, fbo); • Perform your render • Unbind the framebuffer • glBindFramebuffer(GL_FRAMEBUFFER, 0); • Bind the texture rendered to • glBindTexture(GL_TEXTURE_2D, texture) • Perform screen render

  19. Output

  20. Depth Buffer Objects • It is also possible to get the depth buffer from the render • Image data is greyscale based on distance from viewer • Darker pixels closer • Lighter pixels nearer • Why would we want this?

  21. Screen Space Ambient Occlusion • Using a depth buffer lets us perform fast ambient occlusion • Sample surrounding pixel depths • Use this to determine if pixel is being occluded by any of the pixels • First used in Crysis (2007)

  22. Questions?

  23. Example Post-Processes

  24. Gaussian Blur • Gaussian blur is a common technique used in graphics • Sometimes called Gaussian smoothing • The goal is to reduce noise in the image • See top • But this will also remove detail • See bottom

  25. How Gaussian Blur Works • Gaussian blur operates using a pixel sampling technique • Each pixel is effected by a number of surrounding pixels • Instead of sampling each surrounding pixel • 25 pixel reads • The blur is done in two stages • 10 pixel reads total

  26. Edge Detection • Edge detection allows us to detect the edges of an object • Essentially the change in colour between pixels • Edge detection is also done using a filter and pixel sampling approach

  27. Motion Blur • Motion blur is a technique that works by taking a number of existing frames • Texture renders • And then blending them together based on the pixel colour change • No change • In focus • Change • Blurred

  28. Depth of Field • Depth of field is a technique that enables objects out of focus to look blurred • Two techniques • Multiple camera positions • Depth buffer

  29. HDR • High Dynamic Range • HDR is a technique to allow a wider range in contrast between colours • Dark colours don’t turn so much to black with no detail • Light colours don’t turn so much to white with no detail

  30. Bloom • Bloom is the effect where light has a glow which effects the other objects around it • Typically an extension of HDR, where light is blended into the other objects

  31. Film Grain • A noise addition technique where we make the image look like it was recorded using old film • Can be useful when you want to use some pre-rendered cut-scenes

  32. Questions?

  33. To do this week… • Practical this week still in Games Lab • Shaders • You should investigate some post-processing techniques, and maybe try and implement them if you have time • We have only really scratched the surface • Hopefully, you have all started work on the coursework • I’ll come round and have a look on Thursday

  34. Summary • Post-processing is any rendering technique that we apply after the main render • We typically use two techniques • Texturing • Shading • We can implement post-processing by rendering the main scene to a texture, then manipulating the texture • Numerous techniques exist • Blurring, depth of field, toon shading, etc.

More Related