Python で Blender を動かすには?はじめの一歩 for Mac【第 1 回 Python × Blender】
Python で Blender を動かして、3DCG の数学的な図形を作ったりアニメーションしたい…
と思い始めいろいろ調べていく中で、まず Python で Blender を動かすには一手間必要だということが分かりました。
今回はまず、どのように Python で Blender を動かすのか?その手順について細かく説明していきたいと思います。
僕の使っているパソコンが Mac なので、 Windows など他の OS における手順ではありませんので、そこはご了承ください🐟
- Blender のインストール
- ターミナルで Blender を起動
- スクリプティングインターフェース(Scripting Interface)
- とりあえず Python スクリプトを Blender で動かしてみる
- どうしてターミナルから Blender を起動しなくてはならないのか?
Blender のインストール
https://www.blender.org/download/
で Mac 用の Blender のインストールを行いましょう。
こんな感じのファイルがダウンロードできたら…
こいつをダブルクリックして開きます。
するとこんなウィンドウが開きます。
左にあるのが Blender ファイル、右にあるのがアプリケーション(Applications)フォルダです。
右にあるアプリケーションフォルダはショートカットになっておりダブルクリックすると開きます。
そのまま左にある Blender ファイルを、右にあるアプリケーション(Applications)フォルダにドラッグ & ドロップできれば、Blender のインストールは完了です🐟
ターミナルで Blender を起動
Python で Blender を動かすために重要なのは、ターミナルで Blender を起動する必要がある、ということです。
なぜかは後回しにして、先ずはターミナルで Blender を起動する手順についてお伝えします。
Launchpad 等からターミナルのアイコンをダブルクリックして、ターミナルを起動します。
するとこんな画面が出現します。
そこで次のコマンドを入力します。
cd /Applications/blender/blender.app/Contents/MacOS
こんな風に。
入力できたら、Enter キーを押してください。
するとカレントディレクトリが MacOS になっていることが分かります。
ここで以下のコマンドを打ち込んで Enter キーを押すと、ターミナルから Blender を起動することができます。
./blender
こんな感じに Blender が立ち上がります。
めでたし、めでたし。
ターミナルは以下のようになっているはずです。
ここで左上の × ボタンで一度 Blender を終了しましょう。
PATH を通す
いちいち Blender を起動する際にターミナルで上記のコマンドを入力するのは面倒なので、PATH を通しましょう。
まず確認することがあるのでターミナルをもう一度開き、以下の二つのコマンドを打ち込みます。
cd ls -la
cd
コマンドでカレントディレクトリをホームディレクトリにし、ls -la
コマンドでカレントディレクトリ(ホームディレクトリ)の中身を表示します。
するとこんな感じのものが出てきます。
この中に.bash_profile
が無い場合、以下のコマンドを打ち込んで.bash_profile
を作成しておきましょう。
touch .bash_profile
すでにある場合には作成する必要はありません。
そうしたら次に以下のコマンドを打ち込み、.bash_profile
を開きます。
open ~/.bash_profile
すると以下のような画面が開くはずです。ここに以下を書き加えます。
PATH=/Applications/blender/blender.app/Contents/MacOS:$PATH export PATH
編集後は保存して終了してください。
この後はターミナルをもう一度閉じてまた開くか、または以下のコマンドを打ち込みます。
source ~/.bash_profile
これによって書き加えた内容が反映されます。
するとターミナルにて、
blender
と打ち込むだけで Blender をターミナルから起動することができます。
PATH を通したら Blender をターミナルから起動する手間が省けますので是非設定しましょう。
スクリプティングインターフェース(Scripting Interface)
先ほどのようにターミナルで Blender を起動した後、適当な場所をクリックすると以下のような画面が出てきます。
デフォルトでは立方体が一つのみ置かれた状態になっています。
デフォルトの Blender インターフェースは以下のような配置になっています。
Python スクリプトで Blender を動かす際にはこのデフォルトのインターフェースは主役では無いので、今回は説明を省きます。
ここで Header Menu → Screen Layout → Scripting を選択します。
すると、以下のようにインターフェースが切り替わります。
このインターフェースが Python スクリプトで Blender を動かす際に主役となるスクリプティングインターフェース(Scripting Interface)です。
このスクリプティングインターフェースは、デフォルトのインタフェースにあったものを除くと以下のインターフェースから成ります。
それぞれの機能をざっくり解説しましょう。
- Text Editor(テキストエディター):ここで Python スクリプトを書いたり実行できます。New で新しい Python スクリプトを作成することができます。Open で既にある Python スクリプトを開くことができます。
- Command Log(コマンドログ):Blender のインターフェースを用いて作業している際に呼ばれた関数を示します。このウィンドウはスクリプトを実験したり、Blender の Python API について知りたいときに非常に便利です(後に説明します)。
- Interactive Console(インタラクティヴコンソール):このインターフェースは Python の対話型開発環境の下部に表示されるような Python 3 環境です。Text Editor にある local なデータないしは Text Editor にあるモジュールレベルのデータにはアクセスできないですが、Text Editor とこのインターフェースは bpy に保存された global な Blender のデータやそのサブモジュールにアクセスすることができます。
Command Log の見方について概要を説明します。
例えば 3D Viewport にある立方体を右クリックで選択し、キー "G" を押した後キー "X" を押して立方体を(グローバル座標系における)X 軸方向に移動させ、左クリックで移動先を決定し、立方体を移動させます。
すると Command Log には以下のようなログが示されます。
bpy.ops.transform.translate(value=(6.82726, 0, 0), constraint_axis=(True, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1)
ここからわかることは、この作業によってtranslate()
というbpy.ops
サブモジュールのtransform
クラスの関数を呼び出したということが分かります。この関数のパラメーターも作業によって異なってくるので、この関数のパラメーターが何をインプットにしているのかも推察することが可能です。
このようにして Command Log では Blender の Python API について実験的に知ることができるので便利です🐟
とりあえず Python スクリプトを Blender で動かしてみる
それでは今回の目標「とりあえず Python で Blender を動かす」をやってみましょう。
3D Viewport Header → Add → Meshes → Cube で新たに立方体を追加してみましょう。
すると Command Log には以下のようなログが表示されるはずです。
bpy.ops.mesh.primitive_cube_add(radius=1, view_align=False, enter_editmode=False, location=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))
このログから推察できることは、bpy.ops
サブモジュールのmesh
クラスのprimitive_cube_add()
という関数によって、立方体が追加できると推察できます。さらに、radius(半径)
は立方体の大きさ、location(位置)
は立方体の位置、それ以外の変数はデフォルトのままで良いと推察できます。
そこでこの関数をfor
文で繰り返して、立方体をたくさん置く実験をしてみることにします。キー "A" を押し 3D Viewport にあるオブジェクトを全て選択して、次にキー "X" を押し delete を選択して、オブジェクトを全て削除しましょう。
次に、Text Editor → New から新たな Python スクリプトを作成し、以下のような Python スクリプトを Text Editor に入力してみましょう。
import bpy for i in range(5): x = -2 + i for j in range(5): y = -2 + j for k in range(5): z = -2 + k bpy.ops.mesh.primitive_cube_add(radius=0.25, location=(x,y,z))
入力できたら Text Editor → Run Script で スクリプトを実行してみましょう。
実行結果は以下のようになります。
とりあえず、プログラムが動くことが確認できました🐟
どうしてターミナルから Blender を起動しなくてはならないのか?
最後になぜ Python スクリプトで Blender を動かす際には、ターミナルを用いて Blender を起動しなくてはならないのかについて説明します。
その理由は「Blender の Python スクリプトにエラーがあった場合、エラーのログをターミナルに記録するから」です。
例えば以下の、i = 2 にて 0 による割り算のエラーがある以下のプログラムをターミナルで起動した Blender で動かしてみましょう。
import bpy for i in range(5): x = -2 + i bpy.ops.mesh.primitive_cube_add(radius=0.5, location=(x,0,1/x))
するとBlender の Command Log に以下のようなメッセージが表示されます。
Python script fail, look in the console for now...
ここでターミナルを見てみると、確かにエラーのログを残してくれています。
しかし Blender をターミナルで起動しなかった場合、エラーのログを見ることができません。
よって、Python で Blender を動かす際には(少し手間がかかりますが)ターミナルで起動するようにしましょう🐟
今日はここまでです。