Tales of the Rampant Coyote

Adventures in Indie Gaming!

Thief’s 3D Rendering

Posted by Rampant Coyote on October 11, 2011

This one’s for the programmers.  I got a kick out of it, I expect a few others will, but it probably won’t be too exciting for most readers. My apologies.

Sean Barrett has written up a high-to-medium-level explanation of the software 3D rendering he did for Looking Glass’s Thief: The Dark Project. He mentions previous projects (namely Ultima Underworld and System Shock)  briefly, to contrast their rendering systems with what he did for Thief.


This brings back programming memories from the mid-90’s. I did my own share of rasterization with texture mapping (though I don’t think I ever did perspective-correct texture mapping), even going down to the assembly language level. And tweaking the painter’s algorithm so that objects would be properly occluded. And, failing that, breaking objects into smaller pieces so that my modified Painter’s would work. But nothing I did compares to the work he describes here.

Sometimes I miss doing that. But not usually. While there’s a part of me that loves getting down as close to the metal as possible, optimizing the pipeline, and other stuff like this, I don’t think I was ever very good at it.  I’m much happier making the “game” part of a game.

Filed Under: Programming - Comments: 4 Comments to Read

  • Groboclown said,

    Great link. I still do this kind of low-level work for projects like the Java 4k game contest..

  • Rampant Coyote said,

    You have my utmost respect, then. 🙂 There’s some pretty incredible work that comes out of those contests!

  • Groboclown said,

    They’re a nice change of pace, dealing with the old-school techniques like storing data in flat arrays of ints rather than nice extensible designs, but they kind of make me feel dirty afterwards.

  • Bad Sector said,

    Interestingly, his “what i should’ve done for CSG” method is what i’m doing with Runtime World with negative brushes (and exactly what i was dong when Runtime World had only positive brushes like Quake and i wanted to perform subtraction) and the reason for this is the same as his: after i figured out what brushes *really* are (at the past i thought they were simple meshes and my first full 3D world editor was working with plain brush-like meshes) it was the only method that i could think of and using a BSP never crossed my mind. Of course he did it the other way around (used a BSP) but the reason is the same.

    At points like this i’m always reminded of Michael Abrash’s advice in one of his articles, about stimulating your imagination even with the “wrong” attempts of others because they might lead you to paths that others never considered. Of something like that 😛