広告

2016年10月1日土曜日

Mac上でBlenderをPythonモジュールとしてビルド

ネットでBlenderがPythonモジュールとしてビルドできることを知った。短いスクリプトならBlenderを直接起動して試せばいいが、プラグインなどを作る場合はそれなりの開発環境があった方がよさそうだ。と、いうことで、試しにMac上でビルドしてみることにした。(WindowsだとPythonがCygwinを正式にサポートしてないとか、色々面倒そうなのでパスw)

必要なファイル


Blenderのソース)
tarボールのソースを使った方が良さそうなので、以下のサイトからblender-2.77a.tar.gzをDL。

http://download.blender.org/source/

CMake)
homebrewを入れる程ではなさそうなので、以下のサイトからパッケージを導入。

https://cmake.org/download/

CMakeアプリを起動してToolsメニューから”How to Install For Command Line Use”を選ぶと、コマンドのインストール方法が表示されるので、適当なものを選んでコマンドを入れておく。

Python 3.5)
Blender 2.77aはPython 3.5.1を使ってるので、合わせるために3.5.1のパッケージを以下のサイトからDL。

https://www.python.org/downloads/

ビルド


自分が使ってるMacは

  • OS: El Capitan (10.11.6)
  • Xcode: 7.3.1

両方ともまだしばらくは更新しないと思うw 新しい環境は何かしらトラブルがあるので、落ち着くまで待つつもり。それはともかく、以下のサイトを参考にしながらBlenderをビルドしてみる。

https://wiki.blender.org/index.php/Dev:Doc/Building_Blender/Mac

まず、作業用に適当なフォルダを作り、その下にblender-2.77a.tar.gzを展開。blender-2.77aというフォルダができる。同じ階層に'lib'というフォルダを作る。ここからはターミナルを使ってコマンドをパシパシ入れていく。

cd lib
svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/
darwin-9.x.universal

これでビルドに必要なライブラリーは揃った。まずは普通にビルドできるか試してみる。libの上に戻って、

mkdir build_darwin
cd build_darwin
cmake ../blender-2.77a

'ccmake .'を実行するとコンフィグ画面が出てくる。コンパイル出来るか確認するだけなので、CyclesとかをOffにしてやってみた。
設定が終わったら’c'と'g'を押し、'make'してみる。ちゃんとビルドできてBlenderアプリが作られた。動くかどうかは確認しないw

次は本題である、BlenderをPythonモジュールとしてビルドすることに。正式なサポートではないらしいので、ビルドできて使えるかどうかこの時点ではわからない。ネットで調べてもMac上でやってる人は見つけられなかった。

blender-2.77aやlibと同じ階層に、こんどは'build-pymodule'というディレクトリーを作り、そこに移動。また'cmake ../blender-2.77a'をやる。そしてやはり'ccmake .'を実行。これでPythonモジュールの設定もできることが分かった。最後のページにあるのだが、ページ送りのやり方が分からないので、ひたすら下向きカーソルキーを押し続けるw 該当する項目でリターンキーを押すと設定が変更できる。以下のようにした。


WITH_PYTHON_MODULEをONにする。このときWITH_PYTHON_INSTALLはOFFにしておく必要がある。で、'c'キーを押してコンフィグしてみるとエラーが出る。他の項目のON/OFFと関係しているのかと思って色々試したが、結局WITH_PYTHON_MODULEをONにすると必ずエラーになるようだ。やっぱりダメか、と思ったが、一応エラーが出た箇所を調べて見る。blender-2.77a/source/creator/CMakeLists.txtでset_target_propertiesのパラメータが一致しない、みたいなメッセージが出ていた。ファイルをみてみると、ここがダメらしい。

if(APPLE)
 set_target_properties(
  blender
  PROPERTIES
   MACOSX_BUNDLE 
   LINK_FLAGS_RELEASE "${PLATFORM_LINKFLAGS}"
   LINK_FLAGS_DEBUG "${PLATFORM_LINKFLAGS_DEBUG}"
)

cmakeはよく知らないのだが、MACOSX_BUNDLEに値をセットする必要があるように見える。調べて見るとTRUEとかのブール値を入れればよさそうなことが分かった。試しにTRUEを入れ、'c'キーを押してみると...ビンゴ!今度はエラーが出なかった。'g'キーを押してshellに戻り'make'してみると、コンパイルが無事終了(結構時間がかかる)し、binの下に'bpy.so'ができている!一応'make install'してみると、2.77というディレクトリーが作られ、その下にアドオンなどのBlenderを動かすのに必要なファイルが作られた。

Pythonから使ってみる


まずはファイルを移動してみる。Pythonのパッケージをインストールすると、"/Library/Frameworks/Python.framework/Version/3.5"の下にPython関連のファイルが置かれる。さらにこの下の"lib/python3.5/site-packages"にbpy.soと2.77ディレクトリーをコピーし、python3を起動、'import bpy'をすると、bpy.typesモジュールが見つからないとかエラーが出てくる。どうやらbpy.soが必要なファイルを見つけられないようだ。ここでしばらく悩む。出来ればソースを調べるのは避けたいので、何か試せるものはないか考える。そこで思いついたのがMac OSアプリのファイル構成。bpy.soもアプリと同じ設定のままなのではないか?それでは、ということで、'site-packages'と同じ階層に'Resources'フォルダーを作り、そこに2.77フォルダーを入れてみた。再度ビンゴ!今度はエラーもなくbpyをインポートできた。これってもしかしてファイルの相対位置さえ守ればどこにでもおけるんじゃないの?ってことでビルドしたディレクトリーで試してみた。つまりbinと同じ階層にResourcesフォルダーを作り、そこに2.77を入れる。やってみると動く!これでファイルはどこにおいても使えることが分かった。これができるのはMac版だけかも。下の画面はPythonで試してる様子。Blenderを起動すると出てくる'Cube'も入っているw



簡単なことを試した限りでは使えそうだ。ただ、ちょっと問題も。Pythonを抜けるときにメモリーが解放できなかったというメッセージがでる。こんな感じで。
Error: Not freed memory blocks: 8, total unfreed memory 0.008392 MB

微々たるものだが、もっと使い込むと解放されないメモリーは増えるかもしれない。でもまあ使えるだけでもよしとしよう。とりあえず、これでEclipseとPyDevを使った開発環境が構築できるかもしれない。

この記事を書いている間にBlender 2.88がリリースされた。同じようにできるかはまだ分からない。

0 件のコメント:

コメントを投稿