Return to top

Griffin Evans's Works

My Résumé

Graduate Work (University of Pennsylvania)

MSE in Computer Graphics and Game Technology (2024–2026)

Advanced Rendering and Independent Study

GPU-side monte carlo path tracer in OpenGL. Includes rendering of SDF-based surfaces and of volumetric models in the form of noise patterns, metaballs, or VDB files.
Path traced image of a volumetric fire effect in a Cornell box
Volumetric fire effect made from density and temperature data stored in a VDB file.
Path traced image of a volumetric smoke effect surrounded by various rough transmissive and reflective spheres and cubes
Volumetric smoke effect and various objects with microfacet-based materials.
Path traced image of spheres and a volumetric explosion effect being reflected by multiple mirrors
Volumetric explosion effect within a box of mirrors.
Path traced image of SDF-defined solids
Solids (diffuse and specular) defined using a signed distance field.

GPU Programming and Architecture

SimuNet

Collaborative project creating a WebGPU node-based procedural geometry generator and physics simulator. Check out our presentation for a general overview or our in-browser demo (see the readme for usage instructions).
Among other duties, I implemented much of the logic for cloth simulation, normal recalculation, several varations of noise and base geometries, saving and loading files, and propagation throughout the node structure.
Gif of a simulated cloth falling on two cubes Gif of a collection of cubes with scale/rotation randomized for each Gif showing a scene rendered in various settings, such as wireframe and different colorations

CUDA Path Tracer

Path tracer implemented in CUDA. Features include environment mapping, glTF model rendering, depth-of-field, and motion blur. Check out the project's repository on GitHub for more details.
Image of a glass duck in front of a chess set Image of a bell and chandelier with reflective materials
Showcase of model rendering, materials, and environment mapping. See the project's readme for full credits on the textures and models used (besides my own).
Image of a duck with motion blur trailing behind it Image of the same duck from another angle
Motion blur simulation, which interpolates an object along transformations specified in the scene data at varying points in time, sampling the image for each of those points and combining them.
Gif alternating between images of a ball and sphere with varying depth-of-field blur on them Image of a small figure climbing on a coffee cup
More examples; the gif on the left shows a scene being rendered with varying depth-of-field.
WebGPU Real-time Renderer including Forward+ and Clustered Deferred Shading Methods
The above video shows a scene rendered with increasing numbers of moving lights; this can also be viewed as an in-browser demo (requires a WebGPU-capable browser).

WebGPU Gaussian Splat Viewer.

Rendered image of a bicycle and bench Rendered image of a pink bonsai tree on a table cloth
Video showing the viewer in use with varying angles and settings. Further details and interactive demo featured on the project's readme.

Boid Flocking Simulation in CUDA.

Gif showing flocking particles flying through a box Gif showing the same with a much denser and larger collection of particles

Game Design Practicum

Comboules

A two-player boules-style game made in Unity, in which launching a shot into a previously shot ball combines them together to make a larger shot.

Larger balls are worth more if they stay on the target, and their greater inertia makes them harder to push around (and better at pushing off other balls when in motion), but risk losing a lot of points at once if your opponent can manage to knock them off.

The size and placement of the scoring target, as well as the initial scattering of "neutral" balls that either player's shots can combine with, are randomized such that players will have to adapt their strategies each time they play.

Grocery Gauntlet

Collaborative project in Unreal Engine 5; a online first-person action game where three players compete to collect as many items as they can from their shopping list while fending off the others from stealing items out of their cart.

Created a procedural generation system for level layouts, implemented logic and UI for player scoring and win condition, sound effects.

Final Serve

Collaborative project in Unity; a two-player online VR table tennis game where players receive power-ups in the form of objects to throw at the other player.
Created visuals and environment design, including creating models and textures for props and writing shaders for effects such as the power-up-spots' glow. Implemented scoring display and logic for serving, appropriately alternating the serve between players (every two serves normally, every other serve in deuce). Contributed to logic for online syncing of power-up spawns; performed testing and implemented bug fixes for online-synced physics and collisions, as well as making various tweaks to improve game feel based on playtesting.

Procedural Graphics

First-person town generator

Created models and logic for a procedural castle town generator in Unity based on the wave function collapse/model synthesis algorithm, modified to work with an expanding grid to allow for exploration of an infinite world, operating in sections at a time so previous areas remain stable if conflicts arise in generation on the frontier.
Image of the results from the town generator Image of the results from the town generator Image of the results from the town generator
This generation works in combination with a procedural terrain noise generator which determines elevation and the presence of bodies of water, which affects the availability of each tile type to spawn in a particular cell as well as warping parts of the models so they fit smoothly into the landscape while remaining coherent with neighboring tiles.

Pencil-style shaders in Unity

Custom shaders for illustration-style visuals in Unity, demonstrated on a model I made.

Procedural building generation in Houdini

A procedural building generator with a variety of controllable parameters, styled after the buildings on the Ponte Vecchio in Florence, Italy.

Stylized fireball visuals in WebGL

Render of a cartoonish fireball illuminating the interior of a box
Can also be viewed as an in-browser demo including various controllable options.

Advanced Rendering

Shaders for physically-based real-time rendering.
Real-time render of sheets of paper with paint and stains on them Real-time render of desk with stains reflecting the environment map Real-time render of a little clay doll guy
Some of my models with various surfaces showing the effects of environment mapping.
Real-time rendered image showing reflections and depth-of-field blur on spheres and a box with varying roughness
Real-time render showing screen-space reflections with varying roughness and a simulated depth-of-field blur effect.
Real-time rendered image showing multiple copies of a character wearing a hat
Render using SDFs to create a model of a character.

3D Modeling

Scene modeled after various objects from Penn's campus.
Scene of a pop-up book on a desk, viewable in real-time on Sketchfab.
Model of a camel figurine from the Penn Museum.

Interactive Computer Graphics

Group project creating a Minecraft clone; I was primarily responsible for the procedural generation of the world (terrain, caves, trees, etc.), water physics, and post-processing effects.
Desert and mountain biomes.
Forest and mountain biomes in smooth mode.
Underwater post-processing effects.

Undergraduate Work (University of Massachusetts Amherst)

Bachelor of Science in Computer Science

Honors Thesis: "Extension of AssemblyScript Functionality through Source-to-Source Compilation"

Bachelor of Science in Mathematics—Mathematical Computing

Minor in Linguistics

Personal Projects

I often make personal projects in PICO-8 (as well as its sibling project Picotron), since I enjoy the challenge of working under its limitations.
Top-down roguelite shooter made in Picotron, where the player assembles loadouts of equipment for each level by fitting items into a grid.
Deck-building card-battling game where the player can piece together components to make custom cards.
Real-time strategy gamejam prototype about protecting a group of red blood cells.

Itch.io page showcasing projects from game jams