[2.8]Driver Expression こと始め
Driverとは?
Driverとは、「現在のフレーム数」や「他オブジェクトの値」をアニメーション情報としてオブジェクトに反映させるための手段です。コンストレインツよりも柔軟な定義が可能です。
例: オブジェクト Cube の X座標の値を オブジェクト TorusのY軸の回転の値として用いる
Driverの追加は、項目上で右クリック> Add Driver で。ショートカットキーは[Ctrl]+[D]です。
Driver追加したらDriverエディタが表示されます。ここで色々と設定していくわけですね。
「なるほどわからん」という方は "Driver expression blender 2.8"でググって役に立ちそうなページや動画を参照ください。
Driver Expressionとは?
よく知らないので以下の記事とか適当に読んでおいてください。
Tips: ’#’+特別な変数 を直接入力
例えば #frame とかを直接入力してみるとドライバーの変数として自動的に設定されるんですね。ほんの少しだけ設定を時短できます。
素晴らしい。
お題: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.上記の式を Expression: に入力するかペーストします。このパネルが途中で閉じた場合には、元の項目を右クリック>Edit Driver で再表示させることができます。
4.入力し終えたら[Update Dependices]をクリックして更新します。
動作の確認はアニメーション再生で。
(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 をクリックして、関数を登録するところからやってみてください。
どのような関数を使えるかを知るコード:
ネームスペース見に行けばいいので、多分こう。
for x in bpy.app.driver_namespace:
if ! x.startswith('__'):
print(x)
See Also:
「コマ数で変化」のためにドライバー使っている例をいくつか。
お読みいただきありがとうございます。サポートいただいた分はおやつのグレードアップに使おうかと思います。スキ、SNSにシェアもよろしくお願いします!