portfolio of hobby projects


photo of me

Hi 👋, I'm Noah Cabral. I'm an aspiring Software Engineer.

I have deep interest and excitement for working on impactful and high-quality software products. I love the process of software engineering and have particular interests in game engine technology, computer graphics, developer tools (e.g., compilers), and machine learning.

I'm currently enrolled in the Engineering Physics program at Queen's University, located in Kingston ON, Canada. I will complete my Bachelor of Applied Science degree (not conferred) in December 2024.

You may contact me via e-mail (noah dot cabral at queensu dot ca) or LinkedIn (https://www.linkedin.com/in/noahcabral/).


Pathtracer; updated 2024.05.21, pathtracer_windows_v0.3.2.zip, Project Page

While taking a Computer Graphics course in my 4th year at Queen's University, I put the concepts I was learning into practice by iterating on my hobby Path Tracer. The final result is still a hobby Path Tracer, but it is now much closer to production quality.

The current version is a physically-based Path Tracer capable of rendering various geometrical shapes, including triangles. The application includes a couple hard-coded scenes that the user may select at a time for rendering.

Earlier versions of the Path Tracer boasted multiple backends (DXR 1.0 and Vulkan), selectable at compile time. I developed these versions whilst interning at AMD. With the recent developments, such backends are no longer supported.


Inf-Forge; download upcoming, Project Page

Developed during my internship at AMD, Inf-Forge is a hobby game engine written in C++ that primarily uses OpenGL to talk to the GPU. It supports the Windows operating system via the Win32 API.

The Inf-Forge engine is just the latest in my series of game engines, which comprise just a small subset of the much larger "yet another game engine" series of projects.

The screenshot below is from Monkey Demo, one of the example applications showcasing the engine's features.

a spinning monkey head

3D Hand Tracking; Project Page

During my 3rd year at Queen's University, I led a two-semester-long project to implement an ML model for end-to-end estimation of hand shape and pose from a monocular RGB image.

The model was trained and built within Tensorflow. We used the RHD dataset. Our final result was that the model overfits the training set.

four 3d hand models generated by a deep learning machine model

Pokemon Demo; updated 2024.05.22, pokemon_demo_windows_v0.1.0.zip, pokemondemo.ncabral.ca, Project Page

I built Pokemon Demo back in 2017 whilst I was following along at home to the Handmade Hero series. I spent an entire summer passionately working on this project.

Pokemon Demo is a video game written from scratch using C/C++, with no libraries used except for the necessary platform APIs such as the Win32 API. Each pixel is stored in system memory and written to by the CPU.

Since then, I have ported the game to run on the web via the raylib library (which uses Emscripten to convert LLVM bytecode to WebAssembly).

a 2d, topdown game that looks an awful lot like Pokemon

Plasma Compiler; download upcoming, Project Page

In high school, I became curious about how compilers generate machine code from high-level programming languages. To educate myself, I read parts of Crafting Interpreters. The final result of this exploration is Plasma Compiler, a Python program capable of compiling a subset of the C programming language. It works by writing to an x86 assembly file. A separate assembler program (e.g., NASM) must be used to generate an executable for a machine with the x86 architecture.

three panes in Visual Studio Code showcasing the transformations
                                    that a source file will take when put through the Plasma Compiler

Collage Creator; updated 2024.05.21, collage_creator_windows_v0.1.0.zip, Project Page

For my final project in my grade 12 Python class, we were tasked with writing an image processing program. I enthusiastically expanded the scope of the project to include the ability to construct a collage of images via a graphical user interface. Additionally, I wanted to use the C programming language.

I designed and implemented a desktop PC application where the backend was written in C, and the frontend was written in Python. The two components communicated via the Python-C API.

The application backend used the Win32 API to handle the creation of an application window, etc., while the Python frontend wrote to a pixel buffer provided by the backend.

a GUI program for making image collages

STACSC; no download available.

At my high school, I founded and headed the Computer Science Club. This project was the official website for the club.

For any given page request, the web server ran a custom Python framework via the Common Gateway Interface (CGI) protocol. This framework invocation performed server-side rendering of the requested web page.

a website page with a striking resemblance to Windows 95