ブログ

BLOG

Jupyterからblenderのpythonを使う方法

2020年4月8日
Jupyterからblenderのpythonを使う方法

こんにちはyuです。

blenderのpythonのインタープリタ環境ってなんだか使いづらいですよね。下のような画面で操作します。

変更がリアルタイムに見えるのは良いですが、どうせならJupyter notebook上で走らせられると便利ですよね。notebookに慣れていると、試行錯誤するのにインタプリタは少し使いづらく感じてしまいます。

そこでいろいろ調べたところ、下記の方法を見つけました。

  • blenderをソースからコンパイルし、通常仕様のPythonからimportできるようにする。
  • バイナリのblenderについているPythonをJupyter notebookのKernelに設定する。

今回は後者の方法をご紹介します。

ちなみに使用した環境はUbuntu18です。

Blenderのバイナリをインストール

こちらからバイナリをダウンロードします。

tar -xf  blender-2.82a-linux64.tar.xz -C $HOME

今回はhomeディレクトリに置きました。

中身はこうなっています。

blender-2.82a-linux64
├── 2.82
│   ├── datafiles
│   │   ├── colormanagement
│   │   ├── fonts
│   │   ├── icons
│   │   ├── locale
│   │   ├── studiolights
│   │   └── usd
│   ├── python
│   │   ├── bin <-- Pythonのbinaryが入っている
│   │   ├── etc
│   │   ├── include
│   │   ├── lib
│   │   └── share
│   └── scripts
│       ├── addons
│       ├── freestyle
│       ├── modules
│       ├── presets
│       ├── startup
│       ├── templates_osl
│       └── templates_py
├── GPL-license.txt
├── GPL3-license.txt
├── LICENSE-bfont.ttf.txt
├── LICENSE-bmonofont-i18n.ttf.txt
├── LICENSE-droidsans.ttf.txt
├── Python-license.txt
├── blender  <--Blenderの実行ファイル
├── blender-softwaregl
├── blender-symbolic.svg
├── blender-thumbnailer.py
├── blender.desktop
├── blender.svg
├── copyright.txt
├── jemalloc-license.txt
├── lib
│   ├── libGL.so -> libGL.so.1.5.0
│   ├── libGL.so.1 -> libGL.so.1.5.0
│   ├── libGL.so.1.5.0
│   ├── libGLU.so -> libGLU.so.1.3.1
│   ├── libGLU.so.1 -> libGLU.so.1.3.1
│   ├── libGLU.so.1.3.1
│   ├── libglapi.so -> libglapi.so.0.0.0
│   ├── libglapi.so.0 -> libglapi.so.0.0.0
│   └── libglapi.so.0.0.0
└── ocio-license.txt

色々なファイルが入っていますが、今回は直下の実行ファイルblenderと、blender内で使われるpythonが入っているディレクトリ2.82/python/binにだけ注目していただければ大丈夫です。

ディレクトリの中にはpython3.7mが入っています。

試しにディレクトリに入ってPythonを起動してみましょう。

cd ~/blender-2.82a-linux64/2.82/python/bin/
./python3.7m


ふつうのPythonですね。

Jupyterをインストール

こちらは普段使用するPython(上記のblender側のPythonではない)で設定します。
おそらくすでにインストールされていると思いますが、なければ下記でインストールしてください。

pip install jupyter

IPython for Blenderをインストール

下記で適当な場所にインストールします

git clone https://github.com/panzi/blender_ipython

この中にblender_ipython.pyなるものがあるのですが、このスクリプトのパスをメモします。

blenderコマンドでBlender起動できるように設定

IPython for Blenderのblender_ipython_wrapper.pyに下記のような記載があります。

ここでBlenderをバックグラウンドで実行しているのですが、blenderを起動コマンドにしているため、aliasコマンドでエイリアスを作るなり、 ln -sコマンドでシンボリックリンクを作るなりしてください。

あるいは上記コードにBlenderのインストールディレクトリを追記しても大丈夫です。

Jupyterのカーネルを設定

先程ダウンロードしたblenderのpythonを、Jupyter上で使えるようPythonに設定します。

まずどこにカーネルが格納されているかを調べましょう。jupyter-kernelspec listで現在有効なカーネルと、そのフルパスが見れます。私の場合は

Available kernels:
 python3    /home/yu/.pyenv/versions/anaconda3-5.2.0/share/jupyter/kernels/python3

でした。なので、 /home/yu/.pyenv/versions/anaconda3-5.2.0/share/jupyter/kernels/に新しくblenderというディレクトリを作り、その中にkernel.jsonという名前で下記のjsonファイルを作ります

{
 "argv": ["{path to blender_ipython}/blender_ipython/blender_ipython.py", "kernel",
          "-f", "{connection_file}"],
 "display_name": "Blender env",
 "language": "python"
}

{path to blender_ipython}はIPython for blenderをダウンロードしたパスを入力してください。それ以外はそのままで大丈夫です。

終わったら確認のため、jupyter-kernelspec listでカーネルが認識されているか確認してみましょう

Available kernels:
  blender    /home/yu/.pyenv/versions/anaconda3-5.2.0/share/jupyter/kernels/blender
  python3    /home/yu/.pyenv/versions/anaconda3-5.2.0/share/jupyter/kernels/python3

表示されていたら、次に進みます。

Jupyterを起動!

ここまでで必要な準備ができたので、最後に確認してみます。いつもどおりjuypter notebookで起動します。

Newのプルダウンメニューを開くと、Blender envが追加されています。

これを指定して新しいノートブックを開きましょう。

せっかくなのでレンダリングして表示することをしてみましょう。下記のコードを入力して実行します。

import bpy
import PIL.Image as I
scene = bpy.context.scene
scene.render.filepath = '/tmp/test'
bpy.ops.render.render(write_still=True)
img = I.open(scene.render.filepath + '.png')
img

下記のようにキューブが表示されたら成功です!

まとめ

BlenderをJupyterで起動する方法を紹介しました。
ただ色々不満点がありますね

  • 既存のblenderファイルを読み込ませた上でつかいたい
  • Blender上のPythonインタプリタのようにインタラクティブ使いたい

と思います。なので次回はその方法についてご紹介します。