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.
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.
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.
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).
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.
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.
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.