回答:
法線マップは-1から1までのベクトルをカバーしているので、この範囲を0-> 1に引き延ばして、すべてをRGBの範囲内に収めることができます。
したがって、通常は法線に変換を適用して、それを目に見えるものに変換します。
vec3 colour = vec3(0.5) + normal * 0.5;
青い色は、法線マップがプリミティブ(三角形など)の法線に対して使用され、デフォルトの(0,0,1)方向で三角形の法線からの逸脱がないことを示すためです。通常、フラグメントシェーダーは、実行時に現在のピクセルごとの法線に対してこの法線を回転させる必要があります。
vec3 normal = (colour - vec3(0.5)) * 2.0;
接線空間の法線マップのみが主に青です。これは、青色が(0,0,1)の法線を表すためです。これは、三角形が平面xとyにある場合、つまり表面に垂直な場合に、変化しない法線になります。タンジェントxとバイタンジェントy(バイノーマルとも呼ばれます)は、赤と緑のチャネルでエンコードされ、これらは、三角形のサーフェス上のポイントのタンジェント空間法線を作成するために形成されます。
接線空間の法線マップが赤(1.0、0.0、0.0)でのみ色をエンコードする場合、これにより、三角形のサーフェスに平行な接線空間の法線が生成されます。これは、三角形がサーフェスとビューベクトルから90度でのみ照明されることを意味するため、決して見られません。この時点では、三角形を見ることができなくなります。
ワールドスペースの法線マップは、球体上の単位法線をエンコードするため、チャネルごとに[-1、1]から[0、1]にエンコードされると、主に異なる色になる可能性があります。
比較はここで見ることができます:
実際には、法線マップは通常、BC5などの2チャネル形式でエンコードされます。これは実際にはxとyのみを格納し、zは単位ベクトルであるため、zが再構築されます。これにより、ファイルサイズを増やすことなく、より多くのビットでより高い精度を維持できます。
vec3 colour = vec3(0.5) + normal * 0.5;
はRGBをXYZに変換していますか?