Ethan MacDonald
Profile picture
Game Engine programmer

Experienced with Vulkan, C++, and writing NEON and SSE optimized code.
(check out my blog post on SIMD!)

About Me

I am a programmer from Nova Scotia, Canada, currently waiting for my graduation for a Bachelor of Computer Science (October 20th!). I spend most of my time working on an FPS game in my engine Raptor Engine, as well as working on the compiler for the Strata scripting language with my brother.

I am passionate about graphics and low-level programming, experienced with writing optimized C++, and love playing games.

Fun fact, this website is generated using a custom templating system I wrote in C++!

Skills

  • Working on game engines (well versed with Vulkan and OpenGL), writing Deferred and Forward+ renderers and building super fast systems to support engines.
  • I am a very performance focused programmer. I like writing things fast, and making things go fast where it matters; I enjoy writing some SSE and Neon optimized code and hate on per-frame allocations.
  • Built quite a bit with Godot engine (C# api is king), and Unity.
  • Proficient with many programming languages including C++, C#, Zig, Python and the web stuff.
  • Tabs are better than spaces
  • Work experience as a full-stack web developer, as well as developing Unreal Engine 4 and 5 plugins and tools, and GUI tools in Python.

Projects

Raptor Engine

Raptor Engine is a Vulkan game engine written in C++ with components in Strata. The renderer is very customizable and is currently Tiled Forward+ and includes with dynamic shadows, SSAO, and probe-based global illumination.

Raptor has many cool features, including custom shader binding generation, fast level building with the prototype system, and a SIMD optimized math library. Raptor uses Strata as a scripting language (JIT compiled!), with the entire level prototyping system being written in it.

Demo of level prototyping

Probe based global
	illumination

Probe based global illumination (still WIP)

Strata Language

Strata is an embeddable native scripting language with rust-like semantics designed for game engines. It features JIT and AOT compilation with an LLVM backend.

This language is being developed with two other programmers. I've added first-class support for SIMD accelerated vectors (with HLSL adjacent syntax), and heavily contributed to the compiler.

import ../common;

/* A type-safe pointer type, exposed as void* to C. */
handle OBJECT;
impl OBJECT
{
	/* Define in-engine */
	extern void set_position(OBJECT obj, float3 position);
	extern float3 get_position(OBJECT obj);

	property float3 position {
		get = OBJECT_get_position;
		set = OBJECT_move_to;
	}
}

const float SPEED = 0.5f;

void called_from_cpp(OBJECT obj, float3 camera_forward)
{
	const float3 up_dir = float3(0.0, 1.0, 0.0);
	// In-compiler vector intrinsics!
	float3 right_dir = cross(camera_forward, up_dir);

	// Get and set positions using properties
	float3 new_position = (obj.position + (right_dir * SPEED));
	obj.position = new_position;
}

Satellite Visualization

For a final project in a visualization course I was tasked with building an interactive visualization using openly accessible data.

Future positions and velocities are estimated with SGP4 and precomputed into keyframes. These keyframes are interpolated and combined with data loaded from satellite catalogues.

This visualization was written in about a month using C++, Raylib and OpenGL.

Visualization of debris and satellites

Godot Water Demo

I tried to recreate the aesthetic of deep-sea underwater camera footage, and learned a ton of 3d modelling tricks here. This was built using the C# backend for Godot and did some cool lighting tricks by faking a layered fog, and had a few different movement systems for swimming, ladders, and seated.

Showing off movement types, particles and water effects

Godot FPS Movement

Using Godot, I worked on a horror game movement system in C#.

This has head bob, click and drag to open doors a variable amount, sprint, jump and a basic player attachment system.

Movement demo with interactable objects and a crude blockout

Hyperion Engine

A modern Vulkan game engine. Supports multithreaded rendering, VCT, DDGI, raytracing, and much more.

I worked on this engine with my brother Andrew(@ajmd17) and worked on developing the original Vulkan backend.

Demo of the realtime DDGI in Hyperion engine

Andrew showing off the realtime DDGI system in Hyperion

Acheron Engine

Acheron was a 3D OpenGL game engine written completely in C99. This was my main project while I was going through high school, and helped me learn a lot about 3d rendering.

Acheron was a way to learn more about how game engines work internally as well as learn how to structure large projects in C.

Multiple point
	lights around a normal mapped cube in a train tunnels

Acheron with multiple lights and normal mapping

Misc Projects

Peach Language

For a programming language jam from Repl.it in 2020, me and Andrew(@ajmd17) wrote PEACH in less than a week.

PEACH is a prototypical interpreted language that is written in Python. Shown in the clip here is a mandlebrot fractal visualizer that I wrote completely in PEACH (link!).

Unfortunately, the original submission thread has been removed over the years.

(slowly) generating the mandlebrot fractal in PEACH

X16 Macro Assembler

A custom CPU architecture, macro assembler, and VM written as a challenge to write the smallest assembler and VM that is still easy to program for.

For this project, the assembler is programmed in Python, and the VM is programmed in C. It runs blazingly fast, and has a bunch of cool features!

Full program written in the custom
	assembler language

Compilable program in the custom assembler

Demo of the VM running with a slow step speed

3D Modelling

Using Blender and Substance Painter, I modelled and textured this pistol using multiple real-life image references to make a modular pistol for using in games.

This sits at about 760 triangles total, with the whole GLTF model (including textures) being about 410 KiB.

An image of a modelled pistol

Viewport screenshot

Belter

Belter was a fun side project to try out Dart and Golang. It was an audio-focused social network that allowed you to share audio clips with friends.