PfPortals: History

The pfPortals library began as a class project for COMP 236: Computer Graphics. I had heard of Seth Teller's work at Berkeley and wanted to do something similar. At the time I didn't realize that Seth's work included dynamic culling; I thought my idea for a recursive depth-first traversal of the visible cells was completely new. It turns out that the idea was first published in 1971, a few months before I was born, so in fact I arrived a little late. Ultimately the only truly new idea in the whole program was a simple hack: I overestimated the portal sequences with screenspace bounding boxes instead of actually computing their intersection.

As it happens that was a pretty useful little hack. It allows for very simple, fast calculation of the potentially visible set of cells and objects from a particular viewpoint. The class project was a success of sorts, especially when I was able to demonstrate its utility on the architectural models used by the Walkthrough group. In the meantime, Chris Georges and I had extended the concept of portals to include mirrors. Conceptually, mirrors are just portals with a transformation attached, but the clipping issues on a parallel rendering platform are unbelievably messy. Chris worked some real low-level magic on Pixel Planes 5 and managed to get mirrors working. We got a paper accepted in the Symposium on Interactive 3-D Graphics and presented it April, 1995.

During the spring semester of 1995 I revisited portals, this time in the context of IRIS Performer. Once again the motivation was a class project, now for COMP 239: Exploring Virtual Worlds. Mike Goslin and I proposed to create an interactive immersive mystery, set in a haunted house and running on a Silicon Graphics platform. The interactive mystery part of this project ultimately got dropped due to time constraints, but we demonstrated two important concepts in our final system: portals on Performer and illumination textures. Someday I'll get Mike to set up a page describing the work he's done on illumination textures; like my portals work, it's grown from a class project into a software product in high demand.

A lot of people have seen pfPortals and liked it, so I decided to make a public-domain release of the package. It's been a lot more work than I expected but I think it's been time well spent. In addition, I spent part of my summer at SGI helping Brad Grantham port pfPortals to Performer 2.0, and indeed a lot of pfPortals-like features are included in 2.0. Eventually I suspect Performer will provide a complete system for portal-based culling. In the meantime, the pfPortals library provides a simple but efficient mechanism for Performer programmers looking to integrate portal-based culling into their applications with a minimum of fuss.