A while back, Crytek proposed storing vertex tangent / bitangent / normals in a quaternion. This seemed like a sensible approach, and my implementation worked well, most of the time. However, after using this with some more organic shapes, this seems like a totally unworkable approach.
I calculated the quaternion by creating a 3x3 matrix from the TBN vectors and retrieving the rotation of the matrix. A quaternion can only be used to describe the TBN vectors if they are orthogonal to one another. If the vectors aren't 90 degrees apart, the results will be wrong. I noticed because some organic shapes were displaying really bad normals.
If this is the case, why is anyone even talking about this approach? It seems useless. I suppose you could construct the 3x3 matrix in such a way that the error is all packed into the tangent and bitangent, so at least the normal is correct and all the error will be in the normal mapping.