Game Programming Journey Monthly – July 2019

Progress

  • Zooid Engine: Implemented working SSAO (Screen-space Ambient Occlusion) in Deferred Rendering.
  • Zooid Engine: Optimize GBuffer texture memory usages, set proper texture format for each GBuffer output.
  • Zooid Engine: Implemented culling for spotlight and point light. If the light being culled, it will be excluded from scene lighting calculation in the scene and the shadow map will not be generated as well for that light.
SSAO result after being blurred to be used in rendering the scene. It only uses one channel (red channel). It will show how much the pixel is being occluded. On the left, the model is rendered using a Normal map. On the right, the model is rendered without a normal map – using the triangle normal.

I created a simple diagram to show how the Zooid Engine’s Deferred Render Graph works. It shows all render passes with the outputs of each passes. The orange part in the diagram is SSAO that I implemented this month.

  • ZooRayTracer: Implemented the triangle and mesh.
  • ZooRayTracer: Support mesh file reading using Assimp.

ZooRaytracer is a ray tracing implementation that I’ve been working one. It’s an extension of Peter Shirley’s mini books implementation that I finished last month.

Low-poly Stanford’s Bunny

Learning/Tutorial

  • (Tutorial) DirectX 11 from Rastertek.com: Finished frustum culling tutorial. (see here). From this tutorial, I found a way to extract view frustum planes from World-View-Projection matrix. Later, I found a paper that explains how to get the planes from the matrix.
  • (Tutorial) LearnOpenGL (learnOpenGL.com): Finished PBR IBL (Image Based Lighting) on Specular term. (see here).
  • (Book) Real-Time Rendering Third Edition: Chapter 8 – Area and Environmental Lighting. In this chapter, I learned that the environment can affect lighting calculation. It mentions several techniques to do that. As I learned from LearnOpenGL.com on PBR IBL (which cover generation irradiance map and reflection map from an existing environment texture), this chapter covers more details and other techniques to implement, especially the one with Real-Time generation of irradiance map and reflection map from the actual scene. Things that I got interested in this chapter are parabolic mapping technique and spherical harmonic irradiance. There are some papers those claimed they are can be used for real-time generation of irradiance map and reflection map. Those papers are on my next read-list.
  • (Article) ShaderX 7, “Light-Indexed Deferred Rendering” by Damian Trebilco. This is such interesting reading. I was working on deferred rendering on Zooid, I looked up some optimization on it. I “bumped” into this article. I really consider implementing this on my engine. Quick explanation: the writer recommends to calculate a pixel lighting on the lights that only affecting that pixel which is making sense since I involved all lights in calculating one pixel and using a blend to have multiple passes on calculating the lights. I’m sure my engine will break if it has a lot of lights, tho it’s deferred rendering but it’s very limited.
  • (Paper) “Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix”, by Gil Gribb and Klaus Hartmann. As I mentioned in the Rastertek tutorial, this is the paper that I found explaining the plane equations for view frustum from a projection matrix.

Leave a Reply

Your email address will not be published. Required fields are marked *