stuff I've done and stuff I like


Current Interests

February 16, 2020by Eric Haines

This page is mostly about my professional interests, with some hobby bits interspersed. You can also check LinkedIn.

I recently worked on a series of seven short talks on the basics of ray tracing.

I'm a cochair for I3D 2020, sadly delayed this year.

I am a co-editor for the book Ray Tracing Gems, released in March 2019. On that site we provide an unofficial version of the free PDF version of the book, one with the errata corrected.

I helped coauthor Real-Time Rendering, now in its fourth edition, released in 2018. The book's site has and points to all sorts of resources. My portal page sums up what real-time computer graphics resources I use the most. There are also pages on ray tracing and WebGL resources. I maintain the 3D Object Intersection Page, a handy table of references to algorithms for object/object intersection, and the obscure and entertaining (IMO) Real Artifacts collection. Oh, and a free graphics books list, a recent graphics books list, and a recommended graphics books list.

I created and narrated Udacity's free course "Interactive 3D Graphics"; read more about it here. The site is starting to decay, so this page can help you get going. If you don't like video instruction, you can instead download the 800+ pages of text making up the course.

I'm a founder and editor of the free & open-access Journal of Computer Graphics Techniques (JCGT), the successor to the Journal of Graphics Tools (JGT).

I maintain the Graphics Gems, Journal of Graphics Tools, and Ray Tracing Gems code repositories.

I like Minecraft, and wrote Mineways, a model exporter for the game. Andrew Glassner and I collaborated on T2Z, a little art project using Processing. I also like to keep track of basic resources for 3D printing.

My various other public repositories are here, and include modifiable illusions (see one here) and a simple, flexible tool for checking LaTeX and text files for errors.

I finally made a demo for the demoscene, which was fun to do. Fourth place, woo hoo, and about what it deserved.

I also have an ancient personal page with book and game recommendations, plus wildflower, tree, and bird identification programs. The wildflower program in particular is surprisingly popular.

People I'm not: the comedian/one-man-band/juggler/stilt-walker, the Nashville songwriter who penned "Moonshine Margaritas" and other tunes, the photographer, and the karma-filled Unity developer eric5h5, to name a few.


Past Interests

I helped start and worked on the editorial board for many years of the journal of graphics tools. This was a journal dedicated to presenting practical tools and techniques. The web site used to have useful code for some of the articles - sadly, CRC has let this repository founder. The code can still be found via the Way Back Machine.

I created and occasionally help maintain the ACM TOG Software Related Tools and Research Resources pages. Mentioned mostly so I can find the links.

The now-slumbering Ray Tracing News contains articles about ray tracing. Nowadays I put my efforts into this page of ray tracing resources. I also maintained The Realtime Raytracing Realm page of real-time ray tracing demos. Dated now, but some of the demos still astound me (256 byte ray tracer? Gotta love it).

Decades ago I created the Standard Procedural Databases (SPD) software package, which occasionally still gets used for testing ray tracers. It was presented in an IEEE CG&A article in November 1987.

For I3D 2008 John Owens, Spike Hughes, and I came up with a pub quiz, meant to take about an hour for teams of about 6 people, 10 minutes per set of questions. Here is the answer key. Here's a photo of the scoreboard near the end.

For some years I ran the Fantasy Graphics League - demented or silly, you decide...

