Education: PhD in Computer Science (Simon Fraser University).
Currently: Research Scientist at Apple since November 2021.
Previously: Prototype Engineer (Archiact), Instructor (UManitoba), Developer (Canadian Air Force).
Software: C, C++, C# .NET, Swift, Python, Java, Vulkan, OpenGL, GLSL.
Hardware: CAD (Fusion 360), PCB design (DipTrace), 3D printing, embedded programming, robotics.
Awards: Various. Includes federal funding (NSERC CGS) and an award-winning paper (CAIAC 2017).
Scroll down to see more, or download my CV.
I've developed stock market backtesters, automated options trading software (which actually perform live trading), particle effect editors, a media library for C, mission scripters for my custom game engines, tools for my PhD research, and many more.
My languages of choice are C and C++. I'm also highly experienced in C# .NET, Swift, Java, and Python.
Fornax is a general-purpose particle editor I use a lot. The GUI was made in C# .NET, with the preview functionality built in C++ with OpenGL.
The scripting and mission layout tool I built to script missions in Hypergate. It was made in C# .NET.
Some output from a suite of back-testing tools I wrote to develop and test options trading strategies on the S&P 500. These tools were built using C++ and Python.
My automated trading software, written in C# .NET, running on a wall-mounted tablet.
Screenshot of the drone simulation and control software I wrote that powered my drone experiments for my PhD research.
A fun visualization project showing ping results for IPV4 addresses a.b.c.d, for all a, b, c, and a random d.
My games and game engines are cross-platform (Windows and Linux) and written from scratch, because I enjoy the learning that comes from doing things yourself. I've also built scripting tools, physically-based rendering (PBR) and raytracing engines, and more.
I write my games in Vulkan or OpenGL, with shaders written in GLSL. Most of my custom development tools were written in C# .NET. I construct art assets in Blender and GIMP (most recently using a PBR metallicity workflow), and I do my own foley/sound design with Goldwave and Audacity. Two of my games are on Steam.
Hypergate is a 3D space combat game available on Steam for Windows and Linux. It took five years to develop.
Check out the Steam Store page here.
Asteroids Millennium is a modern take on an old classic, available on Steam for Windows and Linux.
Check out the Steam Store page here.
Secrets of Mars is a game about an autonomous rover that begins to question reality, and its own programming, when things on Mars begin to become strange.
No-Fly-Zone is a short survival first-person shooter (FPS) where you defend yourself against rogue drones. It's a simple open-source example of how to create an FPS with OpenGL.
A render from a raytracing engine I wrote. It features bounding volumes and other techniques for faster rendering, although not in real-time. The object in the center is a mirror.
I modelled the Voyager holodeck and put it into my experimental engine to learn about the differences in lighting between movies and video games, motion blur, and other techniques.
A 3D platformer I wrote to learn how to make a game engine in Vulkan. It supports animated models, diffuse and specular irradiance, shadow maps, multisampling, and more.
Another GIF of the platformer, showing the main menu and most of the world.
Projects of mine include an electric scooter, remote controlled vehicles, robots, drones, and more. I modelled them using Fusion 360 and used DipTrace to design the PCBs. The renders below were made in Blender. Most of my projects are powered by microcontrollers such as the ATmega328 or AT90USB64.
The µBee: an inexpensive, 3D-printed drone I built from scratch. Optional mounts allow integration with a motion capture system. I used these drones to conduct my PhD research.
An electric scooter I built it from scratch using plywood, aluminum, and 3D-printed parts reinforced with steel. An ATMega328P powers the logic, motor control, and display.
An animated render of my rugged-terrain, differential drive remote-controlled car. It is nearly entirely 3D-printed, including the controller.
A brief test of a small µBee fleet, detected and controlled by custom software I wrote that also doubles as a simulator to test out behaviours beforehand. A Vicon motion capture system surrounding the lab space captures the 9.5mm markers attached to the drones. For size and weight considerations, only 3 reflective markers are used per drone. The software controlling the µBees detects and tracks these markers over time to associate the detections with drone IDs.
Myself, test-flying the µBee. With the optional motion capture markers, the drone weighs 37g (including the LiPo battery), and has a flight time of up to 3 and a half minutes.
Myself, riding the electric scooter. Its top speed is approximately 16km/h and it has a modest maximum range of about 7km when powered with a 3.3Ah 6s LiPo.
Field tests of the rugged-terrain remote-controlled car on the SFU campus.
An earlier robotics project. A custom vision system captures the 3pi robots and instructs them to maintain various formations as robots are added or removed in real time.
Shortly after starting my master's degree, I built a quadrupedal robot to terrorize the neighbourhood.
A digital clock I built using 3D-printed parts, a real-time clock module, 3 LED matrices, and a custom-designed PCB. The power cable runs into and down behind the wall.
A smart watch I built from scratch, and not just for show—I actually wear and use it. I've added custom functionality for myself that you won't find on regular smart watches.
A partially-disassembled view of my watch. I designed the board, the case, and wrote all the drivers, firmware, and applications. The main chip is an AT90USB64.
While working on my master's degree at the University of Manitoba, I was a sessional instructor from 2013 to 2015. In total, I taught 7 classes, ranging in size from 30 to over 100 students. While course topics were determined by the department, I developed and presented my own lecture content and assignments. Exams were developed and graded jointly between myself and the other instructors teaching the remaining sections. I received excellent ratings from students during evaluations.
I have been very active in the computer science and robotics communities. My volunteer work included organizing student events for international conferences, and contributing to committees on both local and international levels.
If you want to get in touch, email is best: geoff [dot] nagy [at] gmail [dot] com.