複数枚テクスチャをUE4で扱う|書き出し編で書いた、RealityCaptureから書き出したUVマップがどういう物なのか、そしてUE4でどの様に扱われるのかを見ていきます。
UVマップの種類
RealityCaptureから書き出されるUVマップの種類は
- _u1_v1
- (u,v)
- UDIM
の3種類があり、このうち_u1_v1とUDIMがUE4では問題が起こるという事を書きました。
では、この3種類のUVマップは実際にはどう違うのか…。
RealityCapture内ではUVマップの確認が出来ないので(書き出し時に選択するため)、書き出したモデル(ポリゴンメッシュ)を別のCGソフトで見てみます。
このモデルでは7枚のテクスチャを生成したので、UVマップも7つのタイルがあります。
それぞれ
- _u1_v1:タイルが左下から右方向に並び縦方向に3段になっている。
- (u,v):7つのタイルが重なっている
- UDIM:右方向に一直線。
と言うように配置されています。
そもそもUVマップとは
そもそもUVマップとは何なのかと言うと、2次元のビットマップ画像であるテクスチャを3次元形状をしているポリゴンメッシュに貼り付けるために、UV座標と言う2次元座標にポリゴンメッシュの「開き」を作って並べたものです。
本来は横軸のU軸と縦軸のV軸の0から1までの値のタイル一つで成り立っているものですが、複数のテクスチャを扱う際に通常の座標外にもUVマップを配置しUV座標を拡張させる仕組みを利用した物が_u1_v1とUDIMのUVマップになります。
一方、(u,v)のUVマップは0~1の座標内に納まっています。
実際には_u1_v1とUDIMのUVマップはこのように配置されています。
※(u,v)はただ重なってるだけなので省略。
赤字の番号はUVタイルの住所の様なものでRealityCaptureから書き出したテクスチャのファイル名と対応しており、読み込みの際にどのテクスチャがどのUVタイルに対応しているか識別して自動的に割り当てが行われます。
UE4内での扱い
では、これらのUVマップがUE4内でどのように扱われているのか。
_u1_v1とUDIMのUVマップをUE4で表示させてみます。
すると、通常のUV座標外にあるUVマップが赤く表示されているのが分かります。
特にエラーメッセージなどは出ませんが、赤いという事はそこは明らかに正常ではないですね…。
と言うわけで、_u1_v1やUDIMの様にUVマップがUV座標の1よりも外に配置されている事が、そしてUE4がUVマップのマルチタイルに対応していないという事が、UE4においてテクスチャが歪んでしまう原因と言う事になります。
なお、UDIMについては現在β版として機能が提供されています。
詳しい内容についてはヒストリアさんのブログにて書かれているので参考にしてください。
histria:[UE4]VirtualTexturingについて
こういった理由から、RealityCaptureからテクスチャを書き出す際には(u,v)を選択しましょう。
と言うお話でした。
おまけ:もし非対応のデータを手にしてしまったら
もし自分が制作したものでは無いフォトグラメトリのモデルをUE4で使う事になった際、非対応 UVマップによるテクスチャの歪みの問題が出てしまったらどうすればいいか…。
一番手っ取り早いのはUVマップを一か所にまとめる、つまり(u,v)と同じ様にしてしまうという事です。
UV座標0~1の中にさえ納まっていればいいので、基本的にはこれで問題ありません。
こうしてUVマップを一か所にまとめた_u1_v1のモデルをUE4に読み込んでみると(u,v)で書き出したものと同じ様に歪みが無くなった物になります。
一つのソフトの中で完結する場合にはそのソフトのマニュアルやヘルプを読めば大体の事が書いてありますが、複数のソフトに跨ってデータをやり取りすると、何が原因で問題が起こっているのか中々わかりづらいので、そう言うところをちょこちょこと書いて行ければと。