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?