背景
Blender + python で開発環境を整えたい.
Blender 内臓のエディタやコンソールは使いづらいので, vscode から使ったりしたい
自前 add-on の開発デバッグや, bpy 関数の振る舞いをお手軽調べたい, など.
環境
- Ubuntu 18.04
- Blender 2.82a or later
基本情報
blender の python を直接叩いても, import bpy
はできないです.
blender を経由して python を動かす必要があります.
コマンドラインから python コンソールを開く
How can I run blender from command line or a python script without opening a GUI?
https://blender.stackexchange.com/questions/1365/how-can-i-run-blender-from-command-line-or-a-python-script-without-opening-a-gui
$ blender --background --python-console
とすれば python コンソール出ます.
VSCode で使う.
このあたりが使えそうです.
Advanced な内容
ありがとうございます.
BlenderのC++アドオンで高速にデータを受け渡す (LuxBlendにおける手法)
https://qiita.com/vipper36/items/3e6012c3c770ade0d412
[Blender] GitHubとTravisCIを用いてBlenderアドオンのテストを自動化する
https://qiita.com/nutti/items/fe3f3f14168155df5916
Blender をビルドする
上記 blender as module や, 何かしら特殊なことをしたいときはソースコードからビルドするのが手っ取り早いでしょう.
ソースコードや, 依存ライブラリの prebuilt binary を落としたのち,
基本 make するだけでビルドできます.
git submodule を忘れずに行いましょう.
そうしないと
file INSTALL cannot find
"/home/mdriftmeyer/DeveloperProjects/Blender-Repository/blender/release/datafiles/locale/languages".
という locale 周りでのエラーがでます.
Blender 自体のビルドは, Ubuntu では prebuilt binary があるので, そんなに時間かかりません.
Threadripper 1950X で 5 分くらいでした.
headless
$ make headless
で, GUI なしビルドができます.
Blender as module
Blender 自体を python module(libbpy.so
)にするビルドがあります.
これにより, 好きな python インタプリタなどで import bpy
できるので, 開発が捗るのが想定されますが, Ubuntu だとハードルが高いです.
prebuilt ではうまくいかない.
ビルドコマンド自体は単純です.
$ make bpy
(内部では cmake を呼んでいるので, その cmake 設定をみてみるとよいでしょう)
まず, bpy.so は shared lib でリンクされますが, prebuilt libs は .a
しかないです. 一応 relocatable のようですが, .a
が依存している system のライブラリも .a とリンクするので(e.g. libpng.a), libpng.a や gomp.a (OpenMP)のリンク時にエラーが出ます.
libpng.a は, apt で入っていると /usr/lib/..
のほうを見に行ってしまうので, いったん apt で消すなりして, prebult libs 側の libpng.a とリンクするようにすれば解決できます.
が, libpng.a は消せないときもあるでしょうから, Docker あたりで bpy.so
をビルドするのが無難かもしれません.
gomp(OpenMP) は環境にもよります. CUDA などの環境を入れていると, gcc 関連で gomp がインストールされる可能性が高く, /usr/lib/...
にある libgomp.a とリンクしようとして build fail することになります.
こちらは, gomp を消すと gcc コンパイラのパッケージも消さねばならず難しいです.
やはり Docker でビルドがいいかもしれません.
また, WITH_MEM_JEMALLOC
を off にしてビルドしないと,
cannot allocate memory in static TLS block
というエラーが import 時に出ます.
CMake 設定を見ると, Linux のときは一応 OFF になっているはずなのですが, なぜか反映されません.
依存ライブラリをソースからビルドするのは...
$ make deps
で, 依存ライブラリをソースからビルドすることができます.
bashrc などで,
alias make=`make -j8`
などとして並列ビルドするようにしているとコンパイルに失敗するので, make になにも alias が設定されていないことを確認してから make deps
するのがいいかもですが, ただしそれだと 1 コアでしかビルドしてくれないので, ビルドに時間かかってしまいます. コンパイル何度かこけるのを見越して, 並列ビルドさせるのも手かもです.
依存ライブラリを一からビルドだと, yasm(なぜアセンブラが必要?! と思ったら video codec 系で使っている) やら, システムの boost とかちあったり, LLVM を一からビルドとかでめんどいです.
少なくとも OpenVDB はなぜか boost 周りでうまくビルドできませんでした. VDB 使わないならとりあえず off でビルドするのも手でしょうか.
add-on のインストール
無事に bpy.so
ができて, import でクラッシュしなくなったとしても, 今度は io_xxx
などが無いとエラーがでます. これらは add_on になりますので, add_on を入れれば解決するはずです(add_on 関連は別 git repo で管理されている)
TODO
- Blender as module のビルドと動作をいろいろ試す.