Skin Tool ver.1.2.0

Masa: http://masatoshisoh.sitemix.jp/ 2017/3/28

スキンツールは、形状のスキンを微調整するのに便利なツールです。それと共に、スキンの診断と修復機能も備えています。
主要な機能は、以下の通りです。
  1. ブレンドスキンの場合は、そのウエイトではなく、実際の変形度合いで修正します。そして、その変更によって、それ以外のジョイントの変形度合いには影響しません。
  2. スキンポイントの並びを頂点番号以外に、その頂点の座標値でソートして表示出来るので、近くの頂点と比べながら編集出来ます。
  3. スキンポイントの並びで、選択された頂点を先に並べることが出来ます。
  4. バインドされたスキンの診断修復、クラシックスキンからブレンドスキンへの変換機能も持っています。

インストール方法

Shade名は、使用中のShadeのバージョンまで含めた名前のフォルダで、Shadeによって自動的に作られます。

Shadeを起動して、表示メニューの中にスキンツールのメニューが見つかれば、インストールは成功です。



このスキンツールをクリックすると、以下の様な割とコンパクトなウインドウが現れます。


動作環境

最初に

Shadeのブレンドスキンのウエイトをマニュアル調整しようとしたときの最初の印象は、結構面倒だなという点でした。その理由を説明します。
それは、ブレンドスキンのウエイトの値は、対応するジョイントの実際の変形度合いではない点です。ですから、そのジョイントで、どの程度の変形度合いにしたいと思っても、それに相当するウエイトは、その子の全ウエイトの総和を引いたものにしないといけません。 さらにバインド数が、3個以上あると、自動正規化(自動で、ウエイトの和を1.0に調整)の場合、修正したジョイント以外のウエイトの値は、等比配分で調整されてしまうので、それらの変形度合いも微妙に変わってしまいなかなか期待した設定ができません。この辺の微調整は、至難の業です。
以下の図を例に説明します。一番左が、実際の各バインドのウエイトを重ねたものです。その右に、各ジョイント毎の実際の変形度合いを並べています。この例は、ジョイント構造が、直列の場合です。



ブレンドスキンのウエイトは、全てのジョイントのウエイトの和が、常に 1 になります。そして、あるジョイントが動いたときの変形の度合いは、自分のウエイトと自分の全ての子のジョイントの和です。 こういう表現形式にすることで、一番親のジョイントの実際の変形度合いから始まり、その子毎に変形度合いが減っていって、最後のジョイントのウエイトだけが、真の変形度合いと同じになります。この形式なため、親の変形度合いが、子の変形度合いより小さくなるというような普通であり得ない状況が回避されるメリットがあります。また、枝分かれする場合でも、その各枝毎の和がに調整されるため、枝分かれ部分の配分が自動で調整されるメリットがあります。そういう意味で実装のレベルでは、ブレンドスキン の方が確かに有利です。
そこで、ブレンドスキンであっても調整は、変形度合いで行うというアイデアに気付きました。これは面倒ではあるもののプラグインで実現可能です。そして、ウエイト変更時の自動調整先をそのジョイントの親ジョイントだけに限定すれば、変形度合いの配分の問題も解決できます。この発想に、さらに以前から考えていた調整を支援する細かな細工を加えて、プラグインとして実現しました。

使用方法

スキンの診断、修復、ブレンドスキン化

