はじめに
オープンソースの3DCGソフトBlenderにはPythonのAPIが用意されていて、オブジェクトを作成したりアニメーションのキーフレームを打ったりすることができます。
ガッツリ開発する場合、VSCodeで編集するのが主流のようですが、はじめましてのAPIとはJupyter Notebookがないと仲良くなれない体になってしまったので、どうにかJupyter NotebookからBlenderのAPIを触れないものかと調べてみることにしました。
結果、Jupyter Notebook上でBlenderのAPIをいじくることができる、blender_notebookなるものを見つけたので実装までの流れを紹介します。
操作によって動作がもっさりすることがありますが、開発前や練習時など、ちょっと試してみる場合には便利です。
何度かAvastがざわざわしましたが無視しました。
1. BlenderのPythonバージョンの確認
今回一番重要な点は、Jupyter Notebookを実行する環境のPythonバージョンとインストールされているBlenderのPythonバージョンが一致している必要があることです。
インストールされているBlenderのPythonバージョンの確認
Blenderをインストールしていない場合はインストールしてください。
Blender3.1.2のpythonバージョンは3.10.2でした。
※Blender2.82のpythonバージョンは3.7.4でした。
2. Anacondaで仮想環境を作成
Anacondaで仮想環境を作成しました。
Anacondaをインストールしていない場合はAnacondaをインストールしてください。
https://www.anaconda.com/products/distribution
Anacondaをインストール済みでも、古いバージョンの場合、新しいPythonに対応していない場合があるのでアップデートしてください。エラーが出てからでも大丈夫だと思います。
早速仮想環境を作成します。
conda create -n 好きな名前 python=上記で確認したBlenderのPythonバージョン
自分の環境の場合、BlenderのPythonバージョンは3.10.2だったので、Pythonバージョン3.10のblenderという名前の仮想環境を作成します。
conda create -n blender python=3.10
※BlenderのPythonバージョンが3.7.4だった場合、こうなります。
conda create -n blender python=3.7
途中で下記のような表示が出たらyを入力してエンターを押してください。
Proceed ([y]/n)?
3. blender_notebookをインストール
作成した仮想環境をアクティベート
まず、作成した仮想環境をアクティベートします。
activate 仮想環境の名前
今回は、blenderという名前の仮想環境を作成したので、
activate blender
と入力します。
下記のように文頭に作成した仮想環境の名前(今回の場合blender)が表示されれば成功です。
(blender) C:\Users\Owner>
blender_notebookを仮想環境にインストール
pip install blender_notebook
(blender) C:\Users\Owner>pip install blender_notebook
Successfully installed なんちゃらとお馴染みの表示が出たらインストール完了です。
BlenderのKernelを作成
Jupyter Notebook用のカーネルを作成します。
blender_notebook install --blender-exec="Blenderインストール先の起動ファイルのパス"
自分の環境の場合、WindowsでBlenderのバージョンが3.1(※BlenderのPythonのバージョンではなくBlenderのバージョン)なので、
blender_notebook install --blender-exec="C:\Program Files\Blender Foundation\Blender 3.1\blender.exe"
(blender) C:\Users\Owner>blender_notebook install --blender-exec="C:\Program Files\Blender Foundation\Blender 3.1\blender.exe"
となります。
Blenderのバージョンが異なる場合や、インストール先を変更している場合は変更が必要です。
※Blenderのバージョンが2.82だった場合、こうなります。
blender_notebook install --blender-exec="C:\Program Files\Blender Foundation\Blender 2.82\blender.exe"
Current python interpreter version is not 3.7!
blender_notebook will link pip packages installed in this interpreter to the
blender embedded python interpreter. Mismatch in python version might cause
problem launching the jupyter kernel. Are you sure to continue?
[y/N]:
何か聞かれますがPythonのバージョンは確認済みなので、yを入力してエンターで大丈夫です。
下記のような表示が出たら成功です。
done
♯
♯ To activate this environment, use
♯
♯ $ conda activate blender
♯
♯ To deactivate an active environment, use
♯
♯ $ conda deactivate
Macでは試していませんが、
/Applications/Blender.app/Contents/MacOS/Blender
らしいので、
blender_notebook install --blender-exec="/Applications/Blender.app/Contents/MacOS/Blender"
だと思います。
間違っていたらごめんなさい。
Kernelが作成されたか確認
念のためKernelが追加されているか確認します。
jupyter kernelspec list
(blender) C:\Users\Owner>jupyter kernelspec list
と入力すると、blenderが追加されているのがわかります。
Available kernels:
blender C:\Users\Owner\AppData\Roaming\jupyter\kernels\blender
python3 C:\Users\Owner\anaconda3\envs\blender\share\jupyter\kernels\python3
4. 起動!!
jupyter notebookと入力してJupyter Notebookを起動します。
jupyter notebook
(blender) C:\Users\Owner>jupyter notebook
右上のNEWからblenderを選択すると新規ノートブックが作成されてBlenderが起動します。
折角なので何か実行してみます。
Suzanneはあまり好きではないので、 試しに球体を生成してみます。
Jupyter Notebookのセルに
import bpy
bpy.ops.mesh.primitive_ico_sphere_add(location=(0, 0, 0), radius=5, subdivisions=10)
と入力してJupyter Notebookの▶Runをクリックします。
追記: 球体の生成は若干時間がかかるので、立方体を生成したほうが感動出来るかもしれません。
import bpy
bpy.ops.mesh.primitive_cube_add(size=10, location=(0, 0, 0))
でけた!!
余談
BlenderのUndo(元に戻す)とRedo(やり直す)を実行するコードを、ノートブックのセルに置いておくと存分に遊べます。
追記: このコードで元に戻すとJupyter Notebookで操作し始めたところまで戻ってしまうので、別の方法を探す必要がありそうです。
bpy.ops.ed.undo()
bpy.ops.ed.redo()
これでBlenderのAPIと仲良くなれそうですね。
ただ、冒頭での述べましたが操作により動作がもっさりすることがあるので、やはりVSCodeを使用したほうがいいのかもしれません。
おしまい。
うまくいかない場合
Jupyter Notebookの右上にkernel errorと表示されたり、Blenderが起動してもJupyter Notebookのロードが永遠に続いて、コマンドプロンプトに
ImportError: cannot import name '_device' from 'zmq.backend.cython'
のような表示が出た場合は失敗です。
仮想環境のPythonバージョンとBlenderのPythonバージョンが一致していない可能性が高いです。
失敗してうまくいかなかった場合は
blender_notebook remove
と入力して
Are you sure to delete C:\Users\Owner\AppData\Roaming\jupyter\kernels\blender ? [y/N]:
yを入力してからエンターでカーネルを削除してやり直しましょう。
それでもダメな場合は仮想環境も削除して最初からやり直してみましょう。
仮想環境を削除するには、
conda deactivate
と入力して文頭のblenderの表示が消えたことを確認。
conda remove -n blender --all
と入力して削除します。
参考