Python で Blender を動かすには?はじめの一歩 for Mac【第 1 回 Python × Blender】

PythonBlender を動かして、3DCG の数学的な図形を作ったりアニメーションしたい…



と思い始めいろいろ調べていく中で、まず PythonBlender を動かすには一手間必要だということが分かりました。



今回はまず、どのように PythonBlender を動かすのか?その手順について細かく説明していきたいと思います。



僕の使っているパソコンが Mac なので、 Windows など他の OS における手順ではありませんので、そこはご了承ください🐟

Blender のインストール

まず Blender の公式ダウンロードサイト

https://www.blender.org/download/

Mac 用の Blender のインストールを行いましょう。



こんな感じのファイルがダウンロードできたら…
f:id:tamaki_py:20190525115418p:plain
こいつをダブルクリックして開きます。



するとこんなウィンドウが開きます。
f:id:tamaki_py:20190525130254p:plain
左にあるのが Blender ファイル、右にあるのがアプリケーション(Applications)フォルダです。



右にあるアプリケーションフォルダはショートカットになっておりダブルクリックすると開きます。
f:id:tamaki_py:20190525120308p:plain
そのまま左にある Blender ファイルを、右にあるアプリケーション(Applications)フォルダにドラッグ & ドロップできれば、Blender のインストールは完了です🐟


ターミナルで Blender を起動

PythonBlender を動かすために重要なのは、ターミナルで Blender を起動する必要がある、ということです。

 

なぜかは後回しにして、先ずはターミナルで Blender を起動する手順についてお伝えします。

 

Launchpad 等からターミナルのアイコンをダブルクリックして、ターミナルを起動します。
f:id:tamaki_py:20190525121952p:plain



するとこんな画面が出現します。
f:id:tamaki_py:20190525131411p:plain


そこで次のコマンドを入力します。

cd /Applications/blender/blender.app/Contents/MacOS

こんな風に。
f:id:tamaki_py:20190525134914p:plain


入力できたら、Enter キーを押してください。
f:id:tamaki_py:20190525135616p:plain
するとカレントディレクトリが MacOS になっていることが分かります。



ここで以下のコマンドを打ち込んで Enter キーを押すと、ターミナルから Blender を起動することができます。

./blender

f:id:tamaki_py:20190525140443p:plain



こんな感じに Blender が立ち上がります。
f:id:tamaki_py:20190525140935p:plain
めでたし、めでたし。



ターミナルは以下のようになっているはずです。
f:id:tamaki_py:20190525141407p:plain
ここで左上の × ボタンで一度 Blender を終了しましょう。


PATH を通す

いちいち Blender を起動する際にターミナルで上記のコマンドを入力するのは面倒なので、PATH を通しましょう。



まず確認することがあるのでターミナルをもう一度開き、以下の二つのコマンドを打ち込みます。

cd
ls -la

cdコマンドでカレントディレクトリをホームディレクトリにし、ls -laコマンドでカレントディレクトリ(ホームディレクトリ)の中身を表示します。



するとこんな感じのものが出てきます。
f:id:tamaki_py:20190525154043p:plain
この中に.bash_profileが無い場合、以下のコマンドを打ち込んで.bash_profileを作成しておきましょう。

touch .bash_profile

すでにある場合には作成する必要はありません。



そうしたら次に以下のコマンドを打ち込み、.bash_profileを開きます。

open ~/.bash_profile

すると以下のような画面が開くはずです。ここに以下を書き加えます。

PATH=/Applications/blender/blender.app/Contents/MacOS:$PATH
export PATH

f:id:tamaki_py:20190525161911p:plain
編集後は保存して終了してください。



この後はターミナルをもう一度閉じてまた開くか、または以下のコマンドを打ち込みます。

source ~/.bash_profile

これによって書き加えた内容が反映されます。



するとターミナルにて、

blender

と打ち込むだけで Blender をターミナルから起動することができます。f:id:tamaki_py:20190525163017p:plain
PATH を通したら Blender をターミナルから起動する手間が省けますので是非設定しましょう。


スクリプティングインターフェース(Scripting Interface)

先ほどのようにターミナルで Blender を起動した後、適当な場所をクリックすると以下のような画面が出てきます。
f:id:tamaki_py:20190525163430p:plain
デフォルトでは立方体が一つのみ置かれた状態になっています。



デフォルトの Blender インターフェースは以下のような配置になっています。
f:id:tamaki_py:20190525165847p:plain
Python スクリプトBlender を動かす際にはこのデフォルトのインターフェースは主役では無いので、今回は説明を省きます。



ここで Header Menu → Screen Layout → Scripting を選択します。
f:id:tamaki_py:20190525171005p:plain
すると、以下のようにインターフェースが切り替わります。
f:id:tamaki_py:20190525171055p:plain
このインターフェースが Python スクリプトBlender を動かす際に主役となるスクリプティングインターフェース(Scripting Interface)です。



このスクリプティングインターフェースは、デフォルトのインタフェースにあったものを除くと以下のインターフェースから成ります。
f:id:tamaki_py:20190526110144p:plain
それぞれの機能をざっくり解説しましょう。

  • Command Log(コマンドログ)Blender のインターフェースを用いて作業している際に呼ばれた関数を示します。このウィンドウはスクリプトを実験したり、BlenderPython API について知りたいときに非常に便利です(後に説明します)。
  • Interactive Console(インタラクティヴコンソール):このインターフェースは Python の対話型開発環境の下部に表示されるような Python 3 環境です。Text Editor にある local なデータないしは Text Editor にあるモジュールレベルのデータにはアクセスできないですが、Text Editor とこのインターフェースは bpy に保存された global な Blender のデータやそのサブモジュールにアクセスすることができます。



Command Log の見方について概要を説明します。



例えば 3D Viewport にある立方体を右クリックで選択し、キー "G" を押した後キー "X" を押して立方体を(グローバル座標系における)X 軸方向に移動させ、左クリックで移動先を決定し、立方体を移動させます。
f:id:tamaki_py:20190525183003p:plain
すると 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 では BlenderPython API について実験的に知ることができるので便利です🐟


とりあえず Python スクリプトBlender で動かしてみる

それでは今回の目標「とりあえず PythonBlender を動かす」をやってみましょう。



3D Viewport Header → Add → Meshes → Cube で新たに立方体を追加してみましょう。
f:id:tamaki_py:20190525185916p:plain
すると 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 スクリプトを実行してみましょう。
f:id:tamaki_py:20190525191559p:plain



実行結果は以下のようになります。
f:id:tamaki_py:20190528143404p:plain
とりあえず、プログラムが動くことが確認できました🐟


どうしてターミナルから Blender を起動しなくてはならないのか?

最後になぜ Python スクリプトBlender を動かす際には、ターミナルを用いて Blender を起動しなくてはならないのかについて説明します。



その理由はBlenderPython スクリプトにエラーがあった場合、エラーのログをターミナルに記録するから」です。



例えば以下の、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...

ここでターミナルを見てみると、確かにエラーのログを残してくれています。
f:id:tamaki_py:20190525210240p:plain



しかし Blender をターミナルで起動しなかった場合、エラーのログを見ることができません。



よって、PythonBlender を動かす際には(少し手間がかかりますが)ターミナルで起動するようにしましょう🐟



今日はここまでです。