Thomas Griebel's Portfolio

About Me

I am a professional AAA game developer. Games and graphics brought me into Computer Science years ago and few things in my life have been as fulfilling as living my childhood dream.

In my free time I enjoy reading (philosophy, novels, news, comics), playing video games (the old kind), lifting weights (the heavy sort), and working on my home (it’s cozy). I also enjoy the company of friends and family nearby.

I graduated from the University of Wisconsin – Madison in May 2014. While there, I studied Computer Science with an emphasis on graphics.

I’ve stayed in Madison since graduation where I work as a Software Engineer at Raven Software (an Activision studio) contributing to the Call of Duty engine.





Shipped Games

Graduate CS Coursework

Select Undergraduate CS Coursework

Select Math Coursework


Current Hobby Projects

Title: Tomtendo (or Wintendo)

Development Time: Feb. '18 - Present

Status: Basic Game Compatibility

Language: C++, 6502 asm (emulated)

Features: Emulated: CPU, PPU (~GPU), joypads, NES audio processor not implemented (yet!)

Description: Emulators were a big part of how I got into computers. I also thought they were made by 30 year old trogodytes living in their parent's basement. Now I can proudly say I don't live in my parent's basement!

Old Projects (mix of personal/school)

Title: FPGArcade

Contest Site: Digilent 2011 International Contest

Development Time: 2 months

Status: Complete

Language: C, VHDL

Features: Memory Management, a hardware abstraction layer, VGA device driver, a primitive GPU, hardware caching, joystick drivers, *documentation (I like writing more than just code)*.

Description: One of my most rewarding projects, I had the opportunity to work with a partner for a couple of months developing a game platform. I can't express the chills I got seeing the primitive pixels light up on the screen while knowing it was all of our work, no operating system, no graphics library, no tool-kits--just our code. The project was entered as part of a FPGA board contest and we won the Nationals and made our way to Germany. Overall, it was a life changing experience.

Pictured is a shot from our recreation of Konami's Frogger. We also had a literal Zelda-clone. The game was programmed with a restriction of 8KB and serves as a demonstration of our system. The shot was taken using a virtual console I programmed.

Title: Raytracer

Development Time: ?

Status: Suspended

Language: C++

Features: Matrix/vector libraries, bitmap library (all from scratch)

Description: This was a fun project. I wanted to build a ray-tracer from scratch using only the C++ language (no libraries). It currently uses a basic lighting model--nothing fancy--with basic texture mapping. Standard matrix manipulations can be applied to the objects and projection.

Title: Participating Media

Development Time: 1 Month

Status: Suspended

Language/Library: C++, Mitsuba

Features: Sparse Oct-trees, physically-based rendering, integration along a light ray

Description: One of my summer RA projects. I developed (with some help) a custom algorithm for computing a line integral for a oct-tree data structure. Below is a low resolution tree. This required learning a fair amount about both physically-based rendering and participating media rendering. Basically, I compute a line integral by sampling at the ray intersections of an AABB (or light-ray endpoints) of the oct-tree recursively until the line has reach its maximum penetrative depth. Since the region is constant in a given region the integral simply becomes a sum. If a ray does not intersect a given bounding box then that branch of the tree is not traversed. Based on how homeogenous the subtree is, the integral will either terminate and use the aggregate density at a given node or will traverse to a leaf node (the highest level of detail).

Title: Wolfenstein 3D Clone

Development Time: 1 Month

Status: Occasional Additions

Language/Library: C++, openGL

Features: Resource management, A* path finding, shooting, animation, reusable design, and collision.

Description: This was a class project in my undergraduate graphics course. It was addicting to develop. It features a skeleton for a game engine and replicates the map for the first level of Id Software's classic Wolfenstein 3D. Great effort was placed on making a versatile and reusable design so the classes are cleanly separated and appropriate abstrations are in place allowing for great extensibility. Artistic elements belong to Id software and are lifted from Doom and the 3DO Wolfenstein.

Title: Black Epoch: Vengeance

b1 b2

b3 b5

Play the Game!

Development Time: 4 years, on/off

Status: Demo

Language: Adobe Flash Actionscript

Features: Multiple weapons, bosses, a variety of unique enemies.

Description: I started this project years ago as an extremely fun hobby project. This is esentially my first program. I started life as more of an art-kid, but fell in love with programming with this project. Art/animations are mine too.

Title: Motion Capture Project

Development Time: 2 weeks

Status: Finished

Language: C++, openGL

Features: Quaternion rotations, motion blending (via slerp), euler to quaternion (vice-versa), file I/O, animation display, advanced camera controls

Description: A very fun class project. My partner and I loaded in BVH motion capture files and animated the figure. I was responsible for the listed features.

Title: Fracturing

Development Time: 2 months

Status: Suspended

Language: C++, PhysBAM

Features: Delaunay tetrahedral mesh loader, anisotropic partitioning, voronoi geometry partitioner, finite element model, mass-spring

Paper Inspiration: Real-Time Deformation and Fracture in a Game Environment

Description: Class project. I was working on fracturing which required partitioning geometry. Geometry is partitioned using a voronoi partioning and is tetrahedralized using a delaunay method. Most of my time was spent on geometry issues and scalability.

Title: Cloth Simulation

Development Time: 2 weeks

Status: Finished

Language: C++, openGL

Features: Custom physics code.

Description: The flag is simulated using Euler's Method and mass-spring system. I have an implicit method mostly working using a conjugate gradients solved, however I'm working on getting the bugs out. Collisions are currently not supported.