I came across a very interesting post on performing normal mapping without a precalculated tangent frame. The technique is an extension/optimisation to the one presented by the same author in ShaderX5, and it elegantly and efficiently calculates the tangent frame in the pixel shader removing the need for storing tangent and bitangent vectors in each vertex.
Wanting to see how it performs visually, I fired up fx composer and did a quick test rendering a quad with a high resolution normal map once with regular normalmapping (precomputed tangent frame) and once using the above technique ( calculating the tangent frame in the pixel shader). Normalmap is courtesy of Käy’s Blog.
Precomputed tangent frame:
Per pixel calculated tangent frame:
Apart from the fact that the second image looks a bit darker in overall the two images are very close, close enough to drop the precomputed tangent frame altogether.
This looks like a viable technique when memory bandwidth (and memory space) is of more concern than pixel shader cost (or when the mesh exporter manages to mess the tangent/bitangent vectors up).