Forrest Briggs' Portfolio
Table of Contents
Class Projects At Harvey Mudd
3D Golf Game
Rediculosity Golf is a 3D OpenGL golf game, written in C++, for Large Software Development. Some of its best features include:
3D Fluid Dynamics Simulation of Smoke
For our final project in Computer Graphics, Jon Dodge, Brad Tennis and I developed this 3D Navier-Stokes simulation of smoke, in C++.
Our implementation is based on the 2D algorithms given in "Fast Fluid Dynamics Simulation on the GPU," by Mark Harris. Thanks to Prof. Jon Jacobsen for helping us
derive the analogous 3D equations.
Automating the Discovery of Disaster Related RSS News
The Harvey Mudd Clinic program is a year-long class in which a team of students and a professor (myself, Prof. Chris Stone, Ryan Ausanka-Crues, Andrew Campbell, and Bill Hewitt),
work to solve a real-world problem for a company. We worked with The National Center for Crisis and Continuity Coordination to help them lessen the burden on their employees of sorting
through news articles from thousands of sources every day, looking for the few news articles which are relevant to disasters. Our solution consisted of a large-scale news aggregator,
duplicate news-item filter, and text classifiers based on Bayesian probability, and neural networks with principle component analysis and random projection for dimensionality reduction.
We also delivered 122 pages of documentation, a poster, and gave 4 presentations. Links to the last presentation and the poster are below:
Quantum Computing
Under the supervision of Profs. Ran Libeskind-Hadas, Chris Stone, and John Townsend, I did a semseter of independent study on Quantum Computing. To conclude this study, I gave
a presentation entitled 'Quantum Computing for Computer Scientists', with the goal of providing a comprehensible but accurate introduction to the field, for an audience that is
familiar with Computer Science, but not with Quantum Mechanics. You can download the presentation slides below:
Research At Harvey Mudd
Identifying Introns in the Genome of T. thermophilla
Prof. David Asai's Lab at the the Harvey Mudd Biology Dept. is interested in T. thermophilla because it is a model organism in which to study the molecular motor Dyenin.
The geneome of T. themophilla was sequenced, but not annotated, which means that the DNA sequence contains introns. Introns are sequences of DNA which are not translated into proteins.
In order to know what protein a DNA sequence will make, it is necessary to know where the introns are. Unfortunately, there is no known rule that describes exactly where introns are located,
but there are lab proceedures that can verify the presence of a suspected intron. However, these proceedures are time consuming, so it is necessary to make well informed guesses about the locations
of introns in order to find them expediently. Working with Profs. Asai, David Harris, and Elizabeth Sweedyk, I developed a software package to predict the locations of introns the genes of T. thermophilla. To find new introns, we used a combination of statistics from known introns, as well as the results of local sequence alignment tests with BLAST against homologous proteins.
I also developed a Mac OS X graphic user interface to all users to explore and visualize information about possible introns.
Machine Vision for an Autonomous Mars Lander
It takes several minutes to send a message to Mars at the speed of light, which makes it difficult to control a spaceship as it is landing. Thus, it is desirable to have a spaceship that can land itself.
However, it must not land in a crater, or on a slope too steep that it will tip over, or in a patch of large rocks. Prof. Ruye Wang (Harvey Mudd), and Dr. Yang Cheng (Jet Propulsion Laboratory, NASA), and I worked on a solution to this problem
wherein a Mars lander is
equiped with a downward-facing camera, and takes pictures as it descends. Our goal was to write software to analyze such a series of images (with additional data from onboard gyroscopes and accelerometers),
to determine safe places to land, and to calculate the position and the orientation of the lander relative to the landing sites. I developed a software package to simulate a moving ship with a mounted camera, taking pictures of a 3D model
of the surface of Mars, obtained from satelite data. The software allowed us to test the accuracy of various algorithms that determine the ship's motion, because using the simulation, it is possible to know exactly how the ship has moved, and compare that to the output determined by analyzing the pictures it takes.
I implemented and tested the motion estimation algorithm from "Estimating 3-D Motion Parameters of a Rigid Planar Patch, II: Singular Value Decomposition" by R. Y. Tsai and T. S. Huang.
Functional Genetic Programming and Exhaustive Search with Combinator Expressions
Prof. Melissa O'Neill and I did two semesters and a summer of research on program representations for genetic programming. We showed that combinator expressions are a powerful program
representation for genetic programming and ordered program search, because they provide the full expressive power of polymorphic functional programming languages such as Standard ML
or Haskell, but have a very simple structure, which makes them well suited to manipulation for the purposes of evolution. We published two papers on this research:
Forrest Briggs and Melissa O'Neill. Functional genetic programming with combinators. In The Long Pham and Hai Khoi Le and Xuan Hoai Nguyen editors, Proceedings of the Third Asian-Pacific workshop on Genetic Programming, pages 110-127, Military Technical Academy, Hanoi, VietNam, 2006. (Download PDF) Forrest Briggs and Melissa O'Neill. Functional genetic programming and exhaustive program search with combinator expressions. To Appear in the KES Journal, 2008.
Music Visualization
Fractogroovalicious iTunes Visualizer
Fractroogroovalicious was my first iTunes visualizer. It uses a highly optimized and hackish adaptive-subsampling algorithm to render Julia fractals that react to music in real-time.
It is available as a freeware download. Download Fractogroovalicious.
Ultragroovalicious iTunes Visualizer
Ultragroovalicious was my second visualizer. It is written in C++, and uses OpenGL for 3D effects. Some of the effects include electromagnetic field lines and a swarm of dancing insects.
Ultragroovalicious has been distributed on CDs included with MacAddict, MacWorld, MacWorld UK, and Mac Fan Japan magazines. For more information about Ultragroovalicious, visit
www.groovyvis.com.
OpenGL Extension to the WhiteCap Visualizer Engine
SoundSpectrum, Inc. is the maker of the popular G-Force music visualizer (the defualt iTunes Visualizer is a modified version of G-Force). In the summer of 2006, I worked with Andy O'Meara, the creator of G-Force and Whitecap, to extend the
SoundSpectrum cross-platform, cross-media player visualization engine from purely software based rendering to also being able to render using OpenGL. This amounted to implementing OpenGL port and context management code for Mac OS X and Windows in C++.
I also developed several new visual effects in the engine's scripting language, to utilize some of the new rendering capabilities.
Visualizer for The White Stripes' Icky Thump Album
A manager for The White Stripes asked me to write a music visualizer for their new Album, Icky Thump. In collaboration with SoundSpectrum, Inc., I developed 10 visual effects in Python
and OpenGL, using the red and white button theme of the album. Due to legal disputes between SoundSpectrum and The White Stripe's management, the visualizer was not released. However, screenshots are available:
Music Muncher
Music Muncher is a game that runs as a plugin inside of iTunes. What happens in the game is determined by the music that is playing.
SoundKeyframeTool
SoundKeyframeTool finds precise beat and note timing for music. It can be used to create tightly synchronized audiovisual compositions (see Hong Kong Triad + Differential Dynamics),
or games which closely correlate gameplay and music (see Lumox 2). To get the timing information for a song, a user roughly taps a key along with the beat. The tapping does not have
to be very accurate. After about 10 taps, it runs an algorithm that finds a regular beat reconstruction that optimally matches the user's tapping. To find this beat reconstruction,
it assumes that beats are evenly spaced (which works extremely well with computer generated music, and not as well with human played music). This beat period is simply the average delay
between user taps. Next, it calculates the phase for the beats which minimizes the sum-squared error between the reconstructed beat and the user's taps (I derived a closed form expression
for the optimal phase by setting the derivative of the sum-squared beat reconstruction error, with respect to the phase, to 0). After calculating the basic beat of a song, the user can press other
keys to record moments of special drama or other keyframes in the song, which are automatically snapped to beat timing.
Differential Dynamics, Set to 'Hong Kong Triad'
Computer-based music-visualization pioneer John Whitney introduced a method of creating an animation that is visually analogous to music, in the sense
that it creates tension and resolution by cycling regularly between chaos and order (much like a melody meanders from its base note, creating tension, and then eventually returns, creating resolution).
This technique is called differential dynamics. It consists of a collection of objects moving at rates which are multiples of each other. Sometimes the objects appear jumbled,
but at regular, predicatble intervals, they all line up. For my final project in Harmony of Light and Sound, I used SoundKeyframeTool to get precise beat timing information
for the song 'Hong Kong Triad', by Thievery Corporation. Then, I wrote visuals based on the principle of differential dynamics that synchronize with the song in such a way that whenever all
of the moving objects align, it occurs exactly on a musical beat. The program is written in C++ and OpenGL, and runs in real-time on Mac OS X.
Independently Published Games (Mac OS X)
Crystal Catastrophe
Crystal Catastrophe is a game for Mac OS X, based on the mechanics of Super Puzzle Fighter II for Playstation (a little bit like Tetris). Jon Dodge, Brad Tennis and I developed the game
engine for Crystal Catastrophe from scratch in C++. The game engine provides an OpenGL drawing in either windowed or full screen mode, with screen resolution detection and switching,
keyboard and mouse input, sound, bitmap-font text rendering, and resource management. The game features a 50 level puzzle mode, 10 AI skill levels (tuned by evolutionary competition), and 2 player vs. mode.
Jason Arold made the graphics for the game in Maya.
Lumox 2
Starting with the engine from Crystal Catastrophe, Brad Tennis and I set out to develop a puzzle game based on the mechanics of popular Playstation Portable game Lumines. Lumox 2 is
an arcade / puzzle game in which the player must form groups of blocks of the same color, so they can be swept clear by a beam of electricity. What makes this game special is that nearly
every aspect of it is exactly synchronized to the beat of its original 35 minute sound track, by Trademark. For example, blocks move down every four beats, and electricity sweeps every 16 beats.
As the player's score increases, the music tempo adjusts to smoothly vary the difficulty of play, keeping the player in their "Flow zone". The visuals of the game are inspired by concepts from
music visualizers; at any given time, the what the player sees is a composition of a color scheme, a block texture style, a block grid pattern, and a background effect. There are thousands of ways
in which these aspects of the visuals can be combined. Other visual effects include the background grid rippling when blocks are destroyed (it is actually a mesh of springs),
blocks leaving tracers, and blocks disappearing in a puff of smoke (with perlin velocity field driven particles, to quickly approximate turbulent fluid). Lumox 2 is over 25,000 lines of C++.
Reviews: "Lumox 2 delivers an excellent gameplay experience that is both fun and addictive." 8.25 / 10 rating — Inside Mac Games "In short, Lumox 2 is breathtaking just to look at, and very, very engrossing to play." — MacWorld Click here to visit the Lumox 2 page Click here to watch a movie of Lumox 2 (32MB, MOV)
Independently Published Games (Flash 9 / ActionScript 3)
Xonf
Save humanity from an invasion by a never ending swarm of aliens, each of which is different. In this top-down space shooter, the enemies and their flight paths are procedurally generated, so they are always different. The shield reflection and combo mechanics are inspired by the old-school classic Mars Matrix.
Space Miner
Pilot your space ship through dangerous asteroid fields to collect precious crystals. Avoid the spike balls and turrets that oppose you.
How Many Elements Can You Name in 10 Minutes?
Test your knowledge of chemistry. How many elements can you name in 10 minutes?
Cave Flyer
Fly your ship through an ever winding and shrinking cave. Go as far as you can.
Magic Plant
Miscellaneous
TinyML
TinyML is a minimal, polymoprhic, lazy functional programming language implemented in SML. Including lexical analysis, parser, evaluator, static type checker, and test cases,
the source code for TinyML is under 700 lines of code. The type system supports arbitrary algebraic recursive data types, such as lists, tuples, trees and options.
Click here to visit the TinyML page
Squishy Blue Bubble!!
Squishy Blue Bubble!! is a toy for Mac OS X Dashboard. It is a squishy bubble that follows the mouse. It realistically bounces, jiggles, and rolls. The bubble's physics are simulated
as a fully connected graph of point-masses and springs, which are subject to friction when in contact with the bubble's container. On May 3, 2006, Squishy Blue Bubble was the most downloaded widget on Apple.com.
Texas Hold 'Em Oracle
Mac OS X Graphics Demos
Fractalicious
Fractalicious renders Julia fractals in real-time. Optimizations include an adaptive-subsampling algorithm and unrolled loops. It also has an optional real-time 'backlighting' effect.
Fractalicious is a Mac OS X application written in C++.
Plant Growth
PlantGrowth generates 3D plants based on a genetic code in realtime and renders them in OpenGL. This program is open source and compiles on both Mac OS X and Windows.
OpenGL Feedback
Feedback illustrates how to create a warping feedback effect (ala G-Force or Fractogroovalicious,) in OpenGL by rendering the screen to a texture and applying that texture to a wapring surface. It is like what happens when there are two mirrors facing each other, and one of the mirrors is bending. This program is open source.
Procedural Planet
Planet Discordia is generated entirely from scratch by first tesselating a sphere into triangles, then perturbing it with fractal noise and smoothing. Finally, the mesh is colored based on altitude relative to sea level.
This program is open source and compiles on both Mac OS X and Windows.
Real-Time Iterated Function Systems in OpenGL
Thousands of Tiny Dots
Windows Graphics Demos
I wrote these programs in C++ for Windows. They ran in real-time on a computer with a 600 mhz Intel processor.
Real-time Ray Tracing
This demo renders 3 spheres using real-time ray tracing with diffuse shading and shadows. After ray tracing, a back lighting effect is applied.
This was my entry for the Flipcode light and shadow demo contest in 2000.
Software 3D Engine
This demo shows a software 3D triangle rasterizer (i.e. hardware graphics acceleration is not used), with z-buffer, flat shading and motion blur, written in C++.
Hazy Lenses
Hazy Lenses precalculates a lookup table for a bilinear-sampling lense distortion effect, which allows a large number of lense distortions to be applied.
In addition to the lense distortion effects, there is some feedback.
Movie (1MB, MOV)
Bubbles and Water
This demo consists of a particle system of bubbles and a water ripple effect.
Metaballs and Burn Transition
This demo consists of 2D metaballs and a burn transition effect that is accomplished by blending several images based on a time-varying threshold.
Independently Developed Websites
MakeCloud.com
FeedMarklet.com
Video Lecture Database
WizzardWiki
Work for NolteMedia
UrbanStreamRestoration.com
Work for The Learning Annex, LLC.
BigMoneyExpo.com
OneMinuteU.com
'What are my friends learning?' Facebook Application
Computer Vision Experiments
iSight Image Classifier
ActionScript 3 Edge and Motion Detector
|