MMD4Mecanim Tessellation機能とマテリアル編集のコツ

  • 11
    いいね
  • 0
    コメント

この記事はOculus Rift Advent Calendar 2016 の4日目の記事になります。

Tessellation(テッセレーション)とは

MMD4Mecanim20161029版からTessellation(テッセレーション)を有効にする機能が追加されました。テッセレーション自体は最近生まれた技術ではなく、ずいぶん前からGPUの機能として実装されていたりします。しかしながら処理負荷や少ない頂点から思った曲面を生成するのが難しく、今時のGPUであればデザイナーがNormalMapの利用や頂点数を増やしたモデルを作成する方が低コストで高品質なものが作れるため、一部の変形用シェーダーから利用されるに留まり、特にキャラモデルには使用されない機能として眠っていたものでした。しかしVR制作において、数センチまでキャラモデルにカメラが寄れてしまう構造からテッセレーションと相性が良い状況が発生しているというのが現状です。そういった背景から今回のMMD4Mecanimのテッセレーションについて書いてみました。

MMD4MecanimのTessellation

VRとの相性の良さ

ゲームなどの場合、キャラモデルがカメラに近づいてきたら(ゲーム進行の)邪魔になるので非表示にしたりするため、描画コストと制作コストを掛けてまでテッセレーションで面を滑らかにする必要がなかったのですが、VRの場合、キャラモデルに数センチまでカメラが近づくことも十分想定され、キャラクターとのコミュニケーションを楽しむコンテンツであるならメリットの方が大きくなっていくと推測します。
161031_Yomiku_Tessellation.png

ただ実際に適応してみると変形しすぎたり隙間が空いたりして、キャラクターのプレゼンスを削いでしまう表示になる変換をすることがありますので、使用の際はそのあたりに注意する必要があります。

パラメータ説明

マテリアルごとにON/OFFの設定、変形パラメータを指定することができます。変換時のInspectorから設定すると、全体に適応する調整ができます。ここで大まかな密度と変形具合を設定しておくことをお勧めします。特に人体モデルの場合は、まず全てONにしてみて全体のパラメータ調整⇒個別マテリアルの調整をするのがよろしいかと思います。

テッセレーションをONにする

変換後でないとオプションがInspectorに表示されません。変換後、Projectビューの定義ファイルを選択して、MaterialタブからテッセレーションをONにします。
161204_TessellationON.png
調整しやすいよう Sceneビューの描画モードをShaded Wireframeにして分割が見えるようにします。

カメラからの距離で変化する頂点密度の設定

カメラの距離から近いほど面が自動分割されます。ただし分割数が多いと処理負荷も増大しますので、分割数が少なくなるよう調整します。Edge Lengthの値は数値が大きい方が分割数が減り処理が軽くなります。デフォルトは値が小さい気もしますので、(モデルにもよりますが)12~16あたりから調整を始めるといいかもしれません。
161204_EdgeLength.png

変形時の膨らみ具合の設定

Phong Strengthで調整します。数値が大きいほどよく膨らみ丸みを帯びる変形をします。初期値は0.5ですが、ここの値が大きすぎると元のモデルから崩れることにもなるため、出来るだけ小さな値で丸みが良い感じになるように調整するとよいでしょう。
161204_PhongStrength_Sample.png

注意点

デカールが埋まる

ポリゴン数を減らしたり、法線を綺麗に出すために、面をちょっと浮かせて模様を書き込むような手法でモデルを制作することがよくあります。その際、頂点を共有していない面をテッセレーションで補間したときに、浮かせた方の面が埋まってしまうことがあります。
テッセレーションのパラメータを調整である程度回避することができますが、噛み合わせによってはモデルの頂点を増やしたり、結合してテッセレーションで崩れないモデルに修正する必要が出てしまうかもしれません。
161204_Tessellation埋まり.png

デカールポリゴンのマテリアルが分かれている場合

(2016/12/04追記)
デカール用にマテリアルが分かれている場合はポリゴンを浮かせる距離を調整して回避できます。静止しているときは大丈夫でもモーションを入れると埋まってしまう場合などにも有効かと思います。
161204_TessExtrusionAmount.png

ハードエッジに隙間ができる

箱のような形状の角をモデリングする際に頂点を分離してエッジを立てることがよくあります。頂点を共有していない面をテッセレーションで変形させたときに、そこに隙間が表れてしまします。そうなると物体としての存在感が薄れVRにおけるプレゼンスが削がれてしまいます。膨らみのパラメータを小さくするかモデリングの段階で頂点を共有する(エッジ部分の頂点を増やしてエッジを立てる)などの対策が必要になります。
161204_Tessellation隙間.png

ポリゴンが刺さっている場合に使える隙間回避方法

MMD4Mecanimの作者であるNoraさんがポリゴンのエッジを伸ばす機能を追加してくれました。使える状況が限られてはいますが、こういう機能があることを覚えておくとよろしいかと思います。

MMD4Mecanimマテリアル編集のコツ

マテリアルを個別に編集する

変換定義ファイルのInspectorからマテリアルを編集することができます。ハードエッジなオブジェクトで隙間が空いてしまったマテリアルなどを個別にテッセレーションOFFにしたいときや、変形を個別に調整したい時などに利用するとよいでしょう。
161204_デカール埋まり.png
(ヘッドホンのマテリアルのテッセレーションを個別にOFFにして、埋まりと隙間を修正した例)

複数マテリアル同時編集

Unityの標準機能になりますが、マテリアルを複数選択(CtrlやShiftキーを押しながらファイル選択)することで共通項目を同時編集ができます。同一タイプのシェーダーでないと共通項目が少なくてなかなか同時編集はできなかったりもするのですが覚えておくと調整作業が楽になります。
161204_複数選択編集.png

テッセレーション的に同時編集したいマテリアルファイルをフォルダで分離しておくと選択~編集が楽になるかと思います。
※UnityのProjectビューからフォルダ作成⇒ファイル移動することで安全に分離ができます。OSのファイル操作でファイル移動は行わないこと!(シーンなどそのファイルを参照しているファイルが壊れます)

最後に

キャラモデルには使えない(その必要がない)と思われていたテッセレーションがVR用途で急にその有効性から注目される日がくるとか、何が起きるか分からないものですな…。

明日のOculus Rift Advent Calendarはおばたさんの「『ふぉとゆに』をViveからTouchに移行したハナシ」です、よろしくお願いします。

それでは皆さま、よきMMD4Mecanimライフを( ・ω・)ノシ

参考


※この記事はピアプロ・キャラクター・ライセンスに基づいてクリプトン・フューチャー・メディア株式会社のキャラクター「初音ミク」を使用したものです。

この投稿は Oculus Rift Advent Calendar 20164日目の記事です。