My problem is for B and D vertices. I understand why I found these tangent vectors (because of the changing direction of the texture at these vertices my tangents), but how can I resolve this issue. Do I have to "split" B vertex into B1 and B2 (and D vertex also) so that they can each have a correct tangent vector ? Or is there another solution (maybe I am missing something here ?).
(The objective is to do normal mapping, I have it working quite well but problems appear on those vertices where texture is changing direction. I am using Sponza Atrium model from CryTek).
Yes, mirrored textures are a common problem and some engines even don't handle this case (udk3?). Best to split your vertices along the mirrored edge, you will most likely already split vertices when you don't share the same uv or encounter hard edges.
Yeah what our engine will do is generate tangents on the expanded vertices (3 unique vertices per triangle), then try to merge them when it's finished. In most cases they will merge fine and you'll end up with shared verts, but in a case like this one where the tangents will point away from each other we'll end up leaving them unique which essentially splits the vertex.