(I have modified my initial question after finding out more about the normal maps.)
I am playing around with some ripped models and I am trying to figure out how to use the normal maps that come with them. They only have the Red and Green color channels and it seems the Blue channel needs to be generated. Is this something Blender can do easily? Can I use a material node setup to create the Blue channel at run time?
I have found two plausible ways to fix the normal maps. The first is suggested by Christopher below and is to invert the normal map and to invert the green channel afterwards to get the correct direction.
The second is from Substance in an article about Normals in Unity engine. It seems that the blue channel can be dropped because the normals are always of length 1, so the Blue channel can be recovered by:
B = sqrt( 1 - R*R - G*G)
which I have implemented using nodes below.
I am leaning towards the Substance approach, however, when I check the RGB values in Python, it seems that parts of the mouth have Normal vectors with length greater than 1, so this would be invalid for the approach suggested by the substance article.
Does anyone have any further suggestions about the correct approach?