Blenderのドライバーを完全に理解する

Blenderでは、モデルの座標や回転をプロパティから変更することができますが、複数のオブジェクトを一度に変更することはできません。また、複数のオブジェクトが連動した動きをしてほしい、といったケースもあるでしょう。

そんなときは、ドライバーを設定してみてはいかがでしょうか。Blenderには、スクリプトを書かなくても、オブジェクト間のプロパティを連動させる機能が備わっています。

今回は、このドライバーの使い方を詳しく解説します。

ドライバーとは

ドライバーを使うと、パラメータを他のオブジェクトに結び付けて、値の変更をオブジェクトの動きに連動させることができます。

ドライバーを使うと、こんなことができるようになります。

  • プロパティをオブジェクトの座標とリンクし、ビューポートから値を操作する
  • 複数のオブジェクトを連動させる
  • 自作コントローラーを作成して、リグの動きを扱いやすくする

簡単な例として、キューブのx軸座標とスザンヌの回転量をリンクさせたサンプルがこちらです。こうしたことがドライバーを設定することによって、可能になります。

使い方

それでは、先にあげたサンプルを例に、具体的なドライバーの使い方を解説してきます。

準備

キューブとスザンヌをそれぞれ1つずつ用意します。

ドライバーを追加する

ドライバーを追加するには、プロパティの値欄を右クリックし、ポップアップの中からAdd Driverをクリックします。

この時、Add Driverするのは、ドライバーで操作される側のオブジェクトであるスザンヌです。

サンプルでは、スザンヌのプロパティTransform > Rotation Zにドライバーを設定しています。

参照元を設定する

ドライバーを追加できたら、次はどのオブジェクトを参照するのかをセットします。

先ほどドライバーをセットしたプロパティを右クリックし、Edit Driverを選択します。すると、縦長の編集ポップアップが表示されます。

このポップアップの下部にあるObjectの欄をクリックし、Cubeを選択しましょう。このObjectが、参照先となります。

動作を確認する

ここまでの作業で、キューブとスザンヌをドライバーでつなぐことができました。
キューブをX軸方向に動かし、スザンヌが横回転したら成功です。

このサンプルでは、キューブのワールドX座標が、スザンヌのワールドZ回転角に代入されています。

ドライバー編集画面

それでは、ポップアップの項目を詳しく見ていきます。設定できる項目は大きく分けて3つです。

①Driver Settings

Driver Settingsは、ドライバーの種類を設定します。Typeの欄から、ドライバーの処理タイプを次の5つから選択できます。

タイプ効果
Averaged Value変数の平均を出力する
Sum Values変数の合計を出力する
Scripted Expression数式に従って計算し、出力する
Minimum Value参照する変数のうち、最小の値を出力する
Maximum Value参照する変数のうち、最大の値を出力する

Driver Value: には、現在のドライバーの値が表示されます。

②Expression

①のDriver SettingsでScripted Expressionを選択した場合、ドライバーの処理内容をここに記述することができます。

また、直下にあるUse Selfにチェックを入れると、操作されるオブジェクト自身をselfという単語で表せるようになります。

数式で使える表現

ドライバーで扱える数式表現は以下の通りです。

  • +ー*/:四則演算
  • frame:現在のフレーム番号
    経過時間とリンクしたい場合は、フレーム番号を取得するといいでしょう。
  • %:割った余り
    frame%3のように使うと、1, 2, 3, 0, 1, 2, 3, 0, …と数字をループさせることができます。
  • pi:円周率(Blenderの表示では3.142)
  • sin(var):varの正弦
    sin(frame)で、-1と1の間を行ったり来たりする反復運動になります。
  • max(var,x):varとxを比較した大きい方
  • min(var,x):varとxを比較した小さい方

③Input Variable

数値計算に使う変数の設定がまとめられています。

変数名変数の名前(初期値はvarになっていますが、自由に変更できます)
Object参照するオブジェクト
Type変数として参照するトランスフォームの種類
Spaceオブジェクトを参照する際に基準とする空間
Value変数の現在の値

変数の追加と削除

変数は必要に応じて追加と削除が可能です。
変数情報の上部にあるAdd Input Valuableで変数を追加でき、各変数の右上にある×印で削除できます。

Add Input Variableの横にあるアイコンは、左からコピーとペーストです。
コピーする変数は選択できず、登録されているすべての変数をコピー&ペーストしてしまうことに注意しましょう。

変数のタイプ

ドライバーで変数になるのはトランスフォーム情報だけではありません。
変数名の左のアイコンが変数のタイプを表しており、クリックすると変更できます。

変数のタイプとその効果は以下の通りです。

タイプ効果
Single Propertyデータパスを使って数値を取得する
Transform Channelトランスフォーム情報から数値を取得する
Rotational Differenceオブジェクトを2つ指定し、それらの角度の差を取得する
Distanceオブジェクトを2つ指定し、それらの距離を取得する

参照するトランスフォーム要素を変更する

先ほどのサンプルでは、キューブのX軸移動でスザンヌを制御していました。
今度はキューブの幅によってスザンヌを制御できるように設定してみましょう。

ドライバー編集画面を開き、変数のTypeをX LocationからX Scaleに変更してみてください。

すると、キューブの移動ではスザンヌは回転しなくなりましたが、キューブの幅を変えることでスザンヌが回転するようになりました。

