TomF's talks and papers.

In rough chronological order.

Where Have All The Bumpmaps Gone? - presented at Meltdown 2000 (also called "Windows Game Developers Conference"). Paper showing how to use VIPM, displacement maps and smooth surfaces to produce highly detailed and scalable models.
If you have the full PowerPoint app, check out the notes on the slides, as they contain more detail than could be fitted in the slides. Otherwise, check out the text version included in the zip file.
Some hindsights I had about the Meltdown 2000 talk. Bear in mind that the talk was written when Vertex Shaders had only just been introduced into the API.

Highly Scalable Character Rendering - a talk given at Meltdown 2001. This extends the Meltdown 2000 ideas to Vertex Shaders, and introduces a lot of other scalability methods that can be applied to bones, rendering methods, shadowing and so on.
If you have the full PowerPoint app, check out the notes on the slides, as they contain more detail than could be fitted in the slides. Otherwise, check out the text version included in the zip file.
Some hindsights I had about the Meltdown 2001 talk.

GDC 2003 paper on Displacement Mapping co-presented with Michael Doggett of ATI. Includes both the slides used during the talk, and some more information in the form of a white paper.
Displacement Compression Demo referred to in the talk. It probably won't mean much without reading my slide deck, so make sure you do that first. Also read the readme.txt in the ZIP for running instructions. Requires a PC with DX9 installed.

Self-shadowing Bumpmaps using 3D Texture Hardware - using volume textures to render self-shadowing bumpmaps really really fast. The paper in PostScript format or PDF format with low-rez images. This paper appeared in the journal of graphics tools Volume 7, Number 4, 2002: Special Issue on Hardware Accelerated Rendering Techniques.

Spherical Harmonics in Actual Games - Game Developers Conference Europe 2003 talk on using spherical harmonic irradiance in a real game. Note that here I am only talking about one application of spherical harmonics - the representation of incoming light. Cool extensions such as Precomputed Radiance Transfer go way beyond this and do a lot more with SHs, but in return they are less generally-applicable. (PowerPoint slides). After that, please read the notes and errata that are here - there's a lot more about the implementation and neat side effects.

Practical Shadows - Game Developers Conference 2004 talk on using shadowbuffers in a real game. In this case, the game in question is StarTopia, which I retrofitted a robust and fast shadowbuffer system to. I'm rather pleased with the results, considering no art was changed from the original. It's also a brief overview of some of the yays/nays of shadow volumes vs shadow buffers. (PowerPoint slides)
People have asked for a few more details about the algorithm discussed in the slides. The public gets what the public wants.

Demo Engine to Game Engine given at Pilgrimage 2004. The slides aren't very impressive because this was a quick, informal talk given to a bunch of demo coders. Having been a demo coder myself a long time ago on a platform far far away (the Atari ST) and then moved on to "real" games development, I thought I'd do a talk about the differences between coding up a cool demo engine and writing an engine for a real published game. It's pretty scary.

How To Walk - a talk given at GameTech 2004 that started out supposedly as a quick demo to show off some of Granny's features, and turned into quite a research project. (Powerpoint slides)

Extremely Practical Shadows - Game Developers Conference 2006 talk on using shadowbuffers. The followup to the 2004 talk, but now without wasting half the time on volume shadows and stuff like that. Also talks about various projection methods (PSM, LiPSM, TSM) and how they integrate with the "Multi-Frustum Partitioning" (which I have now made into a proper capitalised term and a TLA for ease of use - because every good algorithm needs a TLA). (PowerPoint slides)
And the same details about the algorithm.

Linear-Speed Vertex Cache Optimisation - September 2006 paper on finding a "universal" rendering sequence for near-optimal vertex cache performance, whatever hardware you happen to be running on today. It's the algorithm I developed for Granny3D's Mesh Preprocessor, and it gives results within a few percent of the best techniques I know of, but it's much much faster and simpler, which means you could do it at load time, or even at runtime when splicing different meshes together (e.g. Frankensteining different body-parts for an MMO).

Yet More Shadowbuffers - GDC 2007 practical guide to the current state of the art in shadowbuffering. Includes a discussion of the research I did using both an 8-bit ID buffer and an 8-bit depth buffer to solve the problems inherent in both methods and make shadows truly robust in all scenes. As an added bonus, it requires no special hardware and only a 16-bit shadowbuffer - two channels of 8 bits. Also includes a very brief discussion of Multi Frustum Partitioning, but I would go read the GDC2006 talk above for a much better guide. (PowerPoint slides)
The demo to accompany these slides. I advise reading the slides first, then playing with the demo. If you get a "missing DLL" error, that's probably because this requires the DirectX February 2007 SDK/runtime to run - you should be able to get it from Microsoft. There is a readme.txt inside the zip with the controls.

