====== Blender ======
* [[https://docs.blender.org/api/master/|Blender Python API 公式]]
* [[http://tips.hecomi.com/entry/20120818/1345307205| Blender 2.63 での Python の使い方についてまとめてみた - 凹みTips]]
* [[https://qiita.com/ashitani/items/8cc0aad3688111b5669f| blenderをpythonのモジュールとして使う]]
* [[http://nonishi-rckt.hatenablog.com/entry/2015/09/22/013624|Blender でモーショングラフィックス(忙しい人向け) - 恣意的思逸記]]
* [[https://wiki3.jp/blugjp|BlenderのWiki]]
===== インストール =====
==== Ubuntu 18.04の場合 ====
Ubuntu18.04では最初から''apt install blender''でインストールが可能.
インストールされるバージョンは2019年5月現在は2.79である.
==== Ubuntu 16.04の場合 ====
Inria大学のThomas Schiexさんが管理している[[https://launchpad.net/~thomas-schiex/+archive/ubuntu/blender|ppa]]からインストールするのが良さそう.
sudo add-apt-repository ppa:thomas-schiex/blender
sudo apt update
sudo apt install blender
===== 設定 =====
=== Python tooltips ===
Python開発の必要な設定を行う.
''bpy.context.preferences.view.show_tooltips_python = True''
===== アドオン =====
アドオンとはサードパーティが作成するプラグインのようなものである.
アドオンでインストールするファイル自体は
''~/.config/blender/2.79/scripts/addons''に入る.
==== 日本語化 ====
日本語化をするには設定を変更する必要がある.
設定は設定ファイルとして特定の場所に保存されている.
初めて環境設定をしたときに''~/.config/blender/$(version)/config/''に''userpref.blend''が出来る.
=== 設定系ファイルの一覧 ===
^ 設定ファイルディレクトリ ''~/.config/blender/$(version)/config/'' の中身 ^^^
| ブックマーク | ''bookmarks.txt'' | ファイルを開くとき等に表示される Bookmarks と Recent のフォルダ名が書かれている |
| 最近のファイル | ''recent-files.txt'' | File - Open Recent に表示される最近使ったファイルが書かれている |
| テンプレート | ''startup.blend'' | File - New で新規ファイルを作成したときに利用されるテンプレートファイル |
| 設定 | ''userpref.blend'' | File - User Preferences での設定が書かれている |
=== 日本語化 ===
Blender2.8にて,
旧) ''Blender > Preferences > Interface > Translation > Language''
新) ''Edit > Preferences > Interface > Translation'' をチェックしないと日本語文字が表示されない.
=== 言語設定のトグル切り替え ===
日本語話者で海外のチュートリアルなど参照して勉強している場合は,
日本語で操作したい場面と英語で操作したい場面があると思う.
トグル設定をしておくと''Pause''キーで一発切り替えできるようになる.
設定にはサードパーティのアドオン(プラグイン)が必要.
以下のようにダウンロードしてアドオンのディレクトリに置く.
wget https://blender.jp/modules/newbb/download.php?url=/1_ToggleTranslatedUI-111.zip.1368622219000 -O ToggleTranslatedUI.py.zip
unzip ToggleTranslatedUI.py.zip
==== アドオン開発 ====
===== Python API =====
BlenderにはPythonで操作するためのAPIである''bpy''パッケージがある.
bpyは''/usr/share/blender/scripts/modules/bpy''にある
実行されているPython自体のバイナリがどこにあるのか ''sys.executable'' で調べられるのだが,
BlenderのPythonコンソールでこれを調べると,''/usr/lib/blender/blender''というバイナリファイルのようだ(pythonという名前では無いっぽい).
ちなみに普通のpythonでこれを調べると ''/home/horiuchi/.pyenv/versions/anaconda3-2018.12/bin/python'' みたいな感じで出てくる.
^ Blender Python API 基本事項 ^^
| 実行されているPython自体 | ''/usr/lib/blender/blender'' |
| bpyパッケージのディレクトリ | ''/usr/share/blender//scripts/modules/bpy'' |
ちなみにパッケージ検索パス一覧(弊実行環境での例)
/usr/share/blender/2.80/scripts/addons_contrib
/home/horiuchi/.config/blender/2.80/scripts/addons
/usr/share/blender/2.80/scripts/addons
/usr/share/blender/2.80/scripts/startup
/usr/share/blender/2.80/scripts/modules
/usr/lib/python37.zip
/usr/lib/python3.7
/usr/lib/python3.7/lib-dynload
/home/horiuchi/.local/lib/python3.7/site-packages
/usr/lib/python3/dist-packages
/usr/share/blender/2.80/scripts/freestyle/modules
/usr/share/blender/2.80/scripts/addons/modules
/home/horiuchi/.config/blender/2.80/scripts/addons/modules
^ bpyの使用方法 ^^
| Blender GUI | 外部ライブラリの制限(乗っ取りで解決可能) |
| Blender CUI | 外部ライブラリの制限(乗っ取りで解決可能) |
| Pythonから呼び出し | contextへアクセスできない |
Blenderの全機能を利用しPythonでフルコントロールするならBlender CUIを利用するのが良さそう.
==== Python操作でBlender環境外のライブラリなどを使う ====
ライブラリの検索パスを動的に変更してしまえばnumpyなどが使えるようになる.
=== GUIのBlender,CUIのBlenderで外部パッケージを使う ===
blenderが使用しているpythonのパッケージを見えないようにして,
anacondaのsite-packageを検索対象として追加してしまえば良い.
import sys
# システムのpythonはnumpyが動かないので消す
sys.path.remove('/usr/lib/python3/dist-packages')
# anacondaの環境のパッケージを追加する
sys.path.append('/home/$(USER)/.pyenv/versions/anaconda3-2018.12/envs/$(ENVNAME)/lib/python3.6/site-packages')
=== pythonからbpyパッケージを呼び出す ===
それ専用にコンパイルして作ったバイナリが必要.
面倒くさいのでpythonコードを生成してsubprocess.callでCUIのblenderを呼び出したほうが楽かも.
==== API利用の基本 ====
難しいので ''dir(hoge)'' などで中のattributeを確認するのが良い.
^ いくつかの基本アクセス ^^
| ops | 操作(選択中のものへの?) |
| data | データオブジェクトへのアクセス?基本的にこれを使って操作していくのが推奨?Blender自体もデータ? |
| types | この名前空間以下に型が定義されている? |
| context | 選択中のものに対する処理.Blender CUIではないpythonからは使えない(?) |
=== ops (bpy.ops) ===
operatorsの略.処理のまとまりがOperatorクラスで作られていて,
たとえばアドオンなどではOperatorクラスを継承したクラスを作成してシステムにそのOperatorを登録して使えるようにする.
ユーザーはそのOperatorを呼び出すことで処理が行われる.
Operatorsクラスのexecuteメソッドが呼ばれる.引数はcontext.
下の名前空間にジャンル分けしている.基本的に戻り値は成功か否かというだけ.
=== data (bpy.data / D) ===
blend データへのアクセス.
なるべくこれだけで処理できるとmodelessになって嬉しい.
=== context (bpy.context / C) ===
現在選択中のものなどからアクセスしていく.
モーダルなので自動化ではあまり使いたくはない.
=== types (bpy.types) ===
Blenderに存在するあらゆるものはここに記述された何らかのクラスのインスタンスである.
==== 実例 ====
=== 環境設定を自動的にやってみる ===
import bpy
# 言語の変更設定をONに
bpy.context.preferences.view.use_international_fonts = True
# 使用言語を日本語に
bpy.context.preferences.view.language = 'ja_JP'
# インターフェース,新規作成ファイル名,ツールヒントを翻訳対象に
bpy.context.preferences.view.use_translate_interface = True
bpy.context.preferences.view.use_translate_new_dataname = True
bpy.context.preferences.view.use_translate_tooltips = True
# 設定を保存
bpy.ops.wm.save_userpref()
===== 使い方 =====
==== CLI ====
* pythonスクリプトファイルで使う場合\\ ''blender --background --python hogehoge.py''
* python対話でやる場合\\ ''blender --python-console''
==== GUI ====
独特
モード
=== 見方変更 ===
* ''ミドルクリック ドラッグ'' で注視点を中心に回転
* ''shift'' ''ミドルクリック ドラッグ'' で平行移動
* ''ctrl'' ''ミドルクリック 上下ドラッグ'' または ''スクロール'' で拡大縮小
=== オブジェクトの移動/回転/拡縮 (オブジェクト選択状態で) ===
* G : 移動
* R : 回転
* S : 拡縮
=== オブジェクトの作成削除 ===
* 作成: オブジェクトモードで Add -> Mesh -> Cube
* 削除: X