ドライバーをコピーする

同じドライバー設定を複数のオブジェクトで使いまわす場合、毎回セットしなおすのは大変です。そんなときは、ドライバーのコピー&ペーストを活用しましょう。

ドライバーが設定されているパラメータ上で右クリックし、Copy Driverを選ぶとドライバーの設定内容をコピーできます。そして、Paste Driverでコピーしたドライバーの設定内容をペーストすることができます。

Single Propertyの詳しい使い方

変数のタイプの一つとして、Single Propertyを紹介しました。他のタイプに比べて多少ややこしいので、ここで詳しく解説します。

Single Propertyを使うと、あらゆるパラメータをドライバー変数にすることができます。どういうものをドライバー変数に使えるかというと、例えば、ライトの明るさを表すワットやモディファイアのパラメータなどです。

ここでは、ライトの明るさで制御するドライバーを例に説明していきます。

データパスをコピーする

ポイントライトとオブジェクトを用意します。ポイントライトのプロパティのうちLight > Powerを右クリックし、Copy Data Pathを選択してデータパスをコピーします。

変数を設定する

制御用オブジェクトのZ回転にドライバーを追加し、変数varのタイプをSingle Propertyに変更します。

Prop左側のアイコンをクリックし、使用するデータタイプを設定します。
今回はライトを使うのでLightを選択します。

どのライトを使うかは、右側の欄から指定しましょう。

ポイントライトを指定するとデータパスを入力する欄が出現します。Ctrl + Vでコピーしたデータパスをペーストしたら準備完了です。

これで、ライトの明るさとスザンヌの回転角をデータパスで繋ぐことができました。

Single Propertyの設定の仕方を理解するためにデータパスをコピーするやり方を紹介しましたが、ライトのPowerを右クリックしたときのメニューでCopy as New Driverを選択すると、Powerの値を変数にしたドライバーとしてコピーすることができます。

これを、制御用オブジェクトのパラメータにドライバーとしてペーストすれば、すこしだけ手順を省略することができます。

複数のドライバーを一度に編集する

複数のドライバーを比較しながら編集したい場合、ドライバーメニューのOpen Drivers Editorを選択しましょう。すると、ドライバー編集画面の左側にグラフがくっついたウィンドウが開きます。

ドライバーを削除する

作成方法と同じくらい重要なのが、ドライバーの削除方法です。ドライバーの削除にはDelete Single DriverDelete Driversが用意されています。

ドライバーが設定されているパラメータ上で右クリック、Delete Single Driver選択したパラメータのドライバーのみ削除できます。

一方、Delete Driversは、パラメータの属するグループ全体のドライバーを全て削除します。意図せず必要なドライバーまで削除してしまうことがあるので、注意しましょう。

よくあるトラブルと注意点

ドライバーを設定してみたものの、思ったように動かないことがあります。設定ミスや勘違いをしている場合がほとんどなので、以下のトラブルシューティングを参考にしてみてください。

コードの書き方が誤っている

「varの2倍だから2var」…ではありません。プログラミング言語Pythonの文法を使うドライバーでは、一般的な数学とは違った式の書き方をします。

  • 掛け算:var×2ならvar*2
  • 割り算:var÷2ならvar/2
  • べき乗:varの2乗ならvar^2

といった具合です。また、変数のつづり間違いにも注意してください大文字・小文字も含めて同じ名前を書く必要があります。

また、全角は使えません。数値入力は半角を使いましょう。

式が間違っている

例えばこんな式があったとします。

(var * 3/2)*0+1

常に計算結果が1になってしまうことは、簡単にわかることでしょう。このような式を書いてしまうと、varの値がどれだけ変化しても、見た目の動きに全く変化が起きません。こうした初歩的なミスもありがちなので、今一度確認してみてください。

変数の参照先パラメータが正しいか確認する

ドライバー編集画面で、変数名の左側にあるアイコンを確認してみましょう。これは参照するオブジェクトの内、そのオブジェクトが持つどのパラメータを参照するかという設定です。

アイコンが(x)になっていれば、varはTransform情報を参照しています。思った動きにならない場合、ここが連動させたいパラメータになっていないことがあります。

コンストレイントをつけている

なんらかのコンストレイントが制御している項目を、ドライバーを使って制御しようとすると、値の更新がバッティングし、思った動きにならないことがあります。不自然にカクツク場合は、コンストレイントがかかっていないかどうか、チェックしましょう。

「無効なPython式」と表示される

ドライバー編集画面の一番下、Update Dependenciesを押すとドライバーを更新できます。

ドライバーは他のソフトで機能しない

残念ながら、ドライバーはBlenderの内部でしか機能しません。fbxモデルなどに出力しても、ドライバーに設定した内容はモデルデータに付随しません。

まとめ

いかがでしょうか。ドライバーを使うことで、さまざまなプロパティ同士をリンクさせることができます。とくに、複数のオブジェクトを連動して動かすには、ドライバーを使うほか方法が最も手軽です。

また、ビューポートにコントローラーを作成し、視覚的にパラメータを調整することで作業の効率アップにつながることがあります。

もしこの記事を読んで、ドライバーの使い方や便利さがお分かりいただけたのであれば、うれしく思います。Blenderのスキルが上がった!と思える機能の1つなので、ぜひ使ってみてください。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です