Stack: C++
ShirleyTracer
ShirleyTracer is an archived C++ path tracer built while working through Peter Shirley, Trevor David Black, and Steve Hollasch’s Ray Tracing in One Weekend series.
It was my first substantial offline-rendering project after earlier work in real-time OpenGL rasterisation. The goal was not to design a production renderer, but to implement the sequence of ideas in the books directly enough that I could understand the mechanics of ray generation, scattering, recursive light transport, texture lookup, acceleration, volumetric media, and importance sampling from the ground up.
Indus
Indus is a multithreaded CPU path tracer that I am building from scratch in modern C++.
The project is my implementation-focused study of physically based rendering. I am mainly interested in building the machinery behind an image: sampling, light transport, BSDFs, cameras, reconstruction filters, acceleration structures, transforms, multithreaded scheduling, progressive display, and renderer instrumentation, and understanding how those pieces fit together.
Indus, at its core, is a learning and research project rather than a production renderer. Its design is strongly informed by Physically Based Rendering and Peter Shirley’s ray tracing books that I’ve spent time learning over the years, but the codebase is my own attempt to understand and assemble those ideas into a coherent engine.
C++23: From Beginning to Pro
Goal This repository contains exercises from my study of this fantastic book. The main aim was to learn and gain a more complete understanding of modern C++, after a generally fragmented journey with programming.
Book cover for Beginning C++ 23. Chapters Ch 1: Basic Ideas Ch 2: Introducing Fundamental Types of Data Ch 3: Working with Fundamental Data Types Ch 4: Making Decisions Ch 5: Arrays and Loops Ch 6: Pointers and References Ch 7: Working with Strings Ch 8: Defining Functions Ch 9: Vocabulary Types Ch 10: Function Templates Ch 11: Modules and Namespaces Ch 12: Defining Your Own Data Types Ch 13: Operator Overloading Ch 14: Inheritance Ch 15: Polymorphism Ch 16: Runtime Errors and Exceptions Ch 17: Class Templates Ch 18: Move Semantics Ch 19: First-Class Functions Ch 20: Containers and Algorithms Ch 21: Constrained Templates and Concepts.
OpenGL Real-Time Rendering Demo
A real-time graphics scene developed in C++, OpenGL, and GLSL for my MSc Computer Graphics coursework at the University of Nottingham in late 2023.
The assessed requirements were comparatively modest, so I used the project as an opportunity to explore a broader range of real-time rendering techniques and combine them into a single interactive scene. The result includes custom model loading, mapped materials, dynamic lighting, shadow mapping, procedural terrain, framebuffer-based post-processing, and a screen-space volumetric-light effect.