勉強会で使用されたスライド等はこちらにアップされておりますので、ご確認ください。
○UE4 Lightmass Deep Dive ポストモーテム
Lightmassでライティングを行う以上ちゃんと作成しなければならないのがライトマップですが、
なかなかに面倒な作業だったりします。
ライトマップを作成するにあたりいくつか押さえておかなければならないポイントがあり、
これらを守っていないときれいな結果が得られにくくなります。
- ライトマップUVはオーバーラップしないようにする。
- UVシェルはできる限りつなげる(必ずしもよいとは限らない場合もある)
- エッジのラインはピクセル(グリッド)の方向と合わせる。
- UVシェルのパディング(間隔)は最低4ピクセル確保する。。。。
ライトマップについての解説は公式を読んでいただくのがよいのですが、
hisamuさんがblogにわかりやすくまとめてくださっています。
また、海外だとUDK(UE4の前のバージョン)でのライトマップの展開方法について数多くのサイトがあります。
基本的な考え方はUE4も同じなので参考にしてみてください。
(UDK, Lightmapで検索すると色々出てきます)
UDK: Lightmap UV Layout Techniques & How to Create a Second UV Channel in Maya
Tutorials – UE3 Lightmapping
今回私がやるのは、4つ目にあるパディングを4ピクセル確保するための方法についてです。
■ライトマップの1ピクセルがわかるようにする
※8/4改編
もっとわかりやすくていい方法があったので書き直しました。
以前の方法だと端数のグリッドができてしまいましたが、この方法だとぴったりと1グリッド1ピクセルになります。
ライトマップUVをレイアウトするにあたり、必要なパディング(間隔)の値は公式サイトに記載があります。以下引用。もっとわかりやすくていい方法があったので書き直しました。
以前の方法だと端数のグリッドができてしまいましたが、この方法だとぴったりと1グリッド1ピクセルになります。
ライトマスが、にじみのアーティファクトを防ぐのに十分なパディングを自動的にエッジ周囲に行うからです。UV チャート間にパディングをセットアップする場合、DXT 圧縮が 4x4 テクセルのブロックで動作するため、すべてのにじみを防ぐために通常 4 テクセルが必要になることに注意してください。
ライトマップを展開してて思うのは4ピクセルの隙間ってどんくらい?
ということで、1ピクセルがわかるようにグリッドの表示を変更して確認できるようにしてみます。
ここの設定はあくまでも確認用なので、毎回やる必要はありません。
UVエディタのビュー>グリッド□からグリッドのオプションを開きます。
まず、グリッドラインの間隔を1にします。
次にサブディビジョンに使用する解像度を記入します。
サブディビジョンを表示させるために、サブディビジョンラインにチェックを入れます。
今回作成するライトマップはUE4のデフォルトで設定されている64ピクセルを想定して、
サブディビジョンに64と入れてみます。
入力したら適用を押します。
するとグリッドがこのような感じになります。
細かくてわからねぇw
って感じですが、縦横に64個グリッドが作成されているので、1グリッドが1ピクセルとなります。
わかりやすく確認するなら16ピクセルの場合を想定して値を入力してみましょう。
これでパディングが何ピクセルか確認しやすくなりました。
■レイアウト機能で自動的に適正パディングを確保する
※8/4改編パーセンテージ空間の数値の考え方について指摘を頂いたので、それを踏まえた内容に修正しました。
次にパディングを確保しつつ、オーバーラップしないようにレイアウトする方法です。
MayaのUVエディタにはレイアウトという機能があり、隙間を何パーセント確保するかを決めることができます。
UVエディタのポリゴン>レイアウト□からオプションを開きます。
赤枠にあるシェルの間隔のところでパディングは指定することができます。
それ以外にもUVシェルのスケールを統一してくれたり、重ならないようにレイアウトしてくれたりするので、非常に便利です。
レイアウト、レイアウト設定のところは私は普段使用している設定なので参考までにどうぞ。
Maya側で間隔のプリセットが用意されていますが、どういう基準なのかはいまいち不明…。
入力はUVの0-1の空間に対するパーセンテージになるので、UE4でデフォルトで指定されている64ピクセルのライトマップを想定して計算してみます。
計算式はこんな感じに算出しました。xが求めたいパーセンテージの値です。
64pixel : 4pixel = 100% : x%
計算するとx=6.25と出ます。
しかし、ここで問題が発生。
このレイアウトのオプションで入力できるパーセンテージの値は5%が上限のようです。
さらに問題があり、計算で出したパーセンテージの値だと間隔が開きすぎてしまいました。
とりあえず、5%を入れてみたものの…
試しに3.125を入力してみると、ちょうど4ピクセル確保できてるように見えます。
これはどういうことなんでしょうか??
と思いましたが、もんしょさんから神の声
3.125%で適切な理由って、各アイランドの上下左右に2ピクセルののりしろがあれば隣のアイランドのぶんと合わせて4ピクセルになるからじゃないかと思ったり。— もんしょ (@monsho1977) 2016年8月3日
たしかに!なるほど!もんしょさんありがとうございます!
このことを踏まえて解像度事にパーセンテージをリスト化すると以下のようになります。
- 32 6.25%(入力できない!! ><)
- 64 3.125%
- 128 1.5625%
- 256 0.7812%
では、改めてこの数値を入力して、レイアウトしてみます。
すると約4ピクセルのパディングが確保できたことが確認できます。
ライトマップの解像度なんて、アセットによって異なるので毎回パーセントを入力しなおすなんてめんどくさい… って感じなので、
この一連の操作を楽にするようなmelがあればいいな~なんて思ったり…。
■もっとわかりやすいやつ…
しかし、このパーセンテージってわかりにくいですよね。
もしMaya2016Extention2以降のバージョンをお使いであれば、レイアウトのオプションにUnfold3Dの方式が追加されており、もっとわかりやすく感覚的に使うことが可能です。
方法はUnfold3Dに変更します。
パッキング反復は回数が多いと何回も配置の計算をするので1回にしていますが、シェルの数がすごく多い場合などは20とかデフォルトの値を入れてもよいかもしれません。
ここについては未検証。
レイアウト設定
テクスチャマップサイズにライトマップ解像度を入力
シェルのパディング:シェルの間隔を指定
タイルのパディング:UVの端からのパディングを指定
タイルのパディングについては公式の記述によると、
ライトマップの UV レイアウトのエッジ周囲のパディングは不要です。
とあるので0を入力してよさそうです。(ちょっと不安ですけども…)
上記設定で適用をクリックすると以下のようなレイアウトになります。
シェルのパディングは4ピクセル確保されており、
タイルからはぴっちりくっついた状態になります。
私はまだEx2をメインで使用できていないのですが、
Unfold3Dのレイアウト機能はとても強力なので、使える方は使ってみるとよいかと思います。
■さいごに・・・
次にUE4で何か作るときにちゃんとライトマップの展開ができるようにと残したメモ程度のものなので、これで運用してたら何か問題が出てくるかもしれませんし、
こういう場合どうすんだ?みたいなのもあるかもしれません。
ライトマップで苦しむかたの参考になればよいなと思いますので、
何か誤ったことやこうしたらもっといいよとかあれば教えてください!!
0 コメント:
コメントを投稿