スクリーンショット_2019-04-24_20

[2.8]Driver Expression こと始め

Driverとは?

Driverとは、「現在のフレーム数」や「他オブジェクトの値」をアニメーション情報としてオブジェクトに反映させるための手段です。コンストレインツよりも柔軟な定義が可能です。

例: オブジェクト Cube の X座標の値を オブジェクト TorusのY軸の回転の値として用いる

Driverの追加は、項目上で右クリック> Add Driver で。ショートカットキーは[Ctrl]+[D]です。

画像1

Driver追加したらDriverエディタが表示されます。ここで色々と設定していくわけですね。

画像2

「なるほどわからん」という方は "Driver expression blender 2.8"でググって役に立ちそうなページや動画を参照ください。

Driver Expressionとは?

よく知らないので以下の記事とか適当に読んでおいてください。

Tips: ’#’+特別な変数 を直接入力

例えば #frame とかを直接入力してみるとドライバーの変数として自動的に設定されるんですね。ほんの少しだけ設定を時短できます。

スクリーンショット 2020-03-29 19.38.58

スクリーンショット 2020-03-29 19.39.11

スクリーンショット 2020-03-29 19.39.23

スクリーンショット 2020-03-29 19.40.59

素晴らしい。

お題:10コマごとにX座標が+1.0され、100コマ目でx=10.0の位置で止まる

(1).ドライバーとして式を直接記述する

条件式(三項演算子)を使うと上記の条件の式はすぐに書けます(えっ?)。

10 if frame > 100 else floor(frame/10)

1.サイドバーのLocation>X: にドライバーを追加します。右クリック>Add Driver 。

2.開いたエディタパネル上で、ひとまず var と書いてある右側×印をクリックして削除します。

画像3

3.上記の式を Expression: に入力するかペーストします。このパネルが途中で閉じた場合には、元の項目を右クリック>Edit Driver で再表示させることができます。

4.入力し終えたら[Update Dependices]をクリックして更新します。

画像4

動作の確認はアニメーション再生で。

(2).関数定義を使う

Driver Expression を定義した関数と紐付けてみましょう。

1. Expressionに使用する関数として 'mydrifunc' を定義します。今回はインタラクティブコンソールに以下貼り付けて実行してみてください。

def mydrifunc(x):
    if fabs(x) > 100:
        return 10
    else:
        return floor(x/10)

bpy.app.driver_namespace['mydrifunc'] = mydrifunc

2. サイドバーのLocation>X: にドライバーを追加し、Expression: に以下の1行をペーストしてみてください。

mydrifunc(frame)

関数が使えるように登録されていない場合には以下のようなエラーが出ます。Ignore をクリックして、関数を登録するところからやってみてください。

画像5

どのような関数を使えるかを知るコード:

ネームスペース見に行けばいいので、多分こう。

for x in bpy.app.driver_namespace:
    if ! x.startswith('__'):
        print(x)

See Also:

「コマ数で変化」のためにドライバー使っている例をいくつか。


お読みいただきありがとうございます。サポートいただいた分はおやつのグレードアップに使おうかと思います。スキ、SNSにシェアもよろしくお願いします!