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.
Github TwitterSkills
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
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.