Course project for the Rendering course (Computer Science 591 at the University of Calgary) I took in winter 2019 and where I implemented ray tracing that made use of Nvidia’s RTX hardware through the Vulkan API.
Source code is self-hosted on my home Git-Gogs server which is only accessible from my home network.
Project Summary
Objective
Learn the Vulkan basics and implement ray tracing that is accelerated by Nvidia’s RTX hardware.
Justification
- Just seemed like the coolest project idea I could think of that didn’t necessarily require a load of math.
- It was a massive learning opportunity!
- Went in not knowing Vulkan, came out at least knowing the basics.
- This also translated to a better understanding of OpenGL and graphics APIs in general.
- Learned how to implement RTX.
- Got to experiment with RTX before it was supported by everything.
- Self-justification…
- I bought a RTX2080 very shortly after launch and had to somehow justify the early adopter fee.
Features
- Normal Vulkan rasterization with z-fighting.
- This wasn’t the main objective so I didn’t care enough to fix it.
- Ray tracing using RTX in Vulkan.
- Unfortunately only got direct lighting and simple shadows implemented.
- Expected window options supported like resizing or minimizing the window are supported.
- Can switch between rasterized and ray traced views.
- User specified camera movement with the ability to unlock the mouse so you can take screenshots or resize the window.
Challenges
- Learning Vulkan and how to implement RTX at the same time.
Screenshots
Ray Tracing
Final version
WIP renders
Rasterization
Videos
Ray Tracing
Rasterization
Credits
Vulkan Resources
- Alexander Overvoorde’s Vulkan-Tutorial.
- Sascha Willems’s Vulkan Examples and Demos.
- Vulkan API and Documentation.
RTX Resources
- Martin-Karl Lefrançois and Pascal Gautron’s Vulkan RTX Tutorial on Nvidia’s blog.
- Sergii Kudlai’s Vulkan RTX Tutorial.
General Credits
- The event system, logger, and window startup are all based on early versions of Yan Chernikov’s Hazel game engine since I was following his game engine series around the time of this project.