5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Blender 2.82 or later + python 開発環境のメモ

Last updated at Posted at 2020-03-24

背景

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 のビルドと動作をいろいろ試す.
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?