Christopher Batty

Associate Professor
Scientific Computation Group and Computer Graphics Lab
David R. Cheriton School of Computer Science, University of Waterloo

Office: 3605 Davis Centre (DC3605)
Brief Bio Google Scholar DBLP

Join my lab, the Computational Motion Group:
I am always on the lookout for highly motivated and hard-working potential graduate students to work with, as well as current Waterloo undergraduates for undergraduate research positions (URA or USRA). There may also be opportunities for postdocs with appropriate expertise.

Recent group news:


My group pursues research in Physics-Based Animation, which combines computer graphics and computational physics — see our Perspective piece in Science for an overview, or this Motherboard article for a more fun take. My students and I make up the Computational Motion Group at Waterloo, and we are affiliated with the Computer Graphics Lab and the Scientific Computation Group. Our research often focuses on the simulation of liquids and gases, but we are broadly interested in physical simulation as a tool for generating, controlling, and predicting motion of all kinds. We strive to design algorithms that are supported by sound physical, mathematical, and geometric principles, while being amenable to efficient and robust practical implementation.

We have developed methods for, among other things...
  • interactions between dynamic objects (e.g., hair, cloth, elastic bodies, rigid bodies) and fluids
  • animating and representing thin splashes and droplets
  • viscous and non-Newtonian liquids which display exotic behaviours like coiling and bouncing
  • surface tension-driven phenomena, including small-scale liquid droplets, bubbles, and foams
  • solving PDEs in a spatially adaptive fashion, especially on tetrahedra and quad/octrees
  • evolving multimaterial flows and geometries
  • constructing meshes that enable simulations involving complex shapes
