¹^ Unreal Engine and some other tools use what are called -Y normal maps. This means the green channel is inverted from what Unity and other +Y tools would use. Green in that case is how “down” it is. The difference originally comes from OpenGL and DirectX conventions for UV handling. The UV position “0.0, 0.0” in OpenGL is in the bottom left, and in DirectX it’s top left. This means by default in UVs flow “up and right” for OpenGL and “down and right” for DirectX. Ultimately it’s trivial to use which ever convention you’re most used to and flip the normal maps in the shader. Since Unity has to support both OpenGL and DirectX it actually flips the textures upside down for DirectX platforms!

²^ Bitangent vs binormal. The vast majority of literature and shaders out there will refer to the three vectors for tangent space as normal, tangent, and binormal. A “bitangent vector” is arguably a more accurately descriptive name for the third vector in that it is a second surface tangent. A tangent is a line that touches but does not intersect a curve or surface. Those who argue against the term bitangent point out that it already has a specific, unrelated meaning in the world of mathematics. A bitangent is traditionally a line that is the tangent for two points on a curve. So, clearly that’s not remotely similar. However technically binormal also had a previous meaning, though it is closer to how it’s used for our purposes. A binormal is the cross product of the normal vector and the tangent vector for a curve. However by curve they mean explicitly an infinitely thin line, not a surface. If you think of a normal as a direction pointing directly away from a surface, a normal for a line is any direction perpendicular to the tangent. So the binormal is a good name there as it is another normal of the line. For a surface the term binormal makes less sense as it is no longer perpendicular to the surface and thus no longer a normal. This is why bitangent becomes attractive because it mimics the use of the bi- prefix in binormal, but more accurately describes it as the additional tangent that it is.

So, basically, both are kind of wrong. If you want to get down to it even the term tangent is slightly wrong here as it’s being used to describe a unit vector that is specifically both a surface tangent and the texture coordinate’s x derivative, which is in itself a tangent. Thus it is a single line that is a tangent for two curves, so maybe the tangent should be called bitangent? And the binormal / bitangent should be a bibitangent? Or cobitangent? Crossbitangent? Fred? …

You can see this argument can keep going for awhile. Naming things is hard. I personally subscribe to bitangent over binormal. Either way it’s good to understand that in the context of tangent space normal mapping both are being used to refer to the same thing.