SubstandePainterとMarmosetToolbag2とUE4の見た目をあわせる
作ったアセットを作成し終えて、各環境出だしてみると見た目の結果が違うという問題があったのでその内容と結果をまとめてみました。
結論的にはPBRシェーダーの計算の種類による見た目の違いが原因なのですが、
正直PBRのシェーディング計算に関して調べて勉強したことはなく、
GGXとかそういうワードが耳をかすめた程度。
ここで言うシェーダーの計算の種類はスペキュラシェーディングについての話です。
ディフューズシェーディングとスペキュラシェーディングは当たり前ではありますが、
それぞれ異なる計算がされてるわけですね。
私はそれを混在させてしまってたので色々混乱してしまいましたがw
テクニカルな難しい話は私もわからないので軽く話を進めたいとおもいます。
テクスチャはSubstance Painterで作成
テクスチャの制作はSubstancePainter(以下、SP)で作成しました。
SPのビューワーのPBRの計算の種類はGGXです。
SPを使う上で特に気にする必要はないとおもいます。
綺麗なレンダリングビューワーのMarmoset Toolbag2で表示
SPはテクスチャ作成支援ソフトなのでそこから出力先に作成したテクスチャを読み込ませます。
アーティストの場合Marmoset Toolbag2(以下、TB2)に持ってきて
綺麗なレンダリングで楽しむことも多いでしょう。
今回の話のポイントはこのTB2です。
TB2にメッシュ、テクスチャデータを読み込んで配置します。
すると… SPで見るよりもヌレヌレじゃないですか!
で、なんじゃこれと思いましたが、まあ、誤差はあるよなぐらいでスルーしようとしてました所、
こんな助言を頂きました。
@nasubi_s 差が結構あるならblinn-phongとGGXあたりのせいかなとも思いましたが、その辺変更してもヌレヌレ度全然違いましたか・・?
— いっすー (@ishi_maya) 2015, 6月 27
なんと!!
ということで、設定をGGXに変更してみたところ、このようにヌレヌレすぎてた質感がSPと一致したじゃないですか!
TB2ではデフォルトのシェーダーではBlinn-Phongで計算がされています。
しかしSPはGGXで計算された質感を見ながら調整していたわけです。
この計算方法の違いからラフネスの見え方が異なっていたようです。
設定の切り替えはReflectionのところからできます。
では、UE4だとどうなのか?
SPとTB2で見た目を合わせることはできました。
では、SPとUE4での見た目はどうなのか試してみました。
SPと同じ環境を読み込めなかったのでTB2のGGXで代用します。
TB2のGGXはSPと一致してるのは確認したので、これで比較しても問題ないはず!
ポストやカメラの設定を一致させる努力をしてないので少し見た目が違いますが、
TB2のBlinn-Phongのように質感が異なるという事はないとおもいます。
調べてみるとUE4のスペキュラシェーディングもGGXで計算されてるのでSPと同じ計算がされてるとのこと。
SPとUE4の見た目が異なるという問題はなさそうです。
◯参考サイト
hanecci’s Blog ”Unreal Engine4 のリアルシェーディング”の説明
環境をあわせる必要はあり
とはいってもUE4にポンとデータを読み込んで、
AdvancedLightingのマップに配置したら同じになるかと言ったらそうではありません。
同じようなIBL環境が用意されていますが、ソフトによってDirectionalLightがついてたりします。
UE4で完全にIBL環境にしたいのであれば、
BP_LightStageのブループリントからHDRIの画像をSPと合わせ、
それからUse Sun Lightのチェックを外し、DirectionalLightを無効にすることで一致させることができると思います。
SubstanceDesignerはUE4と同じようにビューワーにライトが配置されてるということなので、
こちらにも注意が必要です。
SPはライトが配置されてないぽいのですが、
TB2と一致してるのでないってことでいいのかな…。
(ここらへん確証なくてすみません)
sRGBのチェックは外した?
この手の問題で必ず出てくるのはラフネステクスチャのsRGBのチェック外してる?
という事ですね。
SPではラフネステクスチャはリニアとして扱われています。
TB2ではデフォルトリニアになってるので問題ありませんが、
UE4ではデフォルトsRGBにチェックが入っています。そのため、ラフネスの見た目が違う!
という問題がよく起きます。
テクスチャをインポートした時はsRGBのチェックの確認をお忘れなく。
(ラフネスにかぎらずベースカラーやエミッシブのようなカラーテクスチャ以外はsRGBのチェックは外します)
(SPの設定でRとGにラフネスが入ってるので黄緑色のマップになっております…)
最後に
自分も完全に把握してるわけではないので
あまりテクニカルに突っ込んだ話はわかりませんが、
GGX、Blinn-Phongはスペキュラシェーディングの計算方法であるということから
この2つを切り替えたことによる違いは鏡面反射光に影響があるわけですね。
今回の問題をみてもラフネス値は鏡面反射のボケ具合をコントロールする部分であることから、
ラフネス値があってない!
ということになったのかなと。
3dcoatでは親切にも解説が表示されるようになってるようです。
アーティストさんにある程度の知識が必要とは言っても
ソフト側からのそういうサポートの有無の差は大きいよなぁともおもうたり…。
かくいう私も今回の件でようやくGGXを理解したものなので…。
いっすーさんの一言でかなり理解が深まりました。
ただのアセットの供養からスペキュラシェーディングまで話が深くなって自分的には棚ぼたぐらいの収穫になりました。
Twitterでリプライを頂いた方々に感謝します。