2014年10月31日金曜日

NormalMapをベイクする時の知識 その2

その1ではNormalをベイクするためのソフトエッジ、ハードエッジについて書きました。
今回はその結果を踏まえて新たに出てくる問題の解決方法について記述してあります。

(追記)
別の方法でも歪みを解決できる事がわかり、追記しました。
NormalMapをベイクする時の知識 その2(追記)


角付近にある形状が歪む問題の解決方法


ここではUDN-法線マップの加工の内容を実際にテストしてみたいと思います。
(わざわざ同じようなモデルを作成してみました…)

これは、角付近にある形状が歪んでしまう問題の解決方法です。


その1のEの方法を踏まえて、下図のようなHighModelのNormalをベイクしてみたいと思います。
LowModelの法線は複数のスムージンググループを使用しており、
それにあわせてUVを切り離してあります。
(実線はハードエッジ、点線はソフトエッジです)





以下はベイクした結果です。
角は綺麗に番っていますが、丸く凹凸をつけた箇所が少し伸びてしまったり、
穴が一部ふさがったような感じで正しくベイクできていないのが分かります。
角にあるほど丸の形が歪んでしまうので、
スムージンググループにあわせてデタッチする方法をしてみたいと思います。



スムージンググループ毎にデタッチとは、スムージングに合わせて頂点を切り離した状態です。
このメッシュのエンベロープ(Mayaの場合)を表示すると
下図のように面の形状が崩れず水平垂直方向に移動します。




ベイクした結果はこちらです。
丸い凹凸の形状は歪みなく綺麗にベイク出来ました。
しかし、角の部分は正しくベイクできていません。



この時の法線向きを簡単に説明すると(うまく説明できてないかもですが…)、
各頂点がつながっている場合、角になるほどに法線の計算の向きが斜めになっていきます。
そのため、角にある凹凸の形状が歪んでいました。

各頂点が繋がっていない場合だと、角が繋がっていないので、
面に対して垂直に法線が計算されています。

しかし、角の部分まで法線が計算されないので、
上図のように角の部分の表示がおかしくなります。



UDNの記述をみると、『スムージンググループでデタッチした結果に対してUVを調整して
角の表示がおかしくなっている箇所を直す。』
という言うようなことが書かれているのですが、正直複雑な形状だった場合めんどくさいので、
今回は

両方の結果をPhotoshopで合成し、結果がよい部分だけを使用する。

という方法で作成してみます。
その結果が下図です。

角も綺麗につながっており、丸い凹凸も歪みなく作成できていると思います。



UVを調整して角が綺麗につながる方法をとっても問題はなさそうです。
この方法だと一発でベイクというわけにはいかないので、
他にもよい方法をご存知の方は教えていただけると助かります。

よい内容を見つけたらまた更新します。

2 件のコメント:

  1. いつもながら解りやすくて丁寧な解説でとても参考になります!
    質問ですが、上記のやり方でNormalをベイクして実際ゲームエンジン等で使用する場合
    メッシュのスムージングは維持するとして切り離した頂点はマージしても大丈夫なのでしょうか?
    初歩的な質問で申し訳ありません。

    返信削除
  2. 頂点はマージして大丈夫ですよ。
    どちらかというと、切り離したメッシュはベイク用として考えたほうがいいですね。

    切り離したメッシュも、もとのメッシュも同じスムージングになっているので
    ベイクしたノーマルをそれぞれに貼っても同じ結果が得られます。

    返信削除