I'd like to refer to this question because I didn't completely answer to my problem.
I've implemented normal and parallax mapping but because of some assumptions I have to use two different TBN matrices for each effect.
One of the most important assumptions is that I have deferred renderer with normals encoding and light calculations in view space.
This implies that I have to convert data from normal maps (which are in tangent space) to view space using below TBN matrix:
mat3 NormalMatrix = transpose(inverse(mat3(ModelViewMatrix)));
vec3 T = normalize(NormalMatrix * Tangent);
vec3 N = normalize(NormalMatrix * Normal);
vec3 B = normalize(NormalMatrix * Bitangent);
mat3 TBN = mat3(T, B, N);
On the other hand parallax mapping required view direction vector in tangent space. To compute that I use camera position and fragment position (in world space) multiplied by following TBN matrix to move this vectors from world space to tangent space:
T = normalize(mat3(ModelMatrix) * Tangent);
N = normalize(mat3(ModelMatrix) * Normal);
B = normalize(mat3(ModelMatrix) * Bitangent);
mat3 TBN = transpose(mat3(T, B, N));
I'm looking for a way to optimize that. Is it possible to make it better?