頂点ブレンドスキン適応チェック 説明書

プラグイン名 頂点ブレンドスキン適応チェック
プラグイン本体:Windows(32bit) check_skin_for_blend.dll
プラグイン本体:Windows(64bit) check_skin_for_blend64.dll
プラグイン本体:(MacOSX) check_skin_for_blend.shdplugin
SDKバージョン SDK13 (463042)
対応Shadeバージョン V.13.2.2
プラグインタイプ シングルプラグイン、非常駐型
公開形態 フリー(無料)
リリース日 2013年3月6日

目次

  1. 概要
  2. インストール
  3. 使用方法
  4. クラシックスキンと頂点ブレンドスキン
  5. 御使用にあたって
  6. 作者情報
  7. 改定履歴

  1. 概要
  2. 頂点ブレンドスキン適応チェックプラグインはクラシックスキンスキン頂点ブレンドスキンに変更するときの整合性を確認するためのプラグインです。
    クラシックスキンの構造は、頂点ブレンド型スキンと比較して何でもあり型なため、必ずしも同じ動作を保証出来ません。 Shade13 には、移行機能は用意されてますが、移行した後意図通りにならない場合も起こりえます。本プラグインは、現在のクラシックスキンの設定が、ブレンドスキンに問題なく移行できるかどうかを事前チェックして、その内容をメッセージウインドウに表示します。その結果を見て、その部分を事前に調整した後で、 Shade で移行させれば安全です。同時に本プラグインで、おかしいとされた部分のスキンの設定内容から元々のミスや、クラシックスキン頂点ブレンドスキンの違いを理解する手助けにもなります。
    プラグインは、 Shade13.2.2 以上でのみ使用できます。

  3. インストール
  4. インストールは配布物を解凍して、Windows(32bit)版の場合は check_skin_for_blend.dll を、Windows(64bit)版の場合は check_skin_for_blend64.dll を、Mac OSXの場合は、 check_skin_for_blend.shdplugin Shade plugins フォルダかその下のフォルダにコピーするだけで完了です。但し、 Shade 13 からは、
    Windows Vista/7 の場合は、ユーザー>(ログインユーザー名)>マイ ドキュメント>Shade 13 >pluings/
    Windows XP の場合は、マイ ドキュメント>Shade 13>pluings/
    Mac OS X 10.6/10.7 の場合は、ユーザー>(ログインユーザー名)>Shade 13>pluings/
    のような、ユーザ側のフォルダにも保存可能になりました。(というより、こちらの方が、システム領域をアクセスしなくていいので、標準になった考えた方がいいようです。 Windows の場合、32bit、64bit両方のプラグインを同じディレクトリ内に混在させても構いません。)
    Shade を起動して、プラグインメニューの中に頂点ブレンドスキン適応チェックが見つかれば、インストールは成功です。

  5. 使用方法
  6. 基本的な使い方は、チェックしたい形状を必要なだけ選んでから頂点ブレンドスキン適応チェックを実行するだけです(このとき、事前にメッセージウインドウを少し広めに開いておいて、中身を消去ボタンでクリアしておいた方がいいでしょう。)。すると以下のような

    確認メッセージボックスが現れます。ここで OK を押すと実行開始となります。まず、

    のようなメッセージが現れます。これは、メッセージウインドウに問題あるスキンポイントを表示するだけでなく図形ウインドウ内で選択した状態にするかの指定です。 OK を押すと、確認後編集モードに移行して、ポイントを選択状態にします。キャンセルすると表示のみ行います。いずれかを指定すると、メッセージウインドウ内に下図の様な表示がされ、

    もし、ポイントを選択させる指定の場合は、図形ウインドウ上で、以下のようにポイントが選択されます。

    この例は、私提供のMakeHuman α7で生成される人体モデルです。結構、頂点ブレンド化するにはいくつか問題があるポイントが多いようです(実際このプラグインは、MakeHuman 頂点ブレンドスキン化のために敢えて開発したとも言えます。)。
    ここで、上記のメッセージウインドウに表示される内容に付いて、簡単に説明します。まず、一行で、形状の一つのスキンポイントを表現します。最初に形状名で [] 内にそのスキンポイント番号です。 total weight[] には、その右にある全ての weight の和(マイナスの weight は、0換算)の和で、これが、以外の場合、問題有りと見なします。次のその右に頂点ブレンドスキンに移行した場合の未調整状態の、バインドされているジョイントとそのウエイトの一式が、バインド数分 [ ] に挟まれながら続きます。この中に負の値のウエイトが、あった場合も、問題有りと見なされます。 Shade の移行ツールは、これらを自己調整した結果をバインドしていることになります。これらの問題有りスキンバインドの理由と調整方法に付いては、次項で説明します。

  7. クラシックスキンと頂点ブレンドスキン
    1. クラシックスキン
      • 簡単な説明
        クラシックスキンの場合、最初のバインドされたジョイントの親の全てのジョイントの動きは、全てそのポイントに反映されます。それ以外は、バインドにリストアップされたジョイントが、そのウエイト強度の分の影響度で、そのポイントに反映されます。二番目以降のバインド順序は、原則問われません。
      • 利点
        ウエイト量は、そのジョイントの影響度をそのまま反映していますので、各ジョイントがどの程度の影響をそのポイントに与えているかどうか、バインド部分だけで判断できます。同時にお互いのバインド間に値に対する決まり事がないので、各ジョイント毎にウエイト強度の値を調整しても問題は起きません。また、制限事項がないので、相当トリッキーなウエイト強度の設定をしてもちゃんとその変形を受け入れます。
      • 不利点
        利点の反面、自由度の多さは、調整の手間を上げます。そのつもりがなくても、逆にトリッキーな設定をしてしまう可能性があります。それ以上に、同じスキン変形を表現するのに、幾つも表現方法が採れます。例えば、[ジョイントA、ウエイト0]と、[ジョイントAの親ジョイント、ウエイト1]は、同じ意味になります。また、一般に、ジョイントA->ジョイントBの構造の場合、ポイントにかかる影響度は、ジョイントAのウエイト > ジョイントBのウエイト にしないと変な変形になりますが、そういう好ましくない指定もごく普通に記述出来てしまいます。つまり、マニュアル調整が結構面倒となるわけです。尚最も不利な点は、このスキンを掛けられたポイントの位置データが、内部的に、最初のバインドのジョイント内に置かれたと見なされた値に変換されてしまうことです。一番典型的問題は、反転コピーで作ったジョイントである形状スキンバインドを掛けたとき、その位置が、内部的に正負が反転してしまい、その後いろいろな形状の異常変形を起こす精神衛生上甚だ良くないことの要因になる点です。
    2. 頂点ブレンドスキン
      • 簡単な説明
        頂点ブレンドスキンは、基本的に、連続したジョイントの系列に沿ってバインドしていくことが前提になってます。勿論枝分かれした場合も、記述可能ですが、その場合はその場合の規則があります。まず、一番の違いは、ウエイト値の意味です。この値の意味は、そのジョイントのポイントに対する影響度ではありません。影響度から、その子の全てのジョイントウエイトを引いた値がウエイト値として設定されます。つまり、そのウエイト値は、子のジョイント影響度と自分の影響度との差分と言えます(つまり、マイナスのウエイトを許容しないことで自然に親の影響度の方が大きくならざるを得ないため、自然な変形に落ち着く効果をもたらします。)。その結果、全ウエイトの和は、必ず 1 になります。
      • 利点
        全体的にあるポイントのスキンバインドを許容される仕様の範囲で設定した結果は、それほど常識から逸脱した変形にならない点があります。枝分かれも、両方の影響度の和が、 1 以下に制限されるので、両方のジョイントを同時に動かしても互いの影響度が相加平均になるので違和感が減ります。
        ただ、一番の利点は、スキンを掛けられた形状のポイント位置がスキンを掛けても、ジョイントの変換マトリックスが異なる場合でも、変化しないことです。これは、それ以降での形状編集にトラブルが起きにくい最大の利点です。
      • 不利点
        一つには、スキンバインドの微調整やマニュアルによるスキン設定が直感的には、しづらい点です。一度作ったシーンにより細かい動きをさせたい時に階層の途中にジョイントを挿入して、新たにスキンを挿入する時は、まあまあ許容範囲ですが、ジョイント削除の場合は、注意する必要があるかも知れません。また。特定のジョイントウエイト値だけを見るだけでは、実際のそのジョイントの真の影響度が把握しづらいと言えます。また、スキンウインドウ上でのマニュアルでのウエイト値の編集では、値を増やすと、自動的に他のジョイントウエイト値は減りますが、逆に減らした場合は、自動的に他のジョイントウエイト値は増えないようですので、後での調整が必要になります。
    3. よくある問題あるスキンバターンとその修正方法
      私が作ったスキン問題有りとなったパターンは、大きく四つありました。一つは、完全なドジ設定、次に、エイムコンストレインツ拡張版を使った変形補正用のスキンで親子で子のウエイトが大きすぎる場合があった点、三つ目は、目の開閉用スキンと、目のモーフ用のスキンを各自独立して設定したため、両方のウエイトの計が1.以上になった点、最後はジョイント自体にスキンを掛け、そのジョイントと本来のジョイントの両方ともバインドして、それぞれウエイトを設定した場合でした。ドジは、別として、残りの3点に付いて説明します。
      • エイムコンストレインツ拡張版での問題
        これは、元のスキンに対して後から付加的にエイムコンストレインツジョイントスキンをポイントにちょうどいい補正になるようウエイトを調整したとき、その親のウエイトより大きくなったのが原因でした。これは、親のウエイトの値など気にしてなかったのが原因ですが、エイムコンストレインツ拡張版のマニュアルにも記述したように、親のジョイントスキンの値をエイムコンストレインツジョイントウエイトと同じ値にしても、変形が柔らかくなる傾向になるだけで大きな問題ではなさそうでした。
      • 同一階層のジョイント同士のスキンウエイトの問題(目付近の問題)
        クラシックスキンの場合、同じ階層のスキンウエイトの大きさの制限はありませんので、私は、目の開閉ジョイントと目のモーフジョイントスキンをそれぞれがそれぞれの部分で最大限影響するようにウエイト設定しました。そのため一部のポイントで、ウエイトの総量が、 1 になったのが原因です。この場合、問題有りのポイントのウエイトだけを調整するだけだと、他の部分とのバランスが崩れてしまいますので注意が必要です。こういう場合、その付近の全てのポイントのスキンのウエイト全体に対して、同じ比率で減らす必要があります。そうしないと、ジョイントを動かしたときその付近の形状がうまく変形しません。
        私の場合、目の開閉ジョイントは回転ジョイントですので、こちらのウエイトを全体的の減らしました。結果、完全に目を閉じるまでのジョイントの回転量が増えましたが、それだけで済みました。
      • ジョイント自体にスキンを掛け、それを使った複雑なモーフ変形の場合の問題
        私の場合、人体モデルの口の開閉での唇の複雑な変形の実現にこの方法を用いてましたクラシックスキンの場合、口の開閉ジョイントで口周り全体に、ごく自然なスキンをかけ、そこに唇モーフ用のジョイントを用意し、そのジョイントの位置と同じ位置の人体ポリゴンのポイントの口の開閉ジョイントのスキンと同じウエイトをモーフ用のジョイントに掛け、さらにその周りのポリゴン形状のポイントに対して、モーフ用のウエイトを追加で掛けました。その結果ウエイトの総量が、 1 以上にならざるを得ませんでした。
        どうも、ジョイントスキンを掛けて複雑な変形を実現するやり方は、頂点ブレンドでは許容されないようです。こういう場合、口の開閉ジョイントを上半分用と下半分用の二つを用意し、モーフ用ジョイントを上半分用ジョイントの中に配置するのが、手抜きの解決策のようです。 Shade IK を利用する方法も可能性がありますが、余計複雑になりそうです。その結果、また一つプラグインを考慮中です。

  8. 御使用にあたって
  9. 作者情報
  10. 改版履歴