チュートリアル / もしもMotionBuilderでプリビズをしたら
第13回:デバイスを使いこなそう
- MotionBuilder
- アニメーション
- コラム
- チュートリアル
- 上級者
- 中級者
- 映画・TV
先月は番外編としてVES SUMMIT 2012のお話をしました。日本のCG業界は厳しいと言われていますが、ハリウッドも同様の厳しさを抱えており、世界的にも厳しい状況と言えるでしょう。ですが嘆いていてもしょうがありません。ピンチの中にこそ大きなチャンスはあるもの。そのチャンスをものにするためにも日々の精進が大事ですね。
では、前回に続き、デバイス活用のお話を進めていきましょう。
マウスでの制御を調整してみましょう
前回、マウスを使ってCubeを動かす事ができるようにしてみました。
動かしてみると、なんだか動きに不自然さを感じませんか?Cubeを選択し、ResoucesのPropertiesで移動量をチェックしてみましょう。おわかりでしょう。そうなんです、Mouseデバイスから入力されるデータ量はX軸、Y軸ともに0〜100なのです。ディスプレイの左下を原点とするXY軸平面内の移動に制限され、両軸とも原点よりマイナス方向には動かすことができません。これでは思うようには動けませんね。
そこで、ディスプレイ中心を原点とし、その原点を中心にしたXY軸平面内移動に調整するにはどうすればいいか考えてみましょう。簡単に考えると、入力される数値から50を引けばいいですね。Relationのセッティング画面の数値データ対応関数一覧(Number)をみると、Subtract(a-b)という引算関数がありますのでこれを使いましょう。
Subtract(a-b) を、XとYそれぞれで使うように2つドラッグ&ドロップします。下図のように、MouseとNumber to Vectorとのコネクションを一度切り、MouseのX、YをSubtractのa入力に接続します。b入力で右クリックすると「Set value」を選択できますので、それを選び「-50」と入力します。二つのResultをNumber to VectorのXとZへ接続すれば完成です。
原点を中心に-50から50の範囲でCubeを動かすことができるようになりました。
このように、Relationには四則演算を始め、様々な関数が用意されており組み合わせて利用する事ができるようになっています。これを使えば、移動範囲を拡大縮小することはもちろん、様々な制御を実現する事ができるようになります。いろいろ試してみて下さい。
複数のデバイスを使ってみよう
マウスから出力されるデータは、X軸とY軸の2次元情報なので、3次元空間に存在するCubeを自由自在に動かすにはちょっと都合がよくありません。
ではどうしましょう。新規に導入する事なく、気軽に使える何か他に良い入力デバイスはないでしょうか?
ありました。「 Keyboard」です。
Asset BrowserのDevicesの中のKeyboardをViewerへドラッグ&ドロップし、Keyboardデバイスをシーンへインストールします。NavigatorのFiltersの中のDevicesに追加されたKeyboardをRelationへドラッグ&ドロップしてみましょう。キーボード上の多くのキー入力を使えることが確認できます。
ここで注意点として、キーボードのキーはMotionBuilderのショートカットとして使用されているものがいくつかあります。何も考えないで使ってしまうと、ショートカットと合わさって問題を引き起してしまいます。キーボードをデバイスとして使用する際には使用するキーがショートカットで使用されていないか注意して使用するようにしましょう。
では、今回は、PAGEUPとPAGEDOWNを使ってマウスの入力を移動と回転に切り替える機能をつくってみましょう。
マウス入力部分はできているので、出力されるマウスの移動ベクトル量をCubeのTranslationとRotationに切り替えて入力できるようにすればいいですね。そのために使う関数を今度はVectorの中で探します。ありました、「IF Cond Than A Else B」です。これは、ある条件Cond入力があった際にはa入力ベクトルをResult出力、そうでない場合にはb入力ベクトルをResult出力するという関数です。
IF Cond Than A Else BをTranslationとRotation用に2つドラッグ&ドロップします。下図のようにマウスのVector出力を両方のa入力に接続し、PAGEDOWNキー入力をRotation側のIF Cond Than A Else BのCond入力へ、PAGEUPキー入力をTranslation側のIF Cond Than A Else BのCond入力へ接続します。そして双方のResult出力をそれぞれRotation入力とTranslation入力へ接続します。
いかがでしょう。PAGEUPキーを押しながらマウスを移動させるとCubeがXZ平面を移動し、PAGEDOWNキーを押しながらマウス移動をさせるとCubeが原点位置で回転するようになったと思います。
このように複数のデバイスを組み合わせる事で複雑な制御も可能となるのです。
あ、みなさん、「マウスで移動させた位置で回転できないのかな〜」とかお思いですね?
そこは応用です。いろいろな関数を組み合わせて試してみて下さい。アイディア次第でいろいろな制御ができるようになりますよ。
次回は、外部デバイスの代表格であるゲームコントローラを使用する方法を紹介していきたいと思います。お楽しみに。
さて、今回が2012年最後のコラムになります。
今年はフリーになって1年目でしたが、多くの方々のサポートを頂いてお仕事させて頂きました。この1年程、人との繋がりの重要さを感じた年はありませんでした。このコラムを通じて情報発信させて頂けたことも、その繋がりの一環です。この場を借りまして、御礼申し上げます。ありがとうございました。また来年も様々な情報を発信させて頂きますので、よろしくお願い致します。
では、みなさん、良いお年をお迎えください!