Game Programming Journey Monthly – September 2019

Progress

Zooid Engine

  • Imported Crytek Sponza to the engine format. I got the Crytek Sponza scene model from McGuire Computer Graphics Archive. I still need to implement a lot of stuff in this scene: better CSM, bump mapping, and anti-aliasing.
  • Improved the engine’s model parser. For the Sponza scene to be able to load in the engine, I needed to fix, modify, and add some features in the engine’s model parser.
    • There was an issue I encountered during the model parsing, mesh name issue. I used Assimp as a library to load the model. I realized the name for the mesh isn’t unique. So, when saving the result, it will override the previous mesh with a newer one.
    • Added support for scaling the model when importing.
    • Added support for creating a scene file. Assimp will break the model into several meshes. The Model Parser now will have an option to create a scene from the model file by combining all meshes into one big scene file.
    • Add support for importing material with mask texture.
  • Implemented mask texture. As in the Sponza scene, it has some materials that have mask texture (like, leaf and chain).
  • Added translucency pass. This pass happens after we have done with Lighting pass. Since the Deferred Rendering doesn’t fully support with any translucent object, this pass will use standard forward rendering: sort the object back to front, and render object one at a time with the light calculation.
Crytek Sponza in Zooid Engine

ZooRayTracer

  • Added JSON parser: read and write a JSON file as the scene file. Implemented this using RapidJSON. The way I did it is by iterating world object and save world objects (or “Hitable“) hierarchically to JSON format. And off course, saving the scene configurations too: camera and renderer configurations. It’s nice to modify the JSON file, without compiling the source code, if we want to make a small change to the scene. This implementation also can be extended to make some small editor: saving and loading might getting easier.

ZooidUI

  • Implemented Number Text Input.
  • Implemented Vector2. Vector3 and Vector4 input. This is just an extended version of Number Text Input. Instead of just one number input, it has 2, 3 or 4 number inputs.
Number input, vector2, vector3, and vector4 input in the bottom of a panel

Tutorials/Learnings

  • (Article) DOOM (2016) – Graphics Study by Andrian Courrèges. After I read the article about Graphics Study on Dues Ex: Human Revolution, I was getting interested in the same article type that he wrote for DOOM (2016). It’s fun to read this kind of article, broaden your knowledge about 3D graphics techniques, algorithms, and implementations. Now I’m interested in learning more about the implementation of Mega Texture, Depth of Field, Clustered Camera Frustum that used in DOOM. More on my reading list!!
  • (Presentation Slide) How to Read a Realistic Rendering Paper by Morgan McGuire for his course. This presentation outlines how to read a rendering paper. I will use this as a guideline to help me reading and implementing a rendering algorithm from its actual source (paper or article).
  • (Book) Real-Time Rendering Third Edition: Chapter 9 – Global Illumination (Shadows). This chapter is big. I only got a chance to finish one subchapter: Shadows. Plus, I’m a slow reader as if I’m confused, I will stop, re-read, and lookup for some of the references in the book.
  • (Tutorial) Still doing CUDA Tutorial series by Mark Harris (here). Right now, I’m in part explaining the Data Transfer mechanism and optimization between Host and Device.

Leave a Reply

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