Driver Python

Driver と Python というのは そもそも初心者の人は たぶん必要ないし 説明を聞いても すぐには必要ないと

思う人が殆どでしょう この機能に興味をや疑問を持ち始めた人は人 少し慣れてきている人で その上で 何それ?

どう使うのっつうか どこにあんの? という非常に分かりにくい存在です その存在の分かりにくさから

多くの人が 第一歩を踏み出す事すら出来ない チョーマニアック機能です

ドライバーを使う場所

場所といっても どういった場合に使うのかという事ではなく 何処に使えるのかです

下図を見てください 紫色になっている所にはドライバーが入っています

そして 黄色の四角が入っている場所 この白いグレーの背景の数字の所にはドライバーをセットする事が出来ます

数字の所で右クリックしてポップアップメニューの「ドライバーを追加」を選ぶと紫になります

厳密に言うとドライバーを追加するとメニューが出るのでそこで正しい入力をする必要があります

ドライバーメニューからマウスカーソルが外れると直ぐにメニューが消えるので もう一度 ポップアップメニューから

「ドライバーを編集」を選びます このメニューに正しい入力が行われるまで エラーが出てドライバーは動きませんし

最初の内は ひたすらこのメニューを開いたり閉じたりすることになるでしょう

ドライバーの例

それぞれ上図のドライバーの場所に下図のような数式を入れて アニメーション再生してみましょう

左は「frame * 0.01」です アニメーションすると モデルが徐々に上昇するはずです

右は「frame / 250.0」です アニメーションすると 面が徐々にメタリックになります

 ※この式は最終フレームが250になっている想定です Cycles レンダリングしないと結果の見た目の確認はしにくいです

frame値

frameはドライバーの式に使える変数です 値の中身は現在のフレーム数です 再生させて5フレーム目になってる時の

frame値は5です 上図のように使えます

スクリプトの式とは

スクリプトの式は基本的にpythonの書式で書きます ただし 1行しか書けないので

条件式は if ぐらいしか使えませんし if の書き順は pythonとは異なります なのでpythonを見本に作られた入力欄です

繰り返しになりますが この入力欄の「式」は1行で完結する必要があるので 複雑な事をしたい場合は

pythonで 関数を自作してそれを呼び出すという手順が必要です このことをきっぱりと書いている人は

ネット上に殆どいません

if文の書き方

式の基本形  [A] if [B] else[C]

条件[B]が合格ならば[A]の値が 不合格なら[C]の値が使われる

「例」0 if noise.random() < 0.015 else var+0.1

A = 0 「合格の値」

B = noise.random() < 0.015  条件

C = var+0.1 「不合格の値」

if文のキーワードとなる「if」「else」の前後以外にもスペースが存在してもいいので 区切り位置が

分かりにくいですが その辺りのルールが pythonです (単純な事しかできないくせに分かりにくいだけですが)

※ちなみに上の式をトランスフォームのZ値に入れれば 徐々に上昇して たまに座標0に位置がリセットされます

noise.random() とは

乱数値を返す関数です 0.0~1.0までの小数値が入っています(プログラム的に言うと関数の戻り値)

この命令はblenderで用意されているライブラリのもので 他にもかなりありますが メチャクチャありすぎるので ここでの説明は割愛します

書式は python っぽい感じになってます

Python を始める

パイソンを始めようとして多くのサイトで「PYTHON INTERACTIVE CONSOLE」の事が書かれていますが

このメニューで出来る事は モデリング作業のようにその場で1回1回実行するタイプのものだと思います

「PYTHON INTERACTIVE CONSOLE」の入り口は下図の所からです

 (注意)ドライバー連携する場合はたぶん ここでは作業しません


pythonのマニュアル

https://docs.blender.org/api/current/index.html

ドライバー連携する場合のPythonの準備

pythonの関数を作りたい場合 まず最初にpy ファイルを作ります

下図のように エクスプローラで *.blendファイルのあるフォルダを開きます


「右クリックメニュー」→「新規作成」→「テキストドキュメント」と選択し

ファイル名を 例)Human.py とします(blendファイルの名前と同じでいいと思います ひとまずファイルの中身は空のままで)

pyファイルを開く

上図で作ったpyファイルをブレンダーから開きます 下図の所からテキストエディターというエディターを開き

メニューから「テキスト」→「開く」を選択

ファイルオープンダイアログが開くので先ほど作った Human.py を開きます

このエディター名前はテキストエディターですが機能的にはpythonエディターです

スクリプトの登録実行

最初にスクリプトの登録を行います これをやっておくとblendファイルオープン時にpyファイルが

実行されます やり方は下図のようにメニュー「テキスト」→「登録」にチェックを入れるだけです

※スクリプトを作るのが完成したら これをやっておかないと毎回実行しないといけないのと

 ドライバーも全部一個ずつ開いて更新していかないといけないので とんでもなく面倒なことになります

スクリプトの編集中は問題の切り分けの為「登録」にチェックが無い方がいいと思います

編集したスクリプトを実行するのは 下図の「再生ボタン」をクリックすると実行できます

おそらく関数内の行を編集した場合の更新の役割もあると思います

スクリプトの編集(まばたきをさせるサンプル)

ーーーーーーーーーーーーーーーーーーーーーーーーーimport bpy
def Fblink(val,max,val2,add):    if val <= max/2:        return val2+add    elif val < max:        return val2-add    else:        return 0
bpy.app.driver_namespace['Fblink'] = Fblinkーーーーーーーーーーーーーーーーーーーーーーーーー

とにかくサンプルを上げておきます 先ほど開いたpyファイルに書き込むだけです

def が関数宣言です 当然ですが細かい書式は pythonに準拠します

こんな簡単なスクリプトでも関数を作って呼び出さないと ドライバーの標準機能だけでは実現できません

bpy.app.driver_namespace」という命令がドライバーから呼び出せる関数を登録できるものです

登録したのは「Fblink」という名前の関数です

ドライバーから関数を呼び出す①(まばたきをさせるサンプル)

シーンに何でもいいですがオブジェクトを配置します 下図では「blinkCounter」という名前の「十字のエンプティ」です

これは変数の役割をさせる為です トランスフォームのZ座標にドライバーを追加します

「スクリプトの式」には こう書かれています

0 if noise.random() < 0.015 else var+0.001

この計算でエンプティは常にZ方向への上昇を続けますが ランダムで座標0に戻ります

これは まばたきの開始タイミングを作っています

ドライバーから関数を呼び出す(まばたきをさせるサンプル)

まばたきをさせたいアーマチュア(armature)の上まぶたのボーン(h\/eyelid.001.L※図は左目)にのX回転に

ドライバーを追加します 回転タイプはXYZオイラー角にしておきます

先ほど作った 「blinkCounter」の「ローカル空間」「Z位置」=varとし

armatureh\/eyelid.001.L」「ローカル空間」「X回転」=var2としておきます

で 最初に作った関数 Fblink()  を 式「Fblink(var,0.004,var2,0.34)」として呼び出します

基本この状態でアニメーション再生させるとまばたきが行われます

※もしうまくいかなければ python式にエラーが出ていないか テキストエディターの式にエラーがないか

 再生ボタンを押していないかなど確認してください

スクリプトはこれくらいの複雑さになるとモデリングなどと違い アルファベットに1文字

対称になる軸やタイプをチョット間違うだけで 全く動かなくなるので細心の注意が必要です