CGBoxの一部の記事にはアフィリエイト広告が含まれております。
【Blender2.9】Pythonスクリプト超入門!
こんにちは!
皆さんはプログラミングを行ったことがあるでしょうか?
Blenderでは「Python」という言語を使って、作業を自動化したり、オリジナルのUIを作ったりすることが出来ます。
今回は、スクリプト超入門として、Pythonスクリプトの簡単な使い方を紹介します!
BlenderとPython
BlenderにはPythonのスクリプトエンジンが内臓されており、Pythonで使えるAPIが公開されています。
難しいことはさておき、つまりはBlenderをPythonスクリプトを使って操作できるということです!
さらに、Blenderで行える作業はすべてPythonで記述できます。
また、BlenderのUIもすべてPythonで記述されています。
そのため、Pythonスクリプトを使って自分だけのBlenderを作ることが可能です!
Pythonとは
さて、先ほどから何度も登場する「Python」について皆さんご存知でしょうか?
有名なプログラミング言語で、同じくプログラミング言語であるC言語などに比べて非常に簡潔でわかりやすいコードを記述することが可能です。
そのため、初心者向けのプログラミング言語としても多く用いられています。
また、MAYAやHoudiniなどの有名3DCGソフトウェアもスクリプト言語としてPythonを採用しています。
ですので、3DCGの道を志す方は習得しておいて損のない言語です!
スクリプトを書く環境を作ろう
それでは、Blenderでスクリプトを記述する準備を行います!
スクリプトでよく使うパネルは以下の3つです。
- テキストエディタ
- Pythonコンソール
- 情報
わたしは、これらと普段使用するパネルを合わせて以下のようなビューでスクリプティングを行います。
ビューの分割については以下の記事を参考にして下さい!
Blenderで実行されているコマンドを確認しよう
では、BlenderでどのようにPythonスクリプトが実行されているのかを見てみましょう。
Blenderの〔情報〕パネルには、Blender内で行われた操作がPythonスクリプトの形で次々と記述されていきます。
これは〔立方体を追加〕〔立方体をスケーリング〕〔立方体を削除〕という操作を3Dビューで行った時に〔情報〕パネルに表示されるスクリプトです。
これらは、以下のような操作を行うコマンドです。
このように、Blenderで実際に操作を行うことで、逆引き的にコマンドを調べることが可能です。
しかし、〔情報〕パネルのみからでは得られない情報も多いです。
そのため、スクリプトを記述する際には、Webや書籍などでコマンド名と用途を調べる必要があります。
英語に抵抗のない方は公式のリファレンスもありますので、参考にしてみてください。
Pythonコンソールからスクリプト実行しよう
それでは、先ほど調べたコマンドを今度はスクリプトから実行してみましょう。
まずは、〔Pythonコンソール〕パネルから実行してみます。
ここでは、1行のスクリプトを実行することができ、動作の確認に適しています。
先ほど確認した立方体を追加するコマンドをPythonコンソールにコピー&ペーストし、エンターキーを押します。
すると、{‘FINISHED’}と表示され、3Dビューに立方体が表示されました!
オートコンプリートの使い方
Pythonコンソールには〔オートコンプリート〕という便利な機能があります。
Pythonコンソールに「bpy.」と打ち込んだ状態で、〔コンソール〕→〔オートコンプリート〕を押すと、以下のように使えるコマンドが一覧で表示されます。
テキストエディタからスクリプトを実行しよう
それでは、テキストエディタにスクリプトを記述して、Blenderを制御してみましょう!
スクリプトの追加
テキストエディタの〔+新規〕ボタンをクリックすると、〔Text〕という名前のスクリプトが作成されます。
名前を適切なものに変更しましょう!
今回はtest.pyという名前に変更しました。(.pyはPythonスクリプトを記述したファイルの拡張子です。)
また、テキストエディタでは複数のテキストファイルを保持することが出来ます。
以下にテキストエディタに表示されているボタンの用途をまとめてみました!
スクリプト例:選択オブジェクトに一連の処理を行う
それでは、実際にスクリプトを記述していきましょう。
test.pyの内容を以下のように記述しました。
import bpy
import mathutils# 選択しているオブジェクトを取得
obj = bpy.context.object# オブジェクトの座標を取得
loc = obj.location# 現在座標からx方向に2だけ動かす
obj.location = loc + mathutils.Vector(( 2, 0, 0 ))# オブジェクトのスケール値を変更する
obj.scale = ( 1, 2, 1 )# オブジェクトに再分割曲面モディファイアを適用
bpy.ops.object.modifier_add(type=’SUBSURF’)
〔#〕から始まる文章はコメントといい、その行の内容はスクリプトに影響しません。
また、〔import〕から始まる文について、例えば二行目ではbpyから始まるコマンドをそのスクリプト内で仕様可能にする宣言です。
これを忘れるとプログラムがエラーになってしまいます。
スクリプトエディタに記述して、実行ボタンを押しましょう!
移動拡大、さらにモディファイアの適用が適切に行われたでしょうか?
このようにして、何度も行う操作をボタン一つで可能にすることが出来ます。
スクリプト例:数式を使ってアニメーションを行う
次に、数式とキーフレームアニメーションを使って、円を動くように移動するアニメーションを作成するスクリプトを作ります!
新しいファイル〔test2.py〕を作成し、以下のようなスクリプトを記述しました。
import bpy
import math# 選択したオブジェクトを取得
obj = bpy.context.object# 最初の位置をフレーム数を指定
start_pos = (0,0,0)
frame = 0# 10回処理を繰り返す
for i in range(10) :
# シーンのフレームを変更
bpy.context.scene.frame_set(frame)
# オブジェクトを移動
obj.location = (math.cos(i), 0, math.sin(i))
# オブジェクトの位置にキーフレームを打つ
obj.keyframe_insert(data_path = “location”,index = -1)# フレームを進める
frame += 10
ここでは、〔for〕ループを用いています。
Pythonでのループ処理についてはこちらの記事などを参照して下さい!
また、オブジェクトを移動させる行では、x座標にコサイン、y座標にサインを使用することで、二次元平面上で円運動を再現しています!
ここの数式を自由に変更して、いろいろな処理を試してみて下さい。
また、これらのスクリプトも読み解くと手作業で行っていた一連の流れを自動化しただけであることがわかります。
ただし、機械的な動きやランダムな動きを作りたい場合はスクリプトからキーフレームをうち込んだ方便利です。
システムコンソールからエラー文を確認
スクリプトを記述していくと、必ずエラーに遭遇します。
テキストエディタ上に上のようなポップアップが表示されますが、これでは何がどうエラーなのかさっぱりわかりません。
そこで、Blenderの〔ウィンドウ〕から〔システムコンソール切り替え〕を選択します。
すると、このようなウィンドウが表示されます。
しかし、日本語環境では私のように文字化けしている方も多いのではないでしょうか・・
その場合は、一度Blenderを閉じ、メモ帳に以下の文章を入力し、〔Blender_start.bat〕など.batで終わる名前で保存します。
chcp 65001
cd C:\Program Files\Blender Foundation\Blender 2.93
blender
二行目は、ご自分の環境でBlenderの実行ファイルがあるフォルダを指定してください!
すると、このようなアイコンで保存され、これを開くとBlenderが起動するはずです。
ここから起動したBlenderで再度.blendファイルを開き、システムコンソールを表示すると、正しく日本語が表示されるはずです。
(ただし、文字化けしていた文章はわりとどうでもいい文章であることが多いです・・・)
スクリプトの自動実行
今回はスクリプトを実行ボタンを押すことで実行しましたが、ファイルを開いたときに自動で実行するように設定することも可能です。
まずは、設定からスクリプトの自動実行を有効にします。
プリファレンスウィンドウから、上のチェックボックスを有効にします。
次に、テキストエディタから〔テキスト〕→〔登録〕を選択します。
これで、Blenderファイルを開くたびにスクリプトが自動で実行されるようになりました。
今回は紹介していませんが、オリジナルのUIを作成するスクリプトなどで特に有効です。
まとめ
今回は、BlenderとPythonスクリプトを使って、操作を自動化する方法などについてまとめました!
スクリプトを使用することで面倒な作業を簡易化でき、作業の効率化につながります。
しかし、情報が少なく、またある程度プログラムに関する知識が求められるのも事実です。
最初は何度もエラーに遭遇するかと思いますが、Blender使いとしてランクアップするために是非トライしてみて下さい!