Normal Mapping


Normal Mapping


  • 片側を表すVertexのNormal値が同じであれば,内部のベクトルも同じ値を持つ.

  • ボールの場合、Vertexごとに異なるNormal値を持つため、立体視表示を実現することができ、立方体の場合、各面を表すVertex値は同じNormal値を持つため、内部画素も立体視表示しない.
  • // 큐브의 앞면을 나타냄
    	vec[0] = Vertex(Vec3(-w2, -h2, -d2), Vec2(0.0f, 1.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(1.0f, 0.0f, 0.0f));
    	vec[1] = Vertex(Vec3(-w2, +h2, -d2), Vec2(0.0f, 0.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(1.0f, 0.0f, 0.0f));
    	vec[2] = Vertex(Vec3(+w2, +h2, -d2), Vec2(1.0f, 0.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(1.0f, 0.0f, 0.0f));
    	vec[3] = Vertex(Vec3(+w2, -h2, -d2), Vec2(1.0f, 1.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(1.0f, 0.0f, 0.0f));
    //각 정점들이 같은 Normal로 표현된다

  • Vertex数を増やすように立体化表示を行う場合、計算量は増加するVertexに伴って増加するので不適切と解決した.

  • したがって、個別の画像ファイルNormal Mappingを作成することで、対応するNormal値を各ピクセルに格納し、それを使用して問題を解決します.
  • Normal Mappingは、テクスチャ内の各ピクセルのNormal値を持つ個別のファイルから情報を取得し、テクスチャをより立体的に表す方法である。


  • Normal Textureは、個別の座標系Tangent Spaceを使用します.

  • Tangent Spaceとは?
  • に接する平面を基準に座標系を再考する.
  • したがって,Normal Vectorの大部分はUp方向を指す.その理由は、地図全体の成分を描けば、ほとんどが青になるからです.

    結果


  • before

  • after

  • 左:通常のマッピングを適用
    右:適用されません