Project Offset
david.nikdel posted in general on February 16th, 2006
If you haven’t seen the amazing tech demos for Project Offset, you need to scoot over to IGN and check them out. This engine is cutting edge. Their three main claims to fame are: full self-shadowing on all objects including particle systems, HDR lighting with specular bloom, and full scene motion blur.
This got me thinking about just how they pulled all this off. If I had to guess (and, mind you, this may be completely wrong) I would assume that the self-shadowing is a combination of pre-baked statistical lighting to spoof global illumination falloff in areas traditionally poorly lit –like characters’ armpits– combined with depth-based, per-light shadow maps and a pixel shader checking to see if each point is visible by each light (by doing a map lookup and comparing depths).
As for the specular bloom and motion blur, these are traditionally post-process effects. I was thinking about it and, while you would certainly have to use custom shaders to help generate these effects, the actual blurring is most likely still done as post. Seeing as all the next-gen consoles (as well as the high end PCs) have multiple cores, it stands to reason that this is no longer out of the realm of possibility for realtime games. One core can perform post while the other is rendering the next frame. The technique for specular bloom seems like it would be pretty straight forward if they are using floating point textures to represent the pixel luminosity. As for the motion blur, I assume they are probably generating a helper texture — something akin to a normal map in that it’s a map of vectors but representing velocity (relative to the camera) rather than a normal. Once again, this would be highly facilitated by the use of floating point textures since velocity vectors need not be of unit length.
Anyway, the point of this post is that I’ve decided to turn this C# project into a pixel shader test-container. It is easy to manage and add things to the framework; perfect for messing around. I think I might see if I can get some motion blur of that sort working in there. Sounds like a fun challenge.
Leave a Response