Yes, I know you’ve all seen millions of bumpmapped things before, but this was a big thing for me.
The shader is written in GLSL, and I’ll try to keep all my shaders in there for maximum portability / minimum code duplication.
I really don’t want to write custom gpu assembler for every card out there, and the slowdown from custom code to GLSL isn’t that bad.
It took me a while to figure out that I needed to keep track of the handedness of the tangent space.