3DCoatでハードサーフェイスのベイク

Category : 3DCoat, CGTips · by 12月 12th, 2015

この記事は3d-coat Advent Calendar 2015 の12日目の記事です。

ちょっとマニアックな内容ですが3DCoatでハードサーフェイスをベイクするための工夫について書きます。

2015-11-29_11-24-22NormalMapのアーティファクト

ハードサーフェイスをベイクすると右のようなアーティファクトがでる事があります。
3DCoatに限らずハードサーフェイスのベイクにはちょっとしたコツが必要です。

2015-11-29_11-06-01なぜこのような現象が起きるか?

ベイクはリトポメッシュの外側と内側にレイを飛ばして行います。飛ばしたレイがハイポリメッシュにあたり、ハイポリメッシュの情報(Normalのベイクであれば法線情報)を拾うことでベイクができるわけです。リトポメッシュから外側と内側に飛ばす際のの基準になるのはリトポメッシュの法線になります。

リトポメッシュはソフトエッジでベイクを行うのが基本なのですが、ハードサーフェイスをベイクする場合、ソフトエッジゆえの法線方向によって理想的ではない方向にレイが飛んでしまうため不正な結果がでます。(不正なベイク結果を作るためにあえてひどいメッシュでリトポしています)

3DCoatの焼きこみスキャン設定はその原理がとてもわかりやすく表示されます。焼きこみスキャン設定で外側のプレビューを行うと図のように歪んで理想的出ない方向に拡張されているのがわかります。これはリトポメッシュがソフトエッジでスムージングがかかった法線方向に伸びているためです。

詳しくは背景アーティストのぶろぐのNormalMapをベイクする時の知識 その2を参照してください。

 

対処法

MayaなどのしっかりしたNormalの概念があるソフトでベイクを行う場合、先のリンクにあったようにハードエッジにすることで対応できるのですが、残念ながら3DCoatにはリトポメッシュにハードエッジの設定する機能はありません。ベイクするときに角度ベースでハードにする設定があるのですが、そういうものではないようです(よくわかってないので後で調べます)

リトポグループを分けてベイクすればいいかとも思ったのですが、リトポグループが分かれていても頂点は共有状態にあるためスムージングはかかります。それはそれで必須な機能なのですが、今回はリトポグループでは対応できません。

2015-11-29_11-14-25

今回は以下の方法を取りました。

  1. まず、グループに分けたいフェイスを選択してエクスポートします。
  2. 選択したフェイスを削除しておきます。
  3. 先ほどエクスポートしたフェイスをインポートします。

インポートしてきたばかりのフェイスの頂点は共有されていないので、実質、フェイスを切り離したことになります。その状態で外側のスキャンをプレビューすると先ほどとは異なり、手前の面や内側の円柱の部分が法線方向に拡張されているのがわかります。

2015-11-29_12-45-412015-11-29_12-53-42少々手間ですが、この方法でベイクした結果、ハードサーフェイスの不正な結果は比較的とることができました。

PBRマテリアルを割り当ててもこの通り!

NormalMapのアーティファクトには様々なケースと対処法があるのですが、今回は90度以上の角度がついたリトポメッシュのベイクについて考えてみました。

明日はめんたいこさんのAfter Effectsと3D-Coatです。楽しみ!

SHARE :

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です