Aug 24 2012 10:46 AM
Overview In this IOTD I've implemented tons of post-processing effects. I still use the deferred renderer of the previous IOTD (http://www.gamedev.n...via-opencl-r233), and I still render 1024 point lights, however I've implemented directional lights and spot lights as well. The human figure that you can see in the middle is only used for showcasing purposes.
Motivation & other implementations I wanted to implement a full post processing pipeline similar to the one that can be found in Frostbite 2 or Cryengine 3. I ended up doing a better one, but I use the same DOF technique as in Frostbite 2 and the same deferred shading technique, but in OpenCL.
Implementation details The following effects were implemented: -normal mapping: just the regular normal mapping nothing fancy -parallax mapping: I also implemented the refinement pass (plus 1 texture fetch) -parallax occlusion mapping: I implemented Natalya Tatarchuk's technique (http://developer.amd...ketch-print.pdf), I didn't implement the soft shadows part though (I mean I did implement it, but I found it unnecessary), because SSDO will take care of that. -detail tessellation: this is the one that can be found in the DirectX SDK, however I implemented it in OpenGL, I still need to figure out how to do the density based optimization, because that part doesn't seem to work in OpenGL (or just needs more work!) -screen space directional occlusion: this is an improvement over the traditional SSAO algorithm. This produces colored soft contact "shadows", whereas SSAO gives a dull grayscale look to them. To add since it works on the normal vectors too, it produces soft contact shadows on the parallax occlusion mapped areas as well. I implemented the technique from GPU Pro (http://www.amazon.co...46695975&sr=8-1) -gamma correct high dynamic range rendering: I implemented the technique that can be found in Uncharted 2 (http://filmicgames.c...r-Lighting.pptx), I'm still working on the eye adoptation and blue shift system. -bloom: done with gaussian blur (http://rastergrid.co...inear-sampling/), 2 downsampling passes, 4 blurring passes, 1 combine pass (includes tonemapping), this still needs some tweaking though -motion blur: implemented it using velocity buffers (http://mynameismjp.w...on-blur-sample/) -subpixel morphological anti-aliasing, I use the ultra preset without the temporal technique (I found the ultra preset satisfactory) -color grading: this is not visible in the images, because I still need to hook this up to the UI (which is yet to be made), but it includes the following effects: brightness, contrast, hue, saturation, vibrance, vignette, and possibly curves, levels exposure and lightness later
About the performance the app ran on a AMD Radeon HD 5670 1GB GDDR3, and I could achieve 25 FPS. This means that I'm starting to get to the end of this graphics card in terms of performance. I still have some optimization options though. I also ran it on a HD 5770 1GB GDDR5 and it achieved 50 FPS, so the rendering pipeline still scales pretty well.