背景アーティストのぶろぐ背景アーティストのぶろぐUE4とかを触ったことを書くぶろぐ。実は背景あんまり関係ない。知人から質問を頂いて自分でもうやむやにしていたノーマルマップとローポリメッシュのタンジェントについて色々気づけたのでそれを少しまとめてみます。正確ではない記述もあるかとおもいます。誤りである場合は、ご指摘いただけますと幸いです。■UE4ドキュメントの法線マップ作成ガイド事の発端はUE4ドキュメントにある法線マップ作成ガイド。これに『タンジェントが重要』って書いてあるけどFBXのエクスポートにチェックがないんだが、本当にこれ正しいの?という質問を受けました。はじめに結論から書きますが、ここに書いてある内容は正しいと思っています。この方法に沿って作成すると正しいのかについて書いていきます。従来では発生していた歪みが解消されるようになった、つまり高品質なノーマルマップのシェーディングが出せるようになりましたよ。いうのがこのドキュメントに内容です。この話をするにあたり、ノーマルマップがベイクされる時にどのような計算されているのかをなんとなく把握していないと伝わらないかも知れません。■ノーマルマップの基本まずはノーマルマップが作成される仕組みからはじめましょう。ノーマルマップに関する基本はこちらのサイトの解説がわかりやすかったので引用させて頂きます。問題ある場合はお知らせください。ノーマルマップ合成)ノーマルマップはオブジェクトの法線ベクトルをテクスチャ画像のカラー値に置き換えたものです。ポリゴン面の法線に対して垂直に接する面の座標空間です。グーローシェーディングがかかっている場合はポリゴン面上の法線はポリゴンを構成する頂点の法線がグラデーションで補完された値になります。V方向をY軸と見立てます。Gカラー値によってBinormal方向に傾くように計算されます。それによってポイントあたりの法線方向が歪められてライト計算に反映されると凹凸が表現できるという仕組みです。大きければプラスの値とみなして扱います。これを見ると、ノーマルマップの計算にはタンジェントと従法線が非常に重要な要素であるというのが分かるのではないでしょうか。正確に理解するよりも関係してるというのが分かればここは良いかなと思います。(私もそこまで正確に理解してないです...むずかし~~)■タンジェントと従法線の計算と各種ソフト重要なタンジェントと従法線ですが、ノーマルマップをベイクするソフトによって計算が異なります。MayaはMayaの、3dsmaxは3dsmaxの、xNormalはMikkTSpaceという計算を使用してそれぞれ計算しています。MikkTSpaceってなんだよ...って思うとおもいますが、ローポリメッシュのタンジェントと従法線を計算する方法の1つぐらいに捉えたら良いとおもいます。(正確ではないかもしれませんが)xNormalでベイクしたノーマルマップをMayaに持ってきてメッシュに貼る事があるとは思いますが、これは正しいノーマルマップの結果を得ることができているとは言えません。ベイクした時とメッシュに貼った時のタンジェントの計算が違うからです。その1で記載したように90°に近い角度でUVシームを分け、メッシュの法線をハードエッジにしていれば歪みの少ないフラットなノーマルマップが生成されるためにこの違いによる影響はほとんどないのではないかと思います。Bのようにグラデーションのあるノーマルマップの場合だと、ローポリメッシュのタンジェントと従法線の計算の影響をうけるようになり、変なシェーディングが入リやすくなるのかなと。グループで構成されていることを確認します。」と書いてあるので、Bのようなグラデーションのあるノーマルマップを作成する時にUE4でも綺麗に表示させるための方法なのかなと推測します。■手順に沿って考える前知識が長くなりましたが、これらを踏まえて手順に沿って処理の流れを把握してみると理解し易いかも知れません。流れは法線マップ作成ガイドと同じ手順です。【Maya→FBX】FBXを書き出す時にタンジェントにチェックを入れません。読み込んだローポリメッシュのタンジェントはxNormalで計算されます。xNormalのタンジェントの計算はMikkTSがデフォルトで設定されているので、ノーマルマップをベイクするときのローポリメッシュのタンジェントの計算はMikkTSとなります。★★追記★★xNormalではデフォルトMikkTSであると書きましたが、設定が必要のようです。ありがとうございます!)設定は以下の手順で行います。Managerを開く。画像の手順でMikkTSの設定をします。【FBX→UE4】UE4にインポートします。MethodはMikkTSを設定します。この設定により、xNormalとUE4のローポリメッシュのタンジェントの計算が一致することになります。※ドキュメントを書かれた時よりバージョンが上がってインポートの設定画面が変わっています。補足として、FBXインポート時の設定について触れておきます。公式ドキュメントはこちらにあります。メッシュをインポートするメッシュの法線情報をそのまま読み込むか、UE4に計算させるかを指定する。:法線とタンジェントをUE4が計算します。FBXで書きだされたスムージンググループの設定は破棄されます。:法線のみ読み込まれます。Methodで指定します。:法線とタンジェント両方共FBXからインポートされ、UE4は何も計算しません。Normalを設定している場合、UE4でどのように法線を計算するかを指定します。ドキュメントに明記されてないですが、おそらく従来の計算方法。Sを使った計算方法(xNormalと同じ)■さいごに...xNormalを使用してノーマルマップをベイクしたのであれば、MikkTSを設定しますが、Mayaなどからベイクした時何を設定したらよいのだろうか...という疑問が残りました。FBXスタティックメッシュパイプラインのページを見るとEpicのアーティストたちはデフォルトの設定で読み込ませるとあるので、MayaやMaxからでもMikkTSで読み込ませてるのかなと思ったり...。歪みのないノーマルマップ制作を意識することに変わりはないと思います。(xNormalでMikkTSの設定を行うことでかなり歪み具合も改善するようです。ココらへん私の方でちゃんと検証してないので、検証できたらまた追記します。)かなりテクニカルよりな内容だったので自分の解釈、理解があってない場合があります。推測してる部分も多いです。その点改めて、ご了承くださいませ。間違い等のご指摘あれば是非よろしくお願いいたします。経歴ゲーム背景アーティスト。下請けの制作会社からゲーム開発会社を2社経てフリーランスに転身。UnrealEngineを使った開発に従事しておりました。背景、モデル製作等お仕事のご依頼などはこちらからお願いします。PremiumBloggerTemplates.com。