クラシックスキンの場合は、自分でスキンを掛ける場合でも、不適切なスキンになる場合があります。ブレンドスキンの場合は、不正なスキンになる場合は少ないですが、どこからか入手したり、インポートしたシーンは、一度この診断をされることを薦めます。
方法は、対象の形状を選択してウインドウの2行目の診断のボタンを押すだけです。
その右のボタンは、その形状のスキンが、クラシックスキンの場合は、ブレンド化考慮ボタンとなり、スキンをブレンドスキンに変換する上での問題点まで含めるかどうかの指定です。また、ブレンドスキンの場合は、登録順もチェックとなり、スキンバインドの登録順の不正もチェックする指定になります。
もし、ルートパートを選択して実行すると、シーン全体の診断を行います。
その結果を参考にして、その右の修復ブレンド化を実行してください(但し、これらは、安全の為に選択された形状のみ実行します。)。
以下にどのような診断を行うかの内容を列記します。
  1. 有ってはならないスキン
    このチェックは、ルートパートやマスターオブジェクトパート、マスターサーフェスパート、イメージパートに不要にスキンが掛かってないかチェックします。この検査は、ルートパートを選択してシーン全体を診断するときに機能します。
    診断時には、メッセージウインドウにメッセージを出します。修復時には、スキンを削除します。
    メッセージ一覧に問題があった場合の診断(左)と修復(右)のメッセージを示します。

  2. バインド登録順の不正
    バインドの登録順番がジョイントの親子関係から見て合ってない場合を検出します。順番は、クラシックスキンの場合スキンウインドウに明示的に現れますし、最初のジョイントの順が間違っているとジョイントの変形がちょっとおかしい挙動になる可能性があります。 ブレンドスキンの場合は、基本的には不正ではないようですが、あまり気持ちの良い物ではありません。
    診断時には、メッセージウインドウにその内容を表示し、修復時は、正しい登録順に登録しなおします。
    診断の実行例1

  3. 負のウエイト
    負のウエイト値を検出します。クラシックスキンの場合一応逆方向の動作をするようですが、後々の安全を考えると、薦められません。クラシックスキンの場合ブレンド化考慮がオンの場合チェックします。ブレンドスキンの場合は、仕様上、動作保証されてないようですので、無条件に検出します。
    診断時は、メッセージウインドウに表示し、修復時は、 0 に修正されます。
    診断の実行例2

  4. トータル1のチェック(ブレンドスキンのみ)
    これは、ブレンドスキンの場合のみのチェックです。診断の場合は、メッセージウインドウに表示し、修復の場合は、全体が、になるように同じ比率で合わせ込みます。
    診断の実行例3

  5. 最上位ジョイントの不正バインド値(クラシックスキンでブレンド化考慮のみ)
    クラシックスキンの場合、最初のバインドのウエイトが、 1 以下の場合(極端な場合 0 )がよくあります。この場合は、暗黙でその親のジョイントのウエイトが、 1 だと見なされます。ところがその親自体が無い場合、ブレンドスキンに変換することが原理上不可能になります。この場合は、診断時は、メッセージウインドウに表示しますが、修復は、正しく行えません。対策は、マニュアルで、親のジョイントを作ってください。これで、ブレンドスキン化後の挙動を同じに出来ます。
    最上位バインド不正の例1
    もう一つの場合は、最上位のジョイントが、並列で2つ以上有り、そのウエイトが、 1 以上になる場合です。クラシックスキンの場合は、何の問題もありませんが、ブレンドスキンの場合は、その和は、 1 であることが前提です。診断の場合は、メッセージウインドウに表示し、修復の場合は、その和が、 1 になるように補正します。このエラーは、自分でマニュアルで修正した方がいい場合と、自動修復方が良い場合があります。
    最上位バインド不正の例2

  6. 子のジョイントのウエイトが大きすぎ(クラシックスキンブレンド化考慮のみ)
    これは、ブレンドスキンの要求事項です。診断の場合は、メッセージウインドウに表示されます。修復の場合は、この子のウエイトが、親と同じにされます。但しこのエラーは、逆に親の方を修正した方がいい場合もありますので、実際に確認して必要ならマニュアルで修正することを薦めます。
    診断の実行例2

  7. 兄弟ジョイント同士の不正ウエイト(クラシックスキンブレンド化考慮のみ)
    これも、枝分かれ時のウエイトの総和は、その親のウエイト以下である必要があります。診断時は、メッセージウインドウに表示されます。修復時は、以下になるように一律補正されますが、マニュアル修正した方がいい場合もあります。

診断を実行すると、もし問題が無ければ、以下のようなメッセージが現れます。



もし、エラーが見つかった場合は、以下のようなメッセージが現れ、



OK ボタンを押すと、メッセージウインドウ上に、エラーを列記し、同時にエラーのある頂点を選択します。
もし、エラーが表示された場合、上の説明を参考に、マニュアルで修正すべき所は、修正し、再度、診断を実行し、納得いったら、修復を行ってください。ブレンド化は、ブレンド化考慮を有効にして診断して、問題が無くなった時点で、実行してください。

ジョイント修復ボタンを押すと以下のようなメッセージが現れます



この機能は、一種のオプション機能です。Shade では、ジョイントのリセット時の値が、基底の値(生成時の標準値)でなくても構わない仕様ですが、この補正法は、Shadeのバージョン毎に異なります。 そのためリセット状態で、スキンを編集しても、形状が変形する場合があります。この機能は、そのようなジョイントのリセット時の値を標準値に戻します。 OK ボタンを押すと、そのシーン内にある全てのジョイントをチェックし、修正します。同時にそれによって発生する、形状の変形を元に戻します。
この機能は、形状情報ウインドウで、ジョイントをリセットしても、なぜかスライダーが変な位置にある場合に標準状態に戻したい場合に行ってください。

スキンの編集

スキンツールでのスキンの編集の基本は、先にバインドされているジョイントを決めて、変更したい頂点のウエイトをスライダーで変更するという考えです。ジョイントの切り替えは、選択されたスキンポイントのバインド内を走査するやり方(次のジョイント)と、現時点のジョイントの近傍に移るやり方(その右の4つのボタン)で行います。バインドの新規の追加は、未登録のジョイントを選んで、以降で説明する+ボタンを押すことで実現します。バインドの削除は、その実ウエイトが、0の場合にスライダーを右クリックすることで出来ます。



形状を選択すると、ウインドウのタイトルの [ ] の中にその形状名が表示され、ウインドウの下部にその形状のスキンポイントの内容が縦に並んで表示されます。
任意のスキンポイントの行のスライダーをドラッグするか、その左の数値を入力することで変形の度合いを修正されます。もし、以下で説明するマルチ編集ボタンが有効でその行が選択されていたなら、選択されている全てに同じ値が設定されます。でなければ、そのポイントのみ変わります。
その時点のジョイントのバインドがないスキンポイントには、新規にバインドを追加する+ボタンが現れます。任意の時点でこのボタンを押すと、そのスキンポイントに現時点で選ばれているジョイントがウエイト量0で追加されます。
上の図を参照しながら、順に各ボタンやスライダー、数値の説明をします。
次に、スライダー部1行の説明をします。
これらの機能を利用した操作例を示します。

実行例

以下に具体的実施例を示します。参考にしてください。

ライセンス