Kind of like me (I'm less blotchy - really - though am certainly noisier):

Eric at SIGGRAPH 2014 by scanfab on Sketchfab

Slide Sets

Feel free to use/copy/modify these slidesets in a reasonable fashion. Microsoft provides a free PowerPoint viewer if you need it. Talks are listed with most recent first.

  • Ray and Path Tracing Today, September 30, 2019, updated 90-minute talk for UPenn GPU programming and architecture class. Note: a number of people at NVIDIA kindly let me reuse their slides, some used here (and credited as I could recall). This lecture evolved into a set of short talks on the basics of ray tracing.
  • A Fast Forward through Ray Tracing Gems, March 20, 2019, Game Developers Conference 2019. PDF of slides here (login required).
  • Ray Tracing, at Last, October 3, 2018, talk for UPenn GPU programming and architecture class.
  • Three.js basics, August 3, 2017, SIGGRAPH 2017 Course An Interactive Introduction to WebGL and Three.js. Also run again at SIGGRAPH 2018. Use arrow keys to view the slides. Video from SIGGRAPH 2017.
  • Computer Graphics in a MOOC: Lessons Learned, August 11, 2014, SIGGRAPH 2014 BOF: A summary and update of the full lecture below.
  • Computer Graphics in a MOOC: Beyond the Hype and Hysteria, November 4, 2013, CS dept. of the University of Pennsylvania. Abstract: "MOOCs, massive open online courses, have been in the news. The MOOC concept has been called everything from the great equalizer to a form of colonialism. The Editor-in-Chief of the ACM wonders if they will destroy academia and wishes he could 'wave a wand and make MOOCs disappear'. This talk will go beyond the hype and hysteria. I spent half a year developing the MOOC 'Interactive 3D Graphics' with Udacity, and the past half-year on the forum helping students progress through the material. Well over 30,000 people have signed up for this self-paced course so far. Beyond such bragging-rights numbers and the pros and cons of MOOCs, I'll focus on the course itself: how it was produced and how it works, the web technologies three.js and WebGL used to drive it, and things that went right and went wrong. There will be a quiz, if not two or three."
  • Mineways: 3D Printing for the Game Minecraft, May 2012, Autodesk Technical Summit. A talk about my Mineways project.
  • Ray Tracing: Strengths and Opportunities, August 10, 2008, Symposium on Interactive Ray Tracing 2008. Powerpoint 2007 slides and older Powerpoint format slides available. There's also a fast-forward version of the talk. Abstract: "With the surge of interest in ray tracing for interactive rendering, it is worth reviewing what benefits this algorithm has to offer, and what challenges lay ahead. Some characteristics of ray tracing fit well with modern computer architectures, others become more difficult to use as processors evolve, and a few ray tracing "features" are probably distractions. The evolution of various computational elements--processing power, cache, bandwidth, latency, I/O--affect ray tracing differently than they do rasterization. At the same time, the boundaries between these two rendering methods is blurring as algorithmic elements from ray tracing become implemented in GPU shader code. This presentation explores how ray tracing contrasts with Z-buffering in its current form and makes some predictions about possible futures."
  • Subtle Tools, July 2003, NVIDIA University keynote. A one-hour talk about little-known but useful graphics methods, along with exhortations to the research community to also publish minor results. Includes five quiz questions to test your graphics knowledge.
  • Real-Time Hardware, November 2002, two hour-long lectures on this topic for the advanced rendering course at Cornell.
  • The Demo Scene, July 2002, presented at SIGGRAPH 2002. A panel consisting of a number of short talks on aspects of the Demo Scene. Even if you don't want to read the text, the bundle is worth downloading for the two "Pixor" animations by Theo Engell-Nielsen and others. Related pages can be found at pouët and, and our own collection of real-time raytracer demos. Especially noteworthy are the design notes about Heaven Seven and Sonnet; also, definitely check out the amazing Tube demo, a 256-byte ray tracer; video here).
  • Real-Time Shadows, March 2001, presented at GDC 2001. An hour-long lecture by Tomas Möller and me, summing up shadowing techniques which can be used for dynamic scenes at interactive rates. There are notes for some of the slides, which consists of text slides cut from the final talk (mostly implementation notes and additional technique info).
  • Stopping Pipeline Starvation, July 2000, presented at SIGGRAPH 2000 in Course 43, Aggressive Performance Optimizations for 3D Graphics. Some notes on trends, LODs, and simplification. My favorite slide is from John Poulton at UNC, showing the faster than Moore's Law speed increase of graphics acceleration hardware.
  • Is the Hardware Z-Buffer Doomed?, January 2000, STC talk at Cornell. Flaws and solutions to Z-Buffer shortcomings. I like the "look at all the buffers" slide in this one.

Selected Publications

You could check my listing at the ACM Digital Library.

  • Ray Tracing Gems, edited by Eric Haines and Tomas Akenine-Möller, 607 pages, from Apress, ISBN-13: 978-1484244265, ISBN-10: 1484244265. Open Access, so free online.
  • Real-Time Rendering, 4th edition, by Tomas Akenine-Möller, Eric Haines, Naty Hoffman, Angelo Pesce, Michał Iwanicki, and Sébastien Hillaire, 1198 pages, from A K Peters/CRC Press, ISBN-13: 978-1138627000, ISBN-10: 1138627003.
  • "An Introductory Tour of Interactive Rendering", Eric Haines, IEEE Computer Graphics and Applications, v. 26, no. 1, Jan./Feb. 2006, pp. 76-87. Abstract: The past decade has seen major improvements--in both speed and quality--in the area of interactive rendering. The focus of this article is on the evolution of the consumer-level personal graphics processor, since this is now the standard platform for most researchers developing new algorithms in the field. Instead of a survey approach covering all topics, this article covers the basics and then provides a tour of some parts the field. The goals are a firm understanding of what newer graphics processors provide and a sense of how different algorithms are developed in response to these capabilities. IEEE CG&A article link.
  • "Soft Planar Shadows Using Plateaus", Eric Haines, journal of graphics tools, v. 6, no. 1, 2001, p. 19-27. I decided to make this second draft available, since I briefly cover the algorithm at our GDC lecture. There are also some color comparison images and the abstract available.
  • Ray Tracing News, ed. Eric Haines. I have compiled articles related to ray tracing and rendering in general since 1987 and put them here. The collection is indexed by category. There is also a text archive of the issues, useful for doing grep or find-in-files on.
  • "Shaft Culling Tool," Eric Haines, journal of graphics tools, v. 5, no. 1, 2000, p. 23-26. Efficient, compact code for generating and testing 3D shafts. A shaft is the volume between two axis-aligned bounding boxes. This algorithm quickly forms this volume and efficiently tests boxes and spheres against it. It's handy for culling out things between a light source and a ground plane, for example. The abstract and code are also online.
  • "Triangle Intersection Tests," Eric Haines and Tomas Möller, Dr. Dobb's Journal, August 2000, code and listings online.
  • "Fast, Low Memory Z-Buffering when Performing Medium-Quality Rendering," Eric Haines and Steven Worley, journal of graphics tools, v. 1, no. 3, 1996, p. 1-5.
  • "Point in Polygon Strategies," Eric Haines, Graphics Gems IV, ed. Paul Heckbert, Academic Press, San Diego, 1994, p. 24-46. Various methods for testing whether a point is inside a polygon. Code available online in the Graphics Gems Repository; note that code has a newer test (CrossingsMultiply) that is often the fastest in its class.
  • "Shaft Culling for Efficient Ray-Traced Radiosity," Eric A. Haines and John R. Wallace, Photorealistic Rendering in Computer Graphics (Proceedings of the Second Eurographics Workshop on Rendering), Springer-Verlag, New York, 1994, p.122-138. Also in SIGGRAPH '91 Frontiers in Rendering course notes. Computing the amount two objects see each other can be approximated with ray tracing. By forming a tight polyhedral volume around the two objects and quickly comparing it to a bounding volume hierarchy, we generate a reusable candidate set of objects and bounding volumes to test with a set of rays.
  • "Efficiency Improvements for Hierarchy Traversal," Eric Haines, Graphics Gems II, ed. James Arvo, Academic Press, San Diego, 1991, p. 267-273. Expansion of parts of the "Tracing Tricks" article.
  • "Radiosity Bibliography," Eric Haines, in Global Illumination Algorithms, Donald P. Greenberg and Francois Sillion, Eurographics Technical report EG 91 TN, Eurographics Association, Aire-la-Ville, Switzerland, 1991. This bibliography is now maintained (and vastly expanded) by Ian Ashdown and is available online (follow the resources link).
  • "Ronchamp: A Case Study for Radiosity," Eric Haines, SIGGRAPH '91 Frontiers in Rendering course notes, July 1991. Discusses practical meshing, energy balance, sampling, and display problems when using meshed radiosity.
  • "Beams O' Light: Confessions of a Hacker," Eric Haines, SIGGRAPH '91 Frontiers in Rendering course notes, July 1991. Discusses using monte carlo techniques and ray tracing to create atmospheric volume effects. Technique used in The Key is Light film to create the dusty shafts of light in the church.
  • "Fast Ray-Convex Polyhedron Intersection", Eric Haines, Graphics Gems II, ed. James Arvo, Academic Press, San Diego, 1991, p. 247-250 and code. Essentially quickly clipping a ray against the set of planes defining the polyhedron. Code available online in the Graphics Gems Repository.
  • "A Ray Tracing Algorithm for Progressive Radiosity," John R. Wallace, Kells A. Elmquist, Eric A. Haines, Computer Graphics (SIGGRAPH '89 Proceedings), v. 23, no. 3, July 1989, p. 315-24. Occlusion testing for meshed radiosity can be done with ray tracing. Further discussion on the topic is available in The Ray Tracing News, v. 2, no. 6.
  • "Tracing Tricks," Eric A. Haines, SIGGRAPH '89 Introduction to Ray Tracing course notes, July 1989. Various efficiency scheme, spline surface intersection, and ambient lighting tricks. Reprinted in The Ray Tracing News, v. 2, no. 8.
  • "A Proposal for Standard Graphics Environments," Eric Haines, IEEE Computer Graphics and Applications, v. 7, no. 11, Nov. 1987, p. 3-5. Presentation of a set of programs which generate sets of standard scenes for testing ray tracing efficiency schemes. The SPD software package discussed is available online and is still being expanded (e.g. the famous teapot has been added, and the SPD now exports to many different file formats).
  • "Essential Ray Tracing Algorithms," Eric Haines, An Introduction to Ray Tracing, ed. Andrew Glassner, Academic Press, London, 1989, p. 33-77. Ray/object intersections and mappings, including ray/sphere, polygon, box, and quadrics.
  • "Ray Tracing Bibliography," Paul S. Heckbert and Eric Haines, An Introduction to Ray Tracing, ed. Andrew Glassner, Academic Press, London, 1989, p. 295-303. We have made this book free online.
  • "The Light Buffer: A Ray Tracer Shadow Testing Accelerator," Eric A. Haines, Donald P. Greenberg, IEEE Computer Graphics and Applications, v. 6, no. 9, Sept. 1986, p. 6-16. The basic ideas presented are classifying objects from the light's viewpoint, and caching shadowing objects. The classification scheme uses a modified z-buffer to create lists of objects in sorted order for each "pixel" the light sees and determining depths beyond which no light passes. The other technique presented is caching the object that was last intersected by a shadow ray and immediately testing this object for the next shadow ray for the same light at the same location in the ray tree. Shadow caching is simple and applicable to almost any ray tracer. Dieter Bayer implemented the light buffer for POV-Ray.
  • The Light Buffer: A Ray Tracer Shadow Testing Accelerator, Eric A. Haines, Master's Thesis, Program of Computer Graphics, Cornell University, Jan. 1986.


Here are a variety of images I've made or was involved with. Click on a thumbnail to see the full-sized version or try the demo.

Sphereflake Sphereflake in real-time on an NVIDIA Titan V graphics card using DXR. See the real-time ray tracing gallery for a variety of shots and more information.

LMV LMV, the Large Model Viewer, based on three.js. Used for displaying mechanical and architectural models from Fusion 360, Inventor, Revit, and other sources. I helped improve and maintain it.

DPG For the 25th anniversary of the Program of Computer Graphics at Cornell in 1998, I made a photomosaic of Don Greenberg out of students, teachers, and staff who had been at the lab over the years. Nineteen years later, in 2017, I made another one, adding a 3D viewer program for the fun of it. Find the earlier photo of Don in it and zoom in for a bit of inceptionism. Also, here's one I made for Carl Bass, for his going-away party at Autodesk.

T2Z T2Z stands for "time to z-axis," a little art project Andrew Glassner and I collaborated on and taught at The Studio at SIGGRAPH 2016. Take animations, stack the frames, make an isosurface, then 3D print or whatever else strikes your fancy. A great excuse for me to play with Processing and take several classes at Artisan's Asylum.

MOOC This is one of the demos from the free Interactive 3D Graphics MOOC I created for Udacity. I particularly like this demo, as it shows the series of matrices used in the rendering pipeline and lets the student see how various operations affect each.

My free Mineways software exports Minecraft models for display or 3D printing, allowing easy reuse or upload to SketchFab and other services. First released in 2011, as of 2017 the program is downloaded about 500 times a day.

OGS For many years I worked on a team building the One Graphics System. It is used by Maya, 3DS MAX, AutoCAD, Inventor, Fusion 360, Revit, and other Autodesk products for interactive display. For example, the NPR styles in 3DS MAX are performed by code I helped develop for OGS.

StudiodeskPrior to that I helped create and develop Autodesk's Architectural Studio product, a collaborative design tool written in Java. It built on the idea of a principal architect's use of sketch paper during conceptual design, providing tools such as a simplified 3D modeler and vector-based 2D drawing tools combined with image import and compositing.

plateaus My single pass plateaus shadow algorithm compared to Heckbert and Herf's multipass (256 passes in this case) planar shadow algorithm. Developed for Architectural Studio. Read the paper.

jewelry I worked on the renderers and ray tracer for TriSpectives; see their pages for many more images. The ray tracer was nothing special. It used a hierarchy of grids efficiency scheme, except that it was integrated into the hidden surface renderers to be used on demand - this makes rendering faster than pure ray tracing. Such a rendering system can also be more accurate; subpixel rendering using an A-buffer is usually better than adaptive subsampled eye-ray ray tracing, because small features are caught more often. For example, rendering the spokes of a bicycle wheel can be fully missed by ray tracers, while 4x4 or 8x8 A-buffering can catch these. Click on the image to see renderings of a set of 3D models from one of the TriGallery collections. Most of the jewelry models here were created by Nancy Heinz.

linked rings I made the interlinked rings image for Zap Andersson on the occasion of his wedding. The image is interesting technically in that it was ray traced, with the shadows computed using adaptive radiosity meshes. It used bump mapping for the engraving.

Ronchamp side viewRonchamp front viewRonchamp pew view These are some still images of a model of Ronchamp, a chapel designed by Le Corbusier. To compare, see photos of Ronchamp, which include a similar side view and front view. The 3D model was created by Paul Boudreau and Keith Howie. I used the ArtCore radiosity and ray tracing system we developed for Hewlett-Packard, with some custom add-ins (see "Confessions of a Hacker"), to render the model. There are a number of bugs in the images, which are discussed in "Ronchamp: A Case Study for Radiosity". A minute-long walkthrough of the church was shown at the SIGGRAPH '91 film show and is available through SIGGRAPH publications' Video Review. One image was used for the cover of the book Radiosity and Realistic Image Synthesis.

Scientific American Feb. 1991 The February 1991 issue of Scientific American includes an introductory article about the rendering techniques used and includes more stills.

can After reading Takafumi Saito & Tokiichiro Takahashi's article on "Comprehensible Rendering of 3-D Shapes," in SIGGRAPH '90, I tried some experiments with illustrative rendering styles. Here are some old renderings (c. 1991) of a soda can model. The spline surface model is from the University of Utah:

  • Can 1 (random noise bit shading)
  • Can 2 (vertical lines)
  • Can 3 (textured, thick horizontal lines)
  • Can 4 (horizontal lines with no noise)
  • Can 5 (horizontal lines with noise added for hatching)

Non-photorealistic rendering is interesting in that it widens the user's range of expressive styles enormously. See Craig Reynold's NPR page for an excellent collection of links. For inspiration (and for just a plain good read), get Scott McCloud's Understanding Comics.

Lenna Paul Haeberli's "Paint by Numbers" was another great article from SIGGRAPH 1990. It inspired me to write a system based on his ideas for my Hewlett Packard workstation (why should people using SGI's have all the fun?). This is a sample creation (made in about 5 minutes), using the famous Lenna image for its basis. Nowadays programs like Fractal Painter have taken these sorts of techniques miles beyond this point.

Here are some images comparing various rendering techniques; feel free to use them for educational purposes.

  • RT planetary gearsZ buffer planetary gears This planetary gears assembly is a nice example of what ray tracing adds to a scene compared to standard hidden surface (z-buffer) rendering. The reflections are nice enough (though I personally find too many reflections to be more confusing than none). It's the shadows, for me, that give the 3D cues that make the image both more realistic and more understandable. Image composition idea from Paul Booth.
  • Statue of Liberty  This set of three images shows a statue of liberty model rendered with hidden surface (z-buffer), ray tracing, and radiosity. Note how the ray trace shadows give the model a reality, but their sharpness can also detract from understanding (the shadow from the nose, for example: is that a crease or a shadow?). The meshed radiosity shadows are softer, but there are Gouraud shading artifacts (e.g. on the tablet and at the base at the entryway) and a loss of shadow detail (the bottom of the robe's shadowed area is simplistic). The radiosity solution could be improved some by finer meshing and by tessellation of complex polygons. Its advantage is, of course, that once the solution is computed, the set of polygons generated by the process can be displayed using accelerated Z-buffer hardware and display at near the same speed (and in some cases faster, since illumination does not have to be computed for it; balancing this is that there are more polygons to display) as the original hidden surface model.
  • Pipes casting shadows  This set of four images, clockwise from the upper left, shows distributed ray tracing, traditional ray tracing, radiosity, and hidden surface renderings of the same scene. Distributed (a.k.a. stochastic) ray tracing gives the truest image (and is most expensive to compute), traditional ray tracing gives the usual sharp shadows, and meshed radiosity gives soft shadows everywhere (even when they should be sharp at the bases of the pipes) and mesh artifacts. The radiosity rendering could be improved by increasing the mesh resolution (which is generated with quadtrees and is already reasonable).
  • Spheres casting shadows  As above, this set of four images, clockwise from the upper left, shows distributed ray tracing, traditional ray tracing, radiosity, and hidden surface renderings. The shadows on the distributed ray trace are noticeably noisy, even though many shadow rays were shot per pixel. Traditional ray tracing is sharp shadowed, as usual. Meshed radiosity without using blending techniques has a few problems besides those detailed above: loss of specular component (shine), meshed spheres result in visible gap where spheres are supposed to touch, and Gouraud shading artifacts. There is also a bit of "shadow leak" visible at the base of the closest cone, where the shadowed samples under the cone affect the shading outside of the cone. All of these problems are curable; I wish I had rendered this same scene with our final product. We used the radiosity mesh imposed on the original geometry, combined with ray tracing the specular components, to solve the first two; we used surface modeling techniques to determine where the cones touched the floor and created mesh edges on the floor at these points to avoid shadow leaks.
  • Jig  Here is an early radiosity/ray-tracing blend experiment we tried. Clockwise from left is the hidden surface version, the traditional ray tracer version, the blend (radiosity shadowing and interreflection and ray traced reflections), and the pure radiosity version. There are edge artifacts where the pink sides met the base in all but the ray traced image due to hidden surface renderer inaccuracy (this was done in the days before sub-pixel addressing was available in hardware, so cracking like this was common). The blend technique was a simple proof of concept image I made by using the pure radiosity image and adding it to a ray traced image which had only the reflections and highlight rendered in it. There are some fairly bad registration problems where the ray traced and hidden surface images didn't align properly (look at the handle). We later integrated ray tracing, radiosity and A-buffer renderers into a system which cleanly and quickly produced such images. Pity it didn't sell...

camshaft This is a camshaft image I rendered with an early version of our ray tracer, created for Hewlett Packard. It was used in HP advertising literature and has the claim to fame of being one of the physically largest computer graphics images ever displayed, as it was printed on the side of HP's trade show tractor-trailer. The model was created by HP's German CAD group (now CoCreate Gmbh).

Sphereflake This is the version of Sphereflake which was a part of the SIGGRAPH '87 art show. There are 7381 spheres. The model is from the free Standard Procedural Databases software package, available online. The floor plane texture was done with a procedural function.

countertop Countertop ray traced image from my thesis used on the Sept. 1986 cover of IEEE CG&A. The shiny bowl and shadows from ray tracing add some realism, but the extensive use of texture mapping is what gives the image most of its visual interest. Cornell's system was great in that you could see the power of combining a good modeler and good material designer with powerful rendering algorithms. This image was produced around mid-1985.

chessboard A ray trace from my Master's Thesis, the image was produced during December 1984 and used on the SIGGRAPH '86 advanced program. This board position is from Raymond Smullyan's wonderful The Chess Mysteries of the Arabian Knights, Knopf, 1981. White has not castled; is the black pawn which started on b7 still on the board, and if he is, is he still a pawn or promoted?