Programming Side Projects Music Art Animation Blog Everything


Vertex Shader Domain Warping with Automatic Differentiation

May 14, 2024

I worked out some math to be able to apply arbitrary warps to 3D meshes in a shader and still get correct lighting and reflections.

Domain warping is a technique commonly used in creative coding to distort graphics and add visual interest to a work. The approach has the potential to be used in 3D art as mesh vertices can be efficiently warped using a vertex shader in a WebGL pipeline. However, 3D models packaged for the web typically come with baked-in normal vectors, and these need to be updated when vertex positions change for lighting calculations to work. This is typically done via finite differences, which requires parameter tuning to achieve optimal visual fidelity. We present a method for 3D domain warping that works with automatic differentiation, allowing exact normals to be used without any tuning while still benefiting from hardware acceleration.

Bean There, Done That: Computer-Assisted Design of Bean Sculptures

Proceedings of SIGBOVIK, March 23, 2024

An algorithm for optimizing a unique bean sculpture that best fits existing architecture.

Chicago's status as a world-class city is cemented by its iconic bean sculpture. Other cities, wanting to replicate the success, have muddied the bean waters by introducing their own bean variations: New York City has a bean sharing similar properties, and Ottawa has a sphere, dubbed the "Ottawa bean" by locals. Our economic analysis proves their worth, so naturally other cities will want their own. We present a mathematical model of the space of all bean sculptures, and an algorithm to help cities replace existing landmarks with beans.

A Jalgorithm for Japplying Jeans to Jobjects

Proceedings of SIGBOVIK, April 1, 2023

A super serious use of differentiable rendering.

For years, society has been plagued by the lack of a conclusive answer to the question of how arbitrary things would wear jeans, if they wore jeans. This paper proposes a jalgorithm to determine the mathematically optimal configuration of pants on a silhouette, leveraging recent insights in the fields of computer vision and differentiable rendering.


June 4, 2022

A library for efficiently drawing to a texture in p5 WebGL mode.

This gives you access to Framebuffers, which are WebGL-only and similar to a p5.Graphics, but faster, and includes depth information.

More Programming

Side Projects

Horse Factory

April 22, 2024

Good horses only!

Webcam Feedback

April 16, 2024

It's you! Kind of.

He is coming

March 1, 2024


Bezier Drawing Tool

February 13, 2024

A tool to draw and edit Bezier curves and output corresponding p5.js code.

More Side Projects



October 7, 2022

A new wave/house EP featuring upbeat drums, some flute, and more vocals than usual.

She Answered The Trees

November 19, 2021

A mashup of a few genres, centered around some ukulele


January 16, 2021

Channeling stress into dance music, inspired by Remain In Light.

Motion Blur

March 29, 2020

Reflections on quarantine distilled into a small EP.

More Music


Zoom friends

May 24, 2022

A meme painting, done with my sister

Yonge St. near Davisville

May 24, 2022

Looking down at Yonge St. near the Mt. Pleasant cemetery

Experimental Farm greenhouse

March 7, 2022

The greenhouse in Ottawa's Experimental Farm in the fog

Hourly Comics

February 16, 2022

Made for #hourlycomicday 2022

More Art



July 21, 2023

Sometimes your speakers pick up weird sounds. Based on a true story.

Pickle brine shot

April 20, 2022

A tiny animation about drinking a shot of pickle brine


August 16, 2020

A meditation on feeling isolated, counting down to something different.

Get Back to Work

April 18, 2019

A vignette about daydreaming when you have work to do.

More Animation


Animation Principles for Creative Coding

September 1, 2023

For decades, animators have been teaching the 12 Principles of Animation, a framework to help animators learn how to make convincing character motion. While intended for character animation, the 12 Principles can help us with the motion of more abstract graphical elements too, and avoid our motion graphics becoming "Powerpointy."

How To Draw a Line

CC Fest, March 30, 2023

How does one add character to the stock vector line? In this session, work towards some techniques you can use to add more expression to your lines in p5, live coding our way through the math and geometry of lines to adding texture in shaders.

Black hole rendering

November 26, 2022

In which I really stretch the "science" part of "computer science" and presume to do some physics.

Speeding up tint() in p5.js

September 3, 2022

A problem I thought would be easier, but it turns out the browser is a little odd.

More Blog