Blenderで1体のモデルを操作するのは簡単なんですが、まとめて複数のモデルを制御したいとなると、ちょっと面倒です。
スクリプト書くほどではなくて、一つの何かを操作すると連動して他の何かが動く的な機構があればよいので探してみた所、ドライバという機能があることがわかりました。
というわけで、ちょっとドライバいじってみました的な記事になります。
シンプルに立方体に骨を入れる
コピーして3つにする。
ドライバを追加する
-
右のインスタンスをポーズモードにして一番上の骨を選択します。3Dビュー右側のトランスフォームで、回転のところを修正します。「クォータニオン(WXYZ)」となっているところを「XYZオイラー角」に変更してください。
ドライバを設定する
-
インスタンスのアーマチュア部分を3つとも選択します。(右のアウトライナーから選択したほうが楽です) その後、グラフエディター画面に変更します。
-
表示された画面下部の、「Fカーブ」となっているところを、「ドライバー」に変更します。グラフエディター画面のプロバティが開いていない場合は、[N]キーか画面右上の[+]ボタンをクリックしてください。
-
さて、それでは連動させるための設定を行っていきます。今は「アーマチュア」の「ドライバ」の「Xオイラー角回転」というパラメータが指定されています。まず、プロバティ部分を下にスクロールします。
-
「ドライバー」の「タイプ」の下の「値」となっている部分(0が入っている部分)を変更します。「変数を追加」というボタンの下に、「var」という文字があります。この文字が変数になります。0となっている「値」の0を消して、「var」と入力します。これで「アーマチュア」の「ドライバ」の「Xオイラー角回転」に今まで固定値の0という値が登録されていましたが、変数の値が入るようになります。
-
次にvarという変数に入る値を設定します。(※少しプロバティが狭かったので少し広げました。)赤くなっているオブジェクトをクリックすると、リストが出てきますのでcontrolを選択します。またその下の空っぽの枠をクリックするとリストが出てきますのでboneを選択します。その下のタイプと空間には、X回転、ローカル空間と指定してください。これで、varの値は、controlというオブジェクトのboneのローカル空間のX回転パラメータにすることができました。
-
以下同じ用に、Yオイラー角回転はY回転に、Zオイラー角回転はZ回転にそれぞれ設定します。アーマチュア.001及びアーマチュア.002についても同様に、0->var、controlの設定をします。
3Dビュー空間で動きを試す
-
boneを回転させてみます。controlのboneを回転させると、下の3つに設定されたドライバがそれぞれの骨の回転パラメータを変更します。それにつられて、立方体も動くという動作になります。controlの動きに連動していれば設定完了です。
この記事を見ている人が疑問に思いそうなQ&A
Q.なぜパラメータを設定する時にクォータニオンからXYZオイラー角に変更したのか。またドライバでローカル座標に設定したのはなぜか。
A.クォータニオンで連動させるための選択肢がなかったので、あらかじめオイラー角に変更した。ドライバでローカル座標にした理由は、ワールド座標にしてX回転パラメータを連動させようとすると、なぜかcontrol側が0の時でも相手側(インスタンス側)に90度という値が入ってしまい、見た目が変わってしまうため。ローカル座標にするとそのような挙動はなかったので、とりあえずよしとしている。
まとめ
スクリプトが使えると、100個のインスタンスについて100回ループまわして全部のパラメータを変更して…とかやってしまいそうですが、ドライバを使うと1つのパラメータ変更で連動させることができるので、使いどころが多そうな機能ですね。
Blender Advent Calendar 2014、明日はmoongearsさんです!