エイムコンストレインツ拡張版説明書

プラグイン名 エイムコンストレインツ設定
プラグイン本体:Windows(32bit)名 EXaimconstraints.dll
プラグイン本体:Windows(64bit)名 EXaimconstraints64.dll
プラグイン本体:Windows(32bit)名 EXaimcosntraints.shdplugin
SDKバージョン 13SDK(463042)
対応Shade Shade 13.2.3以上
バージョン V.13.2.0
プラグインタイプ シングルプラグイン、常駐型
公開形態 フリー(無料)
リリース日 2016年2月6日

目次

  1. 概要
  2. インストール
  3. 使用方法
  4. その他の事項
  5. 御使用にあたって
  6. 作者情報
  7. 改定履歴

概要

Shade 標準搭載のエイムコンストレインツジョイント(常にターゲットのジョイントを向くように動くジョイント)は利用価値は高いものの、かなり硬直化した実装になっていて、後から位置の微調整が出来ない点や、プラグインから利用出来ない等の制限がありました。そこで、プラグインで、より柔軟性のあるエイムコンストレインツ拡張版を実現しました。使い方の一番の違いは、設定して後から、いろいろ調整していける使い方を前提にしている点です。以下にその特徴を列記します。
本プラグインは、Shade 13.2.2 以降でのみ動作します。それ以前のユーザの方は、旧版をご利用ください。但しShade 9 以前では、それも動作しません。

インストール

インストールは、は配布物を解凍した中の Windows(32bit) の場合 EXaimconstraints.dll を、 Windows(64ibt) の場合 EXaimconstraints64.dll を、MacOSX の場合は、 EXaimconstraints.shdplugin
Windows Vista/7 の場合は、ユーザー>(ログインユーザー名)>マイ ドキュメント>Shade名>pluings/
Mac OS X の場合は、ユーザー>(ログインユーザー名)>Shade名>pluings/
のような、ユーザ側のフォルダにコピーしてください。 Windows の場合この方法でも、32bit、64bit両方のプラグインを同じディレクトリ内に混在可能です。
Shade を起動して、ツールメニューカスタム情報内のメニューにエイムコンストレインツ設定が見つかれば、インストールは成功です。同様に図形ウインドウ内でマウスの右ボタンをクリックして現れるメニューやブラウザ情報ボタンで現れるメニューにも現れているはずです。但し、最初は無効状態のはずです。

使用方法

基本的な使い方は、ターゲットにしたいジョイント(注:現時点では、ボールジョイントボーンジョイントのみです。それ以外は、受け付けません。)を記憶させ、連動させたいジョイント(連動ジョイント)を選択して、カスタム情報エイムコンストレインツ設定をクリックすることで有効になります。連動ジョイントからターゲットへ伸びるワイヤフレームが現れ、標準のエイムコンストレインツと同様な動作を行います。連動関係を解除する方法は、標準のエイムコンストレインツの場合と同様にターゲットジョイントを削除することでも出来ますが、それ以外に、連動ジョイントを選択した状態で、エイムコンストレインツ設定のメニューをクリックすると現れるダイアログのポップアップメニューで解除を選んで、 OK を押すことでも連動は解除されます。

ここで、解除の代わりに保留を選ぶと、連動関係を残したまま、連動動作を中断します。
もし、ジョイント記憶しないで、ジョイントを選択して、カスタム情報エイムコンストレインツ設定をクリックすると、下のようなダイアログが現れます。

ここで、方向指定型にするにチェックを入れて、方向を、上下左右前後のどれかを選んで、 OK を押すと、そのジョイントは、方向固定型エイムコンストレインツジョイントになります。このジョイントは、ターゲットの場所を向く代わりに、その方向を常に向くジョイントとなります。Shade13 からは、より高機能なモーションエフェクトが用意されてましたので、そちらを利用する方を薦めます。
以下に、いくか典型的使い方について説明します。

形状の変形補正用としての利用法

この例として、配布ファイル内に添付している arm_sample.shd を使って説明します。このシーンは、 Shade のコンテンツ内の animation.shd ジョイントボーンジョイントに変更し、スキン頂点ブレンドに直したものに拡張エイムコンストレインツジョイントを付加したもので、腕の筋肉の擬似エミュレーションを実現したものです。

エイムコンストレインツジョイントには、ボールジョイントを使ってますが、終端ジョイントが不要ですので、エイムコンストレインツジョイントとしては、ボールジョイントの方が使いやすそうです。この例で分かるようにエイムコンストレインツであることを示す少し変わった形のターゲットに向かったワイヤフレームが描画されてます。ここで、elbowジョイントを動かしてみます。

