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.
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:
- Comparison of VIPM Methods: a comprehensive comparison of four methods of View Independent Progressive Meshes. The methods are the "Vanilla" method developed by Jan Svarovsky inspired by a Hugues Hoppe paper, and three others invented by the Game Development Algorithms list hive-mind (thankyou all, and I'm sorry I can't remember exactly who invented which bit of what). I implemented all three, and compared their various applicability in different situations - "SkipStrips", "Multi-level SkipStrips" and "Sliding Window". Overall, I highly recommend Sliding Window VIPM as usually being the most efficient of the bunch, and sliding window is the version implemented in the Xbox version of the game Blade II. See below for HTML version.
- Impostors - Adding Clutter: a discussion of the effective use of dynamically-rendered impostors, as implemented in the PC game StarTopia. In retrospect, impostors worked pleasingly well, with decent speed improvements. I would have been far more aggressive with them if the rendering hardware at the time (GeForce 2 and Radeon 7000 were cutting-edge) had had fast and reliable render-to-texture capabilities. As it was, most of my time was spent working around driver bugs and hardware restrictions. Today's cards can handle impostoring to a far more impressive degree. See below for HTML version.
Game Programming Gems 3 (ISBN 1584502339, Charles River Media 2002) chapters:
- Cellular Automata for Physical Modelling: a discussion of using cellular automata to model effects such as fire, explosions, wind and water (and combinations thereof - burning oil that flows through the holes it creates!), and various quadtree-based optimisations that use coarse granularity in both space and time steps to reduce the cost of modelling a full 3D space. Shame nobody has actually put this in a game yet - I think this could be a brilliant way to get some superb "real physics" effects. See below for HTML version.
- Unique Textures: a general method of applying any procedurally-generated texture across a landscape, generating only the textures required for rendering at the specified mipmap levels. I believe a few games have done this, and Thatcher Ulrich has certainly talked about something similar in the past. But I still see games struggling with large worlds, and this method is so much more applicable than people realise. It's not just for landscapes - it's for everything - even if you just use it to upsample your textures with a cubic or sinc filter rather than the horrible hardware bilinear one.
ShaderX2 (ISBN 1556229887, Wordware Publishing, Inc. 2003) chapters:
- Displacement Mapping: a summary of existing displacement map technologies, the tools required for practical authoring of displacement maps, and a quick guide to my own cheap version of disp.mapping - "displacement compression" that runs on pretty much any hardware (see my Meltdown 2000, 2001, and GDC 2003 talks above for details)
- Shader Abstraction: how to integrate complex arbitrary shaders into an existing 3D game engine. It's tougher
than you think.
- Post-process Fun With Effects Buffers: how to write an engine with multiple post-processing passes in an orthogonal and extendable manner.
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 (to be published, Charles River Media) "3D Engine Design" section editor, and one chapter (exact title to be decided, but it's something about shadowbuffers)
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.