Applications in the animation and visual effects industries are a key motivation for some of our work. My students and I have collaborated with Side Effects Software (makers of Houdini), and I have previously worked with Weta Digital, Exocortex Technologies, and the (now-defunct VFX division of) Frantic Films. Aspects of my research have been incorporated into major fluid animation software packages by Side Effects Software (Houdini's FLIP Fluid solver), Blender's FlipFluids plugin, Autodesk (Maya/Bifrost), Exocortex Technologies (MaelstromFX), and Navié (EFFEX), and as a result have contributed to dozens of movies from major studios. While at Frantic Films, I personally worked on Superman Returns, Scooby Doo 2: Monsters Unleashed, and Wes Craven's Cursed.

I created and continue to manage the Physics-Based Animation blog, which catalogues papers, people, and software in this area. I have also collected links to a few pieces of advice for students that you may (or may not) find useful.

Fast Marching-Cubes-Style Volume Evaluation for Level Set Surfaces
T. Takahashi & C. Batty. To appear in Journal of Computer Graphics Tools.
A fast, self-contained code for computing per-cell volume and surface area from grid-based implicit surfaces, such as signed distance fields (level sets), in 2D and 3D.
FrictionalMonolith: A Monolithic Optimization-based Approach for Granular Flow with Contact-Aware Rigid-Body Coupling
T. Takahashi & C. Batty. ACM SIGGRAPH Asia 2021 (Transactions on Graphics, 40(6), 2021).
A method for contact-aware simulation of continuum granular media (sand, grain, beads, etc.) undergoing mutual interactions with multiple colliding rigid bodies, with support for exact friction cones.
[Project] [Paper (PDF)] [Video (MP4)]
Monolith: A Monolithic Pressure-Viscosity-Contact Solver for Strong Two-Way Rigid-Rigid Rigid-Fluid Coupling
T. Takahashi & C. Batty. ACM SIGGRAPH Asia 2020 (Transactions on Graphics, 39(6), 2020).
A method for tightly coupling rigid bodies undergoing frictional contact with inviscid, viscous, and non-Newtonian fluids, to efficiently enable more complex interactions.
[Project] [Paper (PDF)] [Supplemental (PDF)] [Video (MP4)] [Journal]
Constraint Bubbles and Affine Regions: Reduced Fluid Models for Efficient Immersed Bubbles and Flexible Spatial Coarsening
R. Goldade, M. Aanjaneya, & C. Batty. ACM SIGGRAPH 2020 (Transactions on Graphics, 39(4), 2020).
A fast method to incorporate air bubbles into liquid simulators, along with a low-overhead spatial adaptivity approach based on coarsened regions with exactly incompressible affine vector fields.
Update: Our constraint bubbles technique appears as the "air incompressibility" feature in Houdini, as of Houdini 16.5.
[Paper (PDF)] [Video (MP4)] [Code (Github)] [Project] [Journal]
A Practical Octree Liquid Simulator with Adaptive Surface Resolution
R. Ando & C. Batty. ACM SIGGRAPH 2020 (Transactions on Graphics, 39(4), 2020).
An adaptive liquid simulator that allows changing resolution at the liquid surface, including a simpler discretization for the pressure projection near octree T-junctions.
[Paper (PDF)] [Journal] [Video (MP4, 430MB)]
Fast and Scalable Solvers for the Fluid Pressure Equations with Separating Solid Boundary Conditions
J. Lai, Y. Chen, Y. Gu, C. Batty, & J.W.L. Wan. Eurographics 2020 (Computer Graphics Forum, 39(2), 2020).
We develop and evaluate a trio of efficient methods, including a Full-Approximation-Scheme (FAS) multigrid solver, for the linear complementarity problem arising from fluid pressure projection with separating solid boundary conditions.
[Paper (PDF)] [Video (MP4)] [Journal]
Mandoline: Robust Cut-Cell Generation for Arbitrary Triangle Meshes
M. Tao, C. Batty, E. Fiume, & D.I.W. Levin. ACM SIGGRAPH Asia 2019 (Transactions on Graphics, 38(6), 2019).
A method (and library) to robustly and efficiently generate polyhedral cut-cell meshes by intersecting a triangle mesh with a background uniform Cartesian grid.
[Project] [Paper (PDF)] [Supplemental (PDF)] [Journal]
A Multi-Scale Model for Coupling Strands with Shear-Dependent Liquid
Y. Fei, C. Batty, C. Zheng, & E. Grinspun. ACM SIGGRAPH Asia 2019 (Transactions on Graphics, 38(6), 2019).
A framework for simulating strands (hair, rods, fibres, etc.) interacting with various gooey liquids.
[Project] [Paper (PDF)] [Supplemental (PDF)] [YouTube] [Two Minute Papers episode] [Compressed Video (MP4, 472MB)] [Full Video (MP4, 1.4GB)] [Journal]
An Adaptive Variational Finite Difference Framework for Efficient Symmetric Octree Viscosity
R. Goldade, Y, Wang, M. Aanjaneya, & C. Batty. ACM SIGGRAPH 2019 (Transactions on Graphics, 38(4), 2019).
A method to solve the viscosity equations for liquids on octrees up to an order of magnitude faster than uniform grids, using a symmetric discretization with sparse finite difference stencils, while achieving qualitatively indistinguishable results.
Update: This technique is available in SideFX Software's Houdini, as of Houdini 18.5.
[Project] [Paper (PDF)] [Supplemental (PDF)] [Code (Github)] [Two Minute Papers Episode] [Video (YouTube)] [Video (MP4, 183MB)] [Journal]
A Unified Simplicial Model for Mixed-Dimensional and Non-Manifold Deformable Elastic Objects
J. Chang, F. Da, E. Grinspun, & C. Batty. Proceedings of the ACM on Computer Graphics and Interactive Techniques (Symposium on Computer Animation) 2(2), 2019.
A method to simulate complex deformable elastic bodies consisting of mixed-dimensional components represented with potentially non-manifold simplicial meshes, while leveraging existing solid, shell, and rod discretizations.
[Project] [Paper (PDF)] [Video (MP4, 131MB)] [Journal]
An Efficient Geometric Multigrid Solver for Viscous Liquids
M. Aanjaneya*, C. Han, R. Goldade, & C. Batty. Proceedings of the ACM on Computer Graphics and Interactive Techniques (Symposium on Computer Animation) 2(2), 2019. (*Lead and supervising author.)
A fast multigrid method that can solve the regular grid viscosity equations 3.5 - 13.8 times faster than with a naive multigrid approach.
[Project] [Paper (PDF)] [Video (MP4, 119MB)] [Journal]
A Multi-Scale Model for Simulating Liquid-Fabric Interactions
Y. Fei, C. Batty, C. Zheng, & E. Grinspun. ACM SIGGRAPH 2018 (Transactions on Graphics, 37(4), 2018).
A numerical method based on mixture theory to animate wetting effects of permeable cloth and yarn-based fabrics interacting with water, including diffusion, drag, capture, and dripping.
[Journal] [Paper (PDF)] [Supplemental (PDF)] [Project] [Code (Github)] [YouTube] [Compressed Video (MP4, 40MB)] [Full Video (MP4, 1.5GB)]
Power Diagrams and Sparse Paged Grids for High Resolution Adaptive Liquids
M. Aanjaneya*, M. Gao*, H. Liu, C. Batty, E. Sifakis. ACM SIGGRAPH 2017 (Transactions on Graphics, 36(4), 2017). (*Joint first authors.)
A method for adaptive staggered octree liquid simulation allowing the surface to cut arbitrarily through level transitions, using power diagrams for accuracy and the SPGrid data structure for efficiency.
[Journal] [PDF] [Project] [Video(200MB)] [Supplemental PDF]
Variational Stokes: A Unified Pressure-Viscosity Solver for Accurate Viscous Liquids
E. Larionov*, C. Batty*, & R. Bridson. ACM SIGGRAPH 2017 (Transactions on Graphics, 36(4), 2017). (*Joint first authors.)
By solving pressure and viscosity simultaneously (i.e., a Stokes problem), we more accurately simulate viscous liquids, e.g., recovering the classic liquid rope coiling instability of honey and molasses.
[Journal] [PDF] [Project] [YouTube] [Supplemental PDF] [Main Video(200MB)] [Supplemental Video(54MB)] [Two Minute Papers episode]
A Multi-Scale Model for Simulating Liquid-Hair Interactions
Y. Fei, H. Maia, C. Batty, C. Zheng, & E. Grinspun. ACM SIGGRAPH 2017 (Transactions on Graphics, 36(4), 2017).
We combine a grid-based liquid simulator, a discrete elastic rod hair model, and a new reduced-dimensional model for liquid adhering to the hair, to animate a variety of liquid-hair effects.
[Journal] [Project] [PDF] [Supplemental PDF] [YouTube] [Video(2.1GB)] [Two Minute Papers episode]
A Positive-Definite Cut-Cell Method for Strong Two-Way Coupling Between Fluids and Deformable Bodies
O. Zarifi & C. Batty. ACM SIGGRAPH/Eurographics Symposium on Computer Animation 2017.
We extend a common family of cut-cell methods [Roble2005,Batty2007,Ng2009,Azevedo2016,etc] to deformable-fluid coupling while ensuring the linear systems remain symmetric positive-definite.
[Journal] [PDF] [Video]
A cell-centred finite volume method for the Poisson problem on non-graded quadtrees with second order accurate gradients
C. Batty. Journal of Computational Physics, 331, 2017.
The first cell-centred finite volume method for the variable-coefficient Poisson problem on quadtree grids with no grading restrictions whatsoever between neighbouring cells that provides second order accuracy in the solution and its gradients.
[Preprint PDF] [Journal]
Surface-Only Liquids
F. Da, D. Hahn, C. Batty, C. Wojtan, & E. Grinspun. ACM SIGGRAPH 2016 (Transactions on Graphics, 35(4), 2016).
By building on boundary element techniques, we are able to simulate surface-tension dominated liquid effects, such as droplet collisions, fluid chains, and crown splashes, using velocity data defined only on a triangulated surface mesh.
[Project] [PDF] [Video] [YouTube] [Journal] [Two Minute Papers episode]
Preserving Geometry and Topology for Fluid Flows with Thin Obstacles and Narrow Gaps
V. Azevedo, C. Batty, & M. Oliveira. ACM SIGGRAPH 2016 (Transactions on Graphics, 35(4), 2016).
We describe techniques to improve the treatment of fluid flows around arbitrarily thin solids and thin gaps in regular grid fluid simulations, including a topology-aware graph-based pressure projection for sub-grid flows and a conforming velocity interpolant to improve particle trajectories in polyhedral cut cells.
[PDF] [Video] [Project] [Journal] [YouTube]
A Practical Method for High-Resolution Embedded Liquid Surfaces
R. Goldade, C. Batty, & C. Wojtan. Eurographics 2016 (Computer Graphics Forum, 35(2), 2016).
We describe a trio of practical and efficient techniques that drastically improve the simulation quality achieved when using narrow-band high-resolution level set surfaces embedded within inexpensive low-resolution fluid simulations.
[Project] [PDF] [Video] [YouTube] [Journal]
Continuum Foam: A Material Point Method for Shear-Dependent Flows
Y. Yue, B. Smith, C. Batty, C. Zheng, & E. Grinspun. ACM Transactions on Graphics, 34(5), 2015 (presented at SIGGRAPH Asia 2015).
A material point method for animating the behavior of dense foams, such as whip cream or shaving cream, using a continuum-based non-Newtonian fluid model that supports shear thinning effects. Our model also supports shear thickening, which enables the animation of unusual materials like silly putty or "oobleck".
[PDF] [Project] [YouTube] [Journal]
Double Bubbles Sans Toil and Trouble: Discrete Circulation-Preserving Vortex Sheets for Soap Films and Foams
F. Da, C. Batty, C. Wojtan, & E. Grinspun. ACM SIGGRAPH 2015 (Transactions on Graphics, 34(4), 2015).
A "surface-only" method for simulating the complex dynamics of soap bubbles and foams, using a vortex sheet method with surface tension forces on a non-manifold triangle mesh.
[PDF] [Project] [Video] [YouTube] [Journal]
Multimaterial Mesh-Based Surface Tracking
F. Da, C. Batty, & E. Grinspun. ACM SIGGRAPH 2014 (Transactions on Graphics, 33(4), 2014).
The first collision-safe triangle mesh-based surface tracking method for evolving multimaterial geometries, including strategies for multimaterial topological changes: merging, splitting, and the foam-type operations known as T1 and T2 processes.
[PDF - High] [PDF - Low] [Project] [Video] [Code] [Journal] [Two Minute Papers episode]
Discrete Viscous Sheets
C. Batty, A. Uribe, B. Audoly, & E. Grinspun. ACM SIGGRAPH 2012 (Transactions on Graphics, 31(4), 2012).
A method for animating thin sheets of highly viscous liquid, drawing on and extending techniques from the simulation of thin shells and cloth.
[PDF] [Project] [Video] [Journal]
A Simple Finite Volume Method for Adaptive Viscous Liquids
C. Batty & B. Houston. ACM SIGGRAPH/Eurographics Symposium on Computer Animation 2011.
An Eulerian approach to achieve higher detail animations of high viscosity liquid behaviour (buckling, coiling, etc.) on structured tetrahedral meshes.
[PDF] [Journal] [Video]

Matching Fluid Simulation Elements to Surface Geometry and Topology
T. Brochu, C. Batty, & R. Bridson. ACM SIGGRAPH 2010 (Transactions on Graphics, 29(4), 2010).
By adding simulation degrees of freedom exactly where they provide the most benefit, and using a triangle mesh-based surface representation, we show how to achieve much greater detail in liquid animations.
[PDF] [Project] [Journal]

Tetrahedral Embedded Boundary Methods for Accurate and Flexible Adaptive Fluids
C. Batty, S. Xenos, & B. Houston. Eurographics 2010 (Computer Graphics Forum, 29(2), 2010).
This paper demonstrates that combining embedded boundary methods with tetrahedra-based fluid simulation enables spatially adaptive liquid simulation with more accurate enforcement of air and solid boundary conditions.
[PDF] [Project] [Journal]

Accurate Viscous Free Surfaces for Buckling, Coiling and Rotating Liquids
C. Batty & R. Bridson. ACM SIGGRAPH/Eurographics Symposium on Computer Animation 2008.
A simple method to enforce physically correct forces at the surface of viscous liquids, such as honey or syrup, which in turn lets us reproduce previously very difficult effects like buckling, coiling, and rotational motion.
[PDF] [Project] [Journal]

A Fast Variational Framework for Accurate Solid-Fluid Coupling
C. Batty, F. Bertails, & R. Bridson. ACM SIGGRAPH 2007 (Transactions on Graphics, 26(3), 2007).
An optimization-based framework for accurately incorporating irregularly shaped rigid objects into standard grid-based fluid simulations, eliminating spurious "stairstep" artifacts and leakage that plagued previous methods.
[PDF] [Project] [Journal]

Hierarchical RLE Level Set: A Compact and Versatile Deformable Surface Representation
B. Houston, M. Nielsen, C. Batty, O. Nilsson, & K. Museth. ACM Transactions on Graphics, 25(1), 2006.
A compressed representation of level set implicit surfaces that avoids storing and processing irrelevant data far from the surface itself, allowing more efficient treatment of operations like morphing and liquid surface tracking.
[PDF] [Project] [Journal]

Short(er) Papers, Technical Briefs, Posters, Sketches, Theses, etc.:
Spatially Adaptive Long-Term Semi-Lagrangian Method for Accurate Velocity Advection
T. Sato, C. Batty, T. Igarashi, & R. Ando. Computational Visual Media, 2018.
A velocity advection technique that traces back multiple steps and accounts for pressure gradients to reduce numerical dissipation caused by frequent interpolation.
[PDF] [Video] [YouTube] [Project]

Regional Time Stepping for SPH
P. Goswami & C. Batty. Eurographics Short Papers, 2014.
A method to accelerate weakly compressible SPH simulations by exploiting spatially varying, asynchronous time integration.
[PDF] [Journal]

Computational Physics in Film
R. Bridson & C. Batty. Science 330(6012), 2010.
A perspective piece on the increasingly common use of physical simulation in visual effects for film, along with discussion of some major challenges that remain.
[PDF] [Journal]

Simulating Viscous Incompressible Fluids with Embedded Boundary Finite Difference Methods
C. Batty. PhD Thesis, University of British Columbia.
[PDF] [Thesis Repository]

Visual Simulation of Wispy Smoke
C. Batty & B. Houston. ACM SIGGRAPH Sketches, 2005.
A description of the smoke simulation techniques used on Wes Craven's werewolf movie Cursed.
[PDF] [Project] [Journal]

Gigantic Deformable Surfaces
B. Houston, M. Nielsen, C. Batty, O. Nilsson, & K. Museth. ACM SIGGRAPH Sketches, 2005.
A preview of the HRLE level set described more fully in the TOG paper above.
[PDF] [Project] [Journal]

RLE Sparse Level Sets
B. Houston, M. Wiebe, & C. Batty. ACM SIGGRAPH Sketches, 2004.
A compressed level set representation that was the precursor to the eventual HRLE level set above.
[PDF] [Project] [Journal]

Student Supervision:

I work with a team of skilled and dedicated graduate students who collectively comprise the Computational Motion Group.(Join us!)

Current: Past:

CS335 Computational Methods in Business and Finance - Fall 2021
CS335 Computational Methods in Business and Finance - Winter 2021
CS335 Computational Methods in Business and Finance - Fall 2020
CS370 Numerical Computation - Winter 2020
CS475/675 Computational Linear Algebra - Spring 2019
CS888 Advanced Topics in Computer Graphics: Physics-Based Animation - Winter 2019
CS370 Numerical Computation - Fall 2018
CS370 Numerical Computation - Spring 2018
CS370 Numerical Computation - Winter 2017
CS370 Numerical Computation - Spring 2016
CS888 Advanced Topics in Computer Graphics: Physics-Based Animation - Winter 2016
CS475 Computational Linear Algebra - Spring 2015
CS370 Numerical Computation - Fall 2014
CS888 Advanced Topics in Computer Graphics: Physics-Based Animation - Winter 2014

Code and Data:

Below you'll find miscellaneous sample code and data from some of my projects; in other cases you can find the code for a given publication on its associated project page (linked above). Buyer beware, of course, but I'd love to hear from you if you do put any of it to use!

Mandoline - Cut Cell Mesh Generator
The code for our cut-cell mesh generator. It takes in a triangle mesh describing a geometry, and outputs cut-cells; i.e., a volumetric mesh describing the intersection of that triangle mesh with a uniform regular grid, suitable for a range of simulation problems, such as fluid dynamics with embedded boundary methods. The method is described in our 2019 SIGGRAPH Asia paper "Mandoline: Robust Cut-Cell Generation for Arbitrary Triangle Meshes".
Los Topos - Mesh-Based Surface Tracker
The code for our multimaterial mesh-based surface tracking library, as described in our appropriately-named SIGGRAPH 2014 paper "Multimaterial Mesh-Based Surface Tracking". It generalizes and extends the original El Topo framework of Tyson Brochu and Robert Bridson to the case of multiple materials, and includes an improved merging strategy that is effective even in the standard two-material case.
3D Liquid Simulator code
A minimal grid-based 3D liquid simulator and OpenGL viewer, using semi-Lagrangian advection, volumetric particles for the liquid, ghost fluid free surface conditions, and support for irregular solid boundaries using the variational/finite-volume approach from our SIG'07 paper. The only dependencies should be the GLUT library, so it's hopefully easy to set up and experiment with. Here's a sample clip. Update: I also added another version with our variational viscosity technique implemented in 3D.
[Inviscid code, on GitHub] [With viscosity, on GitHub]
2D Variational Viscosity code
Sample code illustrating how to use our variational viscosity discretization to support rotation and buckling and variable viscosity within the liquid solver below. (The link for the comparable 3D code is above.)
[Github link]
2D Variational Pressure Projection with Rigid Body Coupling code
Sample codes illustrating how to use our variational pressure projection to support static irregular geometry within a very simple 2D "stable fluids" style fluid solver.
Air - Single phase fluid solver with static obstacles.
Liquid - Free surface liquid solver with static obstacles. This code combines our irregular solid boundary discretization with the 2nd order free surface pressure boundary condition of Enright et al. 2003.
NEW Liquid with a Rigid Body - I've recently added two-way rigid body coupling, and posted this to Github.
SDFGen: Signed Distance Field Generator for triangle meshes
A simple command-line utility to construct a signed distance field from a triangle mesh, which is often useful for physics-based animation, such as in processing collisions for rigid objects.
[Github link]
Non-manifold Simplicial Complex Mesh Library
This is my own implementation of a non-manifold simplicial complex-based mesh library, including arbitrary data associated to vertices, edges, triangles and tetrahedra. It's essentially my spin on the data structure outlined in "Building Your Own DEC at Home" with an API similar to "Design, Implementation, and Evaluation of the Surface_mesh Data Structure". The main goal is to allow non-manifold geometry and mixed dimensional components (tets, tris, segments), while being relatively simple to manipulate. It's a work in progress and not currently being maintained.
[GitHub link]
Watertight Stanford bunny
I ran into some problems due to the holes in the bunny, and since I couldn't find a watertight version online, I made one myself (for non-commercial use, of course). It's also in OBJ format, rather than the original PLY. Thanks to the Stanford 3D Scanning Repository for the original model.
2D Polygon Moment of Inertia Tensor Code
I couldn't find any convenient code for computing 2D inertia tensors from the vertices and edges of a simple polygon, so I adapted/specialized Michael Kallay's excellent 3D code from the Journal of Graphics Tools article Computing the Moment of Inertia of a Solid Defined by a Triangle Mesh. The article mentions how to handle 2D bodies, but the accompanying code supports only 3D objects. My code provides the corresponding 2D implementation, while retaining the speed, brevity, and clarity of the original.
Higher Order Data Extrapolation in the Normal Direction
A sample Matlab implementation of quadratic extrapolation in the normal direction of a function from a region defined by a given signed distance function into a surrounding undefined region, essentially following Ng et al. 2009, Min & Gibou 2007, and Aslam 2003. This can be useful for extrapolating known velocities from a fluid region into a solid region, such as in the Ghost Fluid Method, for example. [Note: I haven't actually rigourously verified the target order of convergence is achieved.]

For two years following my PhD (2011-2013) I was a postdoc in the Computer Science Department at Columbia University in New York City, supported by an NSERC Banting Fellowship. My advisor was Dr. Eitan Grinspun.
My PhD is from the Computer Science Department at the University of British Columbia in Vancouver, BC. I worked under the supervision of Dr. Robert Bridson, beginning in 2005 and defending in 2010. During my degree I also did some work for Ottawa-based Exocortex Technologies, Weta Digital in New Zealand, and Intel's Applications Research Lab in Santa Clara, California.
Prior to my academic career, I spent 2004-2005 working at former Winnipeg-based visual effects studio, Frantic Films, where I was a Software Engineer in Research and Development. My job was to develop physics tools for artists based on recent academic research, including smoke, water, and rigid and deformable bodies. These tools were used on various films, including Superman Returns, Scooby-Doo 2: Monsters Unleashed, and Cursed. (Much of the software division is now at Thinkbox Software.)
I'm a graduate of the Computer Science Honours Co-op program at the University of Manitoba, having completed my Bachelor of Computer Science degree in the fall of 2003. In addition to Frantic Films, I also interned at OTI (original developers of Eclipse, now a subset of IBM) and Protegra, Inc.