腕に力こぶが出来てます。この様に、エイムコンストレインツジョイントは、ジョイント構造の間に挟みこむことによって、形状変化にアクセントを加える効果を出せます。
この変化の程度は、スキンの強度を調整すれば、好みの程度に調整できます。同時に、連動のエイムコンストレインツジョイントターゲットジョイントの位置を色々調整することで、変形の形を色々調整できます。そういう意味で、まず設定してから調整するというのが、このプラグイン の考え方です。保留は、この補正する間に利用します。
一般に、ジョイントの親子関係を A->B->エイムジョイント として、ターゲットをAジョイントにすることでBジョイントの変形補正が出来ます。このとき、エイムジョイントより遠い方に配置してエイムジョイントスキンで補正すると、曲げて縮む方が膨れ、伸びるほうが凹む効果になります。逆にエイムジョイントの間に配置するとその逆の効果になります。

保留の利用法

エイムコンストレインツの効果が意図したものでない場合、関連するジョイントを一旦リセットしてから保留にして、エイムジョイントターゲットジョイントの位置調整後再度有効に戻すような使い方が出来ます。但し、位置調整をする場合は、編集モードにして、ジョイントの頂点を選択して移動させてください。オブジェクトモードジョイントを動かすとそのスキンが懸かっている形状が変形してしまう可能性があります。

捻りが起こらないボールジョイントを作る利用法

ボールジョイントボーンジョイントは多機能なジョイントですが、その操作は結構面倒です。インバースキマティックや、ジョイントモードが付加されて、以前より随分楽にはなりましたが、それでも、結構意図しない捻り方向の回転が付くとそれを解除することは結構面倒です。こんなとき、対象のジョイントブラウザ上で同じ階層にターゲットジョイントを作り、それを腕の伸びる方向のどこかに配置して、エイムコンストレイツ設定すると、ジョイントモードターゲットジョイントを動かせば、自然に腕がその方向に曲がらせることが出来ます。ターゲットジョイントを腕から大きく離して操作すると微妙な角度で調整ができます。オイラー角のスライダーでの調整よりはるかに直感的に操作できます。

プラグインからの利用法

プラグインは、ユーザ作成のプラグインから間接的に利用することも可能です。基本的には、以下に示すエイムコンストレイツ設定UUIDを指定して、プラグインインターフェースを取得して、その do_it() メンバー関数を呼び出すことで実行します。
このとき、 do_it() の三番目の引数の void *aux に、連動ジョイント shape_class ターゲットジョイント shape_class のエントリーの配列のアドレス指定して呼び出します。このとき、両方の shape_class とも正しく渡せば、連動設定、二番目の内容が、 0 なら、最初の shape_class のジョイントの連動解除、一番目の内容が、 0 なら、二番目の shape_class のジョイントの連動を保留 1 なら、二番目の shape_class のジョイントの連動を有効にします。さらに、もし 2 であれば、現在の状態をその位置にセットして返します。
:以下の例は、ある程度プラグインが分かる方を前提にしています。このソースコードの前に必要な設定や定義が既にされていることが前提です。
連動登録の例
sx::uuid_class aim_uuid (0x50030030,0x53B811D9,0xBCFF000A,0x95BACEB2) ;
shape_class * shapes[2] ;
compoiner<plugin_interface> aim_comp ( shade->find_plugin_interface_with_uuid (aimconstraints_uuid) ) ;
shapes[0] = &aim_shape ; // 連動ジョイントの shape_class *
shapes[1] = &target_shape ; // ターゲットジョイントの shape_class *
aim_comp->do_it ( shade, scene, (void *)shapes ) ;
連動解除の例
sx::uuid_class aim_uuid (0x50030030,0x53B811D9,0xBCFF000A,0x95BACEB2) ; shape_class * shapes[2] ;
compoiner<plugin_interface> aim_comp ( shade->find_plugin_interface_with_uuid (aimconstraints_uuid) ) ;
if ( aim_comp ) { shapes[0] = &aim_shape ;
shapes[1] = (shape_class*)NULL ;
aim_comp->do_it ( shade, scene, (void *)shapes ) ;
}
連動有効非有効の切り替え例
sx::uuid_class aim_uuid (0x50030030,0x53B811D9,0xBCFF000A,0x95BACEB2) ; shape_class * shapes[2] ;
compoiner<plugin_interface> aim_comp ( shade->find_plugin_interface_with_uuid (aimconstraints_uuid) ) ;
if ( aim_comp ) { shapes[1] = &aim_shape ;
shapes[0] = (shape_class*)active_flag ; // acive_flag==0:保留化 1:有効化
aim_comp->do_it ( shade, scene, (void *)shapes ) ;
}
連動有効非有効の情報取得例
sx::uuid_class aim_uuid (0x50030030,0x53B811D9,0xBCFF000A,0x95BACEB2) ; shape_class * shapes[2] ;
compoiner<plugin_interface> aim_comp ( shade->find_plugin_interface_with_uuid (aimconstraints_uuid) ) ;
if ( aim_comp ) { shapes[1] = &aim_shape ;
shapes[0] = (shape_class*)2 ;
aim_comp->do_it ( shade, scene, (void *)shapes ) ;
bool active_flag = ( shape[0] == (shape_class*)0 )? false:true ; }

その他の事項

御使用にあたって

作者情報

改版履歴