Portfolio of Thomas Griebel


About Me

I love programming, graphics, video games, comics, drawing, and philosophy. I'm a second year graduate student at the University of Wisconsin -- Madison studying Computer Sciences with an emphasis on graphics. I finished my undergraduate degree in Computer Science with Mathematics and Philosophy minors at a small liberal arts college in Dubuque, IA.

I accepted a Software Engineering position with a focus in graphics at an Activision studio--Raven Software--located in Madison, Wi and I'm thrilled to begin!


Skills

Graduate CS Coursework

Some Undergraduate CS Coursework

Math Coursework


 

Projects

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:Perhaps my most rewarding project, I had the opportunity to work with a partner for a couple of months to develop a game platform to be used for education purposes. I can't express the chills I got seeing the primitive pixels light up on the screen and 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 won again this year with a more technically impressive project unfortunately I have no pictures. 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:? (developed sporadically)

Status:Suspended

Language: C++

Features:Matrix/vector libraries, bitmap library, completely from scratch

Source: Raytracer Git-repo By no measure is this a measure in software engineering practices, but I'm refactoring it soon.

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 object and projection. II just started added AABB and tree-structures to render better models faster.


Title: Participating Media

Development Time:1 Month

Status:Halted

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. Better pictures later. 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 the 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 of a game engine and replicates the map for the first level of ID'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:Near Release

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. It is an ambitious work as all the art is produced by me. This is a highly polished game. I plan on releasing it soon; the only work left involves bug fixes and designing the main menu.


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

Source: Mocap Git-repo

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 engine.

Description:Another enjoyable exercise, I started a custom physics engine. The flag is simulated using Euler's Method and mass-spring system. I have an implicit method mostly workingusing a conjugate gradients solved, however I'm working on getting the bugs out. The artistic object and physical model are decoupled. Collisions are currently not supported.