I started this project as my game engine project, but it became just my experiment. I don't update codes here anymore, because I start to work on my second library.
I started this project for my portfolio to get a job as game engine / graphics programmer. I studied the math, OpenGL, game physics and so on to make my own game engine. During this period, I implemented the basic graphics and physics parts of the game engine. This is the final scene I made with my engine :
Here is the editing gif of the scene :
you can see the video of this here.
While I was doing this project, I implemented these things:
Graphics
- The graphics engine is based on the deferred shading. All of objects in game world will be drawn by the technique.
- PostProcessing : HDR, Bloom, SSAO.
- Terrain Rendering with Perlin noise and height map (you can see the terrain rendering and physics
Light
- Editing light properties : Position, Direction, Ambient/Diffuse/Specular Color, Attenuation factors, light radius.
- The types of light : Directional, Point, and Spot light.
- Range Visualizer for each light type
- Shadow cast for each light type
- Editing the shadow frustum for each light type
Physics
- Most of physics theories and implementations are based on the "Game Physics Engine Development" Book. This book does not solve a jitter problem caused by its implementation. So it changed my research direction toward Box2D and BulletPhysics Library to learn a valid physics engine implementation. So, I studied the Erin Catto's GDC presentation for Sequential Impulse Constraint Solver and his implementation in my other repository. And the video about it is here.
- And other codes such as Broad Phase, DynamicAABBtree, Ray Picking are based on Box2D and BulletPhysics Library.
- Terrain Physics between terrain triangles and spheres.
I had stopped this project after I got the job as a game engine programmer. But I have an interest in the high quality rendering, especially using ray tracing. So, I got enough time at this period to study a little of the ray tracing. This is the simple scene I made with the ray tracing :
I Implemented these for this ray-traced scene :
- Rendering Equation : I'm using the Graphics Codex to learn the rendering equation. And I also refer to the sample code provided with the Graphics Codex in G3D Innovation Engine.
- Primitive Intersection : Sphere, Plane, Ray, Line Segment, Triangle. I referred to the RTCD to implement all of the intersections.
- Bounding Volume Hierarchy : In order to accelerate the ray intersection, I used the Dynamic AABB Tree, which I implemented by referring to the box2D code.
In addition to the above, I used the threads to accelerate the ray tracing by separating the pixels with some threads.
Because I'm using the Graphics Codex to improve my graphics ability, I am going to study BSDF, Path Tracing, Photon Mapping, and so on. Before going deeper on this, I realized that I don't have enough base knowledge on statistics. So I've decided to study it. After that, I can restart this ray tracing work.