Maya と Tangent, Binormal

Tangent は、三角形の頂点座標、法線、UV の値を元に計算される。(Binormal は求めた Tangent と Normal の外積で算出するため、Tangent だけ考えれば良い)

UV 展開をした時、そのポリゴンは UV 座標上で △ ▷ ▽ ◁ など、どのような方向にでも向くことが出来るため、法線マップなどの接空間テクスチャに書かれたベクトルを三角形の表面に貼るには、三角形が法線 z 以外にも、x と y 方向のどちらを向いているかの情報を元にして変換する必要がある。(軸の向きを揃える必要がある)

Albedo の値などは、単に UV から拾ってきた値がそのままピクセルの値になるが、法線マップは接空間上にあり、手前が z、横方向(u) と縦方向(v) という軸で作られている。Albedo と違い法線マップは向きが重要であり、そのままテクセルとして拾った値をポリゴン表面で使おうとすると、ポリゴンの軸の向きが異なっているため、法線ベクトルも意図した向きになってくれない。そのため取得した法線の値とポリゴンの向きを揃えるために、float3x3(Tangent, Binormal, Normal) の値を使って変換をかける必要がある。

当然、UV の値 (三角形の向き) が異なれば、x 軸、y 軸の値も異なる。別々の UV で法線マップを2枚ブレンドしたい場合などは、Tangent も2つ頂点の値として書き出す必要がある。

Tangent と Binormal の表示

Maya でメッシュの Tangent と Binormal を表示するには、mesh ノードの亜トリビュートで、Mesh Component Display -> Display Tangent を選択。

標準で赤が Tangent。青が Binormal。

参考

付録 A: 接線および従法線ベクトル
https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2018/JPN/Maya-Modeling/files/GUID-169FEA8E-0289-4B12-A181-D7C79FC98BC2-htm.html

あれこれ計算してフリップしたUVを見つける!!
https://kiwamiden.com/find-the-flipped-uv-by-calculating-part1
https://kiwamiden.com/find-the-flipped-uv-by-calculating-part2
Python を使って Tangent, Binormal の取得。そこから法線方向の取得など非常に参考になります。

その12 頂点座標とUV座標から接ベクトルを求めるちょっと眠い話
http://marupeke296.com/DXPS_No12_CalcTangentVectorSpace.html

任意のカラーでハード エッジを表示する
https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2020/JPN/Maya-Modeling/files/GUID-D23D15E0-8E14-4A4F-892E-2413FA58D85A-htm.html


コメントを残す

メールアドレスが公開されることはありません。