01open source · C++ · 3D transforms · animation systems
upstream merged Godot Engine

Godot Engine — Animation Regression Fix

Authored an upstream-merged fix for a Godot 4.7 animation regression by reproducing it across releases, using git bisect to isolate the offending change, and tracing it through the C++ animation pipeline.

root cause

A non-commutative matrix-composition error applied scale in the wrong coordinate space when position, rotation, and scale tracks were combined.

  • Identified Basis::scaled() as applying parent/global-space scaling where animated Node3D scale tracks required local-space semantics.
  • Corrected the composition with scaled_local(), preserving non-uniform scale with the expected R × S transform order during TRS animation.
  • Validated the regression across Godot releases and traced the behavior change back to the introducing engine optimization before submitting the upstream fix.
Godot animation regression and transform fix
C++ engine debugginglocal-space TRS scaling
02ML systems · research · graphics

Multi-Agent Reinforcement Learning System

An end-to-end PyTorch/CUDA training system for multi-agent policy experiments, paired with a browser visualization that executes exported policy weights in JavaScript.

2.3×training speedup
100agents in training system
40agents in current live demo
  • Batched per-group linear operations with torch.bmm, then used torch.compile and CUDA graph capture to reduce launch overhead.
  • Compared multiple policy architectures while keeping the environment and training setup controlled.
  • Reimplemented trained-policy inference for the browser and rendered autonomous agents in Three.js.
ML swarm simulation
03computer graphics · performance

3D Drone Swarm

A real-time 1,000-agent swarm simulation implementing Reynolds-style flocking behavior in Three.js and GLSL.

133FPS after optimization
1InstancedMesh draw call
9 MBGPU memory
  • Collapsed 1,000 individual draw calls into one instanced dispatch.
  • Replaced O(n²) pairwise neighbor search with a 27-cell spatial-hash lookup.
  • Kept the physics loop allocation-free while preserving real-time flock behavior.
Three.js drone swarm simulation
04C++ · rendering

CPU Raytracer

A C++ ray tracer built from first principles to understand the geometry and math underneath a rendering pipeline.

  • Implemented ray–sphere and ray–triangle intersections, surface normals, and camera projection.
  • Added diffuse, metal, and dielectric materials with reflections and refractions.
  • Supported antialiasing, depth-of-field, configurable scenes, and lighting.
CPU Raytracer
05backend · deployment · teamwork

Centralized Morgridge Event Calendar

The backend and deployment layer for a centralized event calendar serving UW–Madison's CDIS community.

  • Built a RESTful Flask/SQLite API for event retrieval and channel management.
  • Deployed the data layer on AWS EC2 between automated scrapers and a React frontend.
  • Worked on a nine-person team and helped define the API schema and deployment pipeline.
Centralized Morgridge Event Calendar
06reinforcement learning

Flappy Bird Decision Boundary

A smaller RL experiment that made model behavior visible: a decision boundary from neural policies trained on Flappy Bird using REINFORCE and A2C.

I keep this one on the site because it captures something I still care about: models are more interesting when you can inspect what they learned.

Decision boundary plot from a Flappy Bird reinforcement learning experiment