Tag: XSI日記 ​伊吹萃香 リギング
初めに
こちらの記事はニコニコ動画内で
配信したものをメモ書き。
どの道他の記事と似たよった個所が多いので
必要な部分のみメモ。
BipedGuideによるベース作成
BipedGuideからBipedRigを生成し、カスタマイズする
案1
膝がつぶれる対策の実験で、
3関節にしてみる。
デュアルクォータニオン云々も良いとは思うんですが
根本的な部分から考え直した方が早い気もしつつ・・
しかしFKアニメーションとか作りづらいと思うので
2関節で、補助NULLを設置して
挙動をエクスプレッション、リンクパラメーター等で制御した方がよいのだろうか。
回転の挙動やアップベクター制御、他のキャラクターとの
同一モーションにした場合どういう差が出るかを考えて採用しないといけない。
さて、どうしようかな。
構造について
やりすぎた。
設計に時間かけ過ぎです。
でも揺れ物は全て動くし、
シミュレーションかけた後、微調整ができるように設計してあるので
完全に実用に耐える設計にはできたと思います。
Syflex
RigidBody![]()
MindThinkSpring
Shape
残念ながらICEは使ってませんが
softimageの機能を遺憾なく利用して設計しました。
今回はHairダイナミクスは無しよ〜
つかいづら過ぎるのでICEに期待。
でも、悩みが出てきました。
リグの構造は肥大する一方です。
制作には膨大な時間もかかるし、
修正する必要も出てくるだろう。
モーション作業する側も大変だ。
幾ら揺れ物が自動化されてるとはいえ
手直しが必要になってくる。
そもそもモーションを作るのは、
基本私一人なので
自動化&ある程度の修正で
済む事が大前提だから別に悪い事ではないのですが。
何か、思いつかない心配事があるような事がある気がしてならないが、さて・・・
あらゆる心配を
払拭できる魔法の言葉は
「どうだ、どこの3Dモデルよりも可愛いだろう!?」
髪の毛もリボンも鎖も全部動くし
素敵な笑顔も作れますよ。
なおかつ全てのコントローラーは微調整ができるんだ。
我慢して作業しろ、
時間をかけていい物作れと。
私のゴーストが囁くんですよ。
よっしゃ、やっぱりリジッドボディでしっかり衝突判定つけるかなー!
完成が遠のく。
フェイシャル
シェイプをプリセットとして利用するが
リグとしても利用できる
フェイシャルは、
間にポリゴンメッシュを挟み、
クラスターコンストレインで
位置を取得。
その位置は、浮動NULLで再調整が可能
顔の表面はボーンで若干制御させ
「口」「瞼」の開閉させることが可能。
首
基本は、他のRIG同様にBOXを移動、回転で制御。
今回は、対戦ゲームという事もあり、
常に敵の方向に首を向けておくという仕組みを初めから取れるように設計。
(後で考えたら、別にゲーム中にRIGの存在意義なんて無いのを思い出す、首の向きなんて相手の位置で変わるわけで・・まあ映像用には使える。)
あと、首は確実に頭が動くと連動するものなので
spineを利用。ボーンだと不要なコントローラーが必要になる。
スカート
スカートにはSyflexを利用。
そのあと、ShapePlot用にメッシュを作ってケージデフォーム。
それに対してNULLをObjectToClustar
させる。
それにNULLを子供にする。
それに対してShadowCaractor
化。
それに対してエンベロープをかけて終わり、と。
ゲーム用途でもあるので、Skirtを完全に頂点情報取得してると
ノード数が馬鹿みたいに多くなるので
最適になるまで絞る感じ。
ただし結構足がはみ出る。
この辺は黄色いコントローラーで微調整。
ShapePlot後に頂点移動で調整するのよりも
移動値で変形させた方が楽。
腰の鎖
MindThinkSpringフォースベースド、コントロールスプラインチェインRIG
設計に丸1日かかった。
MindThinkSpringで自動で揺れる。重力と風など考慮
この状態で、如何にしてコントロールし易くするかが肝になる。
今回チェインの「付け根」と「先端」は拘束しておきたいので
ボーンは使わずNULLデフォーマーを利用。
この際、微妙に伸びちゃうのは気にしない方向で考える。
これも、個別のデフォーマーを動かして微調整できるように
Offsetコントローラーは必ず配置する。黄色いBOXがソレです。
コントロールスプラインを使い、
大量にあるチェインを少ないコントローラーで動かす
●と▲オブジェクトをチェインの先端に移動できるように、
カーブコンストレインで位置を変更可能に。
ストレッチボーン&SoftEffector
XSIBLOGで公開されてる、ストレッチボーンを導入。
前回も使ったのですが、新バージョンだとストレッチボーン&softIKが出来るようです。
レンダリングしたときに、スクリプト評価エラーがでて動かないとか意味不明なバグも直ってるとよいのですが。
とりあえずストレッチボーンモードで導入。
正直手足の長さは調節できた方が良い気がしてきました。
カメラカットによっては手足短すぎたりする場合、無理やり伸ばしたりとか
アニメーション中でも手足若干伸ばした方がケレンミが出たり、です。
ストレッチはいいとしてSoftIKが無いと、腰が浮き過ぎたりすると
膝がすぐガクっとなるので修正が大変過ぎです。
色々とボロは出たりしそうですが、今回もコチラ導入してみました。
Synoptic View
ゴミゴミしすぎかな?
これ作るだけで1日かかるので正直あり物を流用する方がいいのですが・・
久々に作ってみました。
オートシノプティックジェネレーターツールで大まかに生成してから
インターフェイスを綺麗に整える。
しかしオブジェクトがゴミゴミし過ぎてて上手くキャプチャしてくれない・・
なんだか挙動も意味不明なので
大人しくコツコツ作る事にします。
結構使い勝手いいアドオンなんですがね。
シノプティックが作られてないデータとか、こいつで自動生成後
若干微調整すれば結構使える。
複数選択と、トグル選択ができるように仕込みを入れる。
記述例、ここで選択のトグルと追加選択ができるように
「SynopticSelect
」コマンドを定義しておく。
ちなみにコレはikaさんにお借りしてるシノプティックビュー(中身はpythonですが)
を参考にvbsで書き直したものです。
if文を使い、
もし・・既にオブジェクトが選択されているときはToggleSelection
を利用
もし・・選択されていない場合は何某・・等の条件を記入しておく。
oModelで、選択しているmodelノード判定。
model名が異なった場合でも機能不全起こさずに選択できるようになる。
SelectObj "TH_Biped.HEAD_RIG", , True
をそのまま利用すると、model名が変わってしまった場合対応できない。
このシノプティックビューは、複数のキャラクターで使い回す事を前提にしているので
TH_REIM.HEAD_RIGといった場合には対応できない。
SelectObj "*.HEAD_RIG", , True
といった具合にワイルドカードを利用した場合だと、
シーン上に複数のキャラクターが居た場合全て選択されてしまう。
そのため、選択中のmodelノードの名称は、その都度判定を切り替える必要がある。
sub SynopticSelect(in_obj, objName, in_Mouse, in_Key) set oModel = Application.ActiveSceneRoot.FindChild(in_obj).Model set oObj = oModel.FindChild(objName) if 0 = in_Key then Application.SelectObj(oObj) elseif 1 = in_Key then if False = oObj.Selected then Application.AddToSelection(oObj) end if elseif 2 = in_Key then Application.ToggleSelection(oObj) end if end sub
'実際にSynopticSelect
を利用してオブジェクトを選択する。
sub head(in_obj,in_mousebutton,in_keymodifier) SynopticSelect in_obj, "HEAD_RIG", in_mousebutton, in_keymodifier end sub
選択中のmodelルートにある「カスタムパラメーター」をポップアップさせる。
GetValue
で選択中のオブジェクトの「model」ノードのプロパティを取得。
名称が抽出できるので、そのあとにカスタムパラメーターの名称を付けて終わり。
InspectObj
関数で、取得してきたmodel名称
Set oObj = GetValue( "SelectionList" )(0).Model InspectObj oObj &".DisplayInfo_IKFK"
ただし、どこかのオブジェクト選択しておかないといけないです。
正直コレ以上のモノはしんどいからコレでがんばります・・
まず頭を自動で選択した後プロパティを出し、そのあと選択解除という流れで実装完了としました。
ゆっくりシェイプとデフォーマーエンベロープブレンドしてってね!
Rigとシェイプの併用で細かい表情の調整ができる。
ただしこんな感じでシノプティックビューが無いとフェイシャルをNULLで操作とか
やりたくなるなるのを前回分かった。
今回は遊び心満開なインターフェイスにしてみました。
ひとつ躓いた事があったので防備録。
予約語で
set o = oModel.FindChild(s)
という文章作ってたのですが、後半で
口パクの「お」で
sub O(in_obj,in_mousebutton,in_keymodifier) SynopticSelect in_obj, "O", in_mousebutton, in_keymodifier
にしていたので、引っかかってコマンドが動かなかった。
IRCでメンバーに見つけて頂いたので何とか原因も究明できて動きました。
仲間って素晴らしい!
スクリプトやプラグインを呼び出す
アニメーションコピーツールを呼び出せるように工夫しました。
コチラ、一度設定するとシーンルートに付いてくれる上に
呼び出すたびに新規カスタムパラメーターが取り出されたり
ウィンドウをロックしてくれない問題がありました。
少し呼び出すときに工夫を仕込む。
キャラクターのモデルルートにある「AniCopyPasteTool
」をsiLookモードで起動。
SynopticSelect in_obj, "Head_Rig", in_mousebutton, in_keymodifier Set oObjs = GetValue( "SelectionList" )(0).Model InspectObj oObjs &".AniCopyPasteTool" ,,,siLock DeselectAll
カスタムパラメーターって「SelectObj
」で何故選択できないのか謎なので
また小手先技。このツール呼び出すと選択全て解除される問題が付きまといますが
まあいいでしょうよ・・
XSI徒然日記さんより
アニメーション反転コピーツール
添付ファイル:

