Overview
Roles |
Graphics programmer Gameplay programmer |
Duration | ~8 weeks |
Platform | Windows |
Engine | Custom engine template - Jacco Bikker |
Team size | Solo |
Tools & Technologies
Languages & APIs | C++ |
Tools | Visual studio, Very sleepy |
Workflow | Perforce |
Libraries | GLM, OpenMP |
Project Overview
This 2D Ray Tracer was developed as a course project at BUAS during Block C of Year 1. The entire rendering pipeline runs on the CPU using C++, modifying a continuous pixel buffer that gets displayed at the end of each frame. To demonstrate the dynamic lighting capabilities, I made a small snake spinoff on top of the engine.
Goals and motivations
- Explore fundamental ray-tracing concepts such as intersection checks, shadows, lighting.
- Gain experience on CPU based renderers while improving C++ skills.
- Get a basic understanding of optimization techniques in ray tracing
Biggest obstacles
- Grasping ray tracing concepts for the first time
- Optimizing such project to run on the CPU
Highlights
- Support for point lights & spotlights
- Soft shadows and hard shadows settings, with different level of graphics fidelity to choose from
- Ray tracing intersection against basic shapes: Box, Circles, Lines
- Various optimizations tricks
- Denoising with last frame information
- Temporal accumulation denoise
- Snake game to show off the rendering capabilities
Gameplay using this renderer
- Note: This gameplay is using the best settings in order to achieve ~60 FPS during gameplay in that scene on my laptop CPU
- AMD Ryzen 7 6800H