Integrating Shaders into An Engine - GDC 2007 rough guide to managing a pipeline with lots of shaders and platforms. Not meant to be exhaustive or terribly detailed - there are many ways of doing this, and no way is going to work for anything. This introduces the rough structure I have always used, as it scales fairly well and allows near-optimal rendering speed on multiple platforms. (PowerPoint slides)

Trilights - a very brief paper on a type of light that I've been using for a while that is a generalisation of a bunch of other light types that are common in games. Not exactly earth-shattering - it's hardly a paper at all - but people don't seem to document little tricks like this, so they never get passed along. So I thought I should. Also here are links to the Excel spreadsheet and the demo mentioned in the paper.

Larrabee Graphics Architecture: Software is the New Hardware: Siggraph 2008, part of the Beyond Programmable Shading Course. The basics of how Larrabee does in software what everyone else does in hardware, and how it can be more flexible and general than a standard GPU.

Rasterization on Larrabee and SIMD Programming With Larrabee: GDC 2009, Michael Abrash and I doing our double-act. We both talk about the instruction sets, Michael talks about the hierarchical descent rasterisation algorithm, and I talk about how we do basic language structures such as conditionals and flow control with our 16-wide vector units. We were both absurdly proud to be able to finally talk about the architecture we'd worked on for so long - it's not every programmer that gets to design their own instruction set.

The Challenge of Larabee as a GPU, given at Stanford 2010. The first half is a very brief intro to programming for Larrabee - it was a nice high-level audience, so I could skim a bunch of stuff. The second half was about how we persuaded a mostly general-purpose CPU to "emulate" a GPU at full speed. Click on the icon to the right of the talk title for video. Some great questions afterwards - a boisterous and very knowledgeable audience. Locally-hosted slides are here.


Tom's books and articles.

Also in rough chronological order. Because of copyright, most of these cannot be reproduced here - sorry.

Game Programming Gems 2 (ISBN 1584500549, Charles River Media 2001) chapters:
Game Programming Gems 3 (ISBN 1584502339, Charles River Media 2002) chapters:
ShaderX2 (ISBN 1556229887, Wordware Publishing, Inc. 2003) chapters:
ShaderX3 (ISBN 1584503572, Charles River Media 2004) - "3D Engine Design" section editor.

Introduction To Game Development (ISBN 1584503777, Charles River Media 2005): I wrote the chapters on Character Animation (actually covers the basics of all animation, not just characters) and Graphics (a painfully short summary of triangle-based real-time rendering). I think this is an extremely useful and concise introduction to the topics for undergraduates and those new to any of the topics within, but I could have easily expanded each of my chapters to an entire book and wanted to write more.

ShaderX4 (ISBN 1-58450-425-0 Charles River Media 2006) "3D Engine Design" section editor, and one chapter in the shadows section titled "Making Shadow Buffers Robust Using Multiple Dynamic Frustums"

ShaderX5 (ISBN 1-58450-499-4 Charles River Media 2007) "Shadows" section editor

Larrabee: A Many-core x86 Architecture for Visual Computing: Siggraph 2008. Larrabee's first real showing to the world. The paper was origianlly about twice as long and we had to chop it down severely to fit to the required length. If some things seem overly simplified - that's why. We tried to add the info back in in subsequent presentations.


HTML versions of older articles.

I'll add to this over time. Most articles include some hindsights that I've had since writing them.

Comparison of VIPM Methods

Impostors Adding Clutter

Cellular Automata for Physical Modelling


Tom Forsyth Home



I feel kinda silly doing this, but I have actually been asked what the license terms are for stuff you read on this page, and the papers linked from it. Looks like someone actually finds it useful - huzzah! Anyway, here's my cobbled-together license statement. It's a version of the MIT license, as stated in full at opensource.org, but I removed the bit about requiring attribution.

Instead I'm going to add here, NOT in legalese because there's probably no good way to state it, that it would be nice if you could add some sort of thanks somewhere. Bonus karma points for doing it in a way that shows up on Mobygames. Or just buy me a beer at GDC or something. And if you don't, may you be reborn as an Atari Jaguar in a world where Tempest 2000 never existed. Oh, and try to spell my name right - no "e" in Forsyth.

If anyone finds a better license than this, let me know and I'll probably use that one instead.

Copyright (c) 1973-2073, Tom Forsyth

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.