MRが楽しい

MRやVRについて学習したことを書き残す

Blender 2.8のPython APIドキュメントを少しずつ読み解く Python APIの概要 その1

本日は Blender2.8 の調査枠です。
今回から Blender 2.8 の Python API ドキュメントを少しずつ読みつつ試していきます。

Blender 2.8 Python API Documentation

以下のページを日本語訳しつつ実際に試して記事を進めていきます。
docs.blender.org
docs.blender.org

今日は「Python APIの概要」のアドオンまでです。
f:id:bluebirdofoz:20190920184811j:plain

Python APIの概要

このドキュメントの目的は、PythonBlenderがどのように連携するかを説明することです。
不明な機能がある場合は、APIリファレンスとサンプルスクリプトを参照してください。

BlenderでのPython

BlenderにはPythonインタープリターが組み込まれています。
これはBlenderの起動時に読み込まれ、Blenderの実行中もアクティブなままです。
このインタープリターはスクリプトを実行してUIを描画し、Blenderの内部ツールのいくつかにも使用されます。

Blenderの組み込みインタープリターはPython環境を提供します。
このため、Pythonスクリプトの基本的なチュートリアルコードはBlenderインタープリターで実行できます。
Blenderは bpy や mathutils などのPythonモジュールを提供します。
これらのPythonモジュールをスクリプトでインポートすると、Blenderのデータやクラス、関数にアクセスできます。
Blenderデータを扱うスクリプトは、動作するモジュールをインポートする必要があります。

簡単な例を以下に示します。"Cube"という名前のオブジェクトの頂点を移動します。

import bpy
bpy.data.objects["Cube"].data.vertices[0].co.x += 1.0

これにより、Blenderの内部データが直接変更されます。
インタラクティブコンソールでこれを実行すると、[3Dビュー]の表示が更新されます。
f:id:bluebirdofoz:20190920185126j:plain

デフォルト環境

独自のスクリプトを開発する場合、BlenderPython環境をどのように設定するかの理解が役立ちます。
Blenderの多くのPythonスクリプトBlenderにバンドルされており、スクリプト作成者が利用するものと同じAPIを使用しています。
このため、リファレンスとして使用できます。
スクリプトの一般的な使用法には以下の例が挙げられます。
ユーザーインターフェイス
・インポート/エクスポート
・シーン操作
・自動化
・独自のツールセットの定義とカスタマイズ

Blenderは起動時に scripts/startup ディレクトリ配下のPythonモジュールを探してインポートします。
このディレクトリの正確な場所は、インストール環境によって異なります。
ディレクトリレイアウトのドキュメントを参照して下さい。
Blender’s Directory Layout
 https://docs.blender.org/manual/en/dev/advanced/blender_directory_layout.html#blender-directory-layout

例:Windowsの場合
 LOCAL: .\2.81\
 USER:  %USERPROFILE%\AppData\Roaming\Blender Foundation\Blender\2.81\
 SYSTEM:%USERPROFILE%\AppData\Roaming\Blender Foundation\Blender\2.81\
スクリプトの読み込み

スクリプトを直接実行することとスクリプトをモジュールとしてインポートすることの違いに注意して下さい。

スクリプトを直接実行してBlenderを拡張することは、スクリプトの実行が終了した後も、スクリプトが定義したクラスがBlender内で利用可能なままであることを意味します。
この方法でスクリプトを使用すると、スクリプトをモジュールとしてインポートする場合と比較して、クラスへの将来のアクセス(クラスの登録解除など)が難しくなります。

このため、クラスを登録することでBlenderを拡張するスクリプトを直接実行することは避けることが望ましいです。

Blenderで直接スクリプトを実行する方法をいくつか紹介します。

テキストエディタにコードを読み込み、[スクリプトの実行]をクリックします。
インタラクティブコンソールにコードを入力または貼り付けます。
Blenderを使用して、コマンドラインからPythonファイルを実行します。例を以下に示します。

blender --python /home/me/my_script.py

f:id:bluebirdofoz:20190920185611j:plain

次にモジュールとして実行する方法を紹介します。

・テキストウィンドウまたは対話型コンソールから import some_module コマンドを利用する。
スクリプトを scripts/startup のいずれかのディレクトリにコピーすると、起動時に自動的にインポートされます。
・アドオンとして定義し、アドオンを有効にするとPythonモジュールとして読み込まれます。
・テキストファイルとして開き、[登録]オプションにチェックを入れると、ブレンドファイルを開いたときに読み込まれます。
f:id:bluebirdofoz:20190920185622j:plain
f:id:bluebirdofoz:20190920185633j:plain

アドオン

Blenderの機能の一部は、オプションで保持するのが最適です。
起動時に読み込まれるスクリプトと共に、独自のディレクトリ scripts/addons に保持されるアドオンがあります。
これらはユーザー設定から選択された場合のみ起動時に読み込まれます。

アドオンとビルトインPythonモジュールの唯一の違いは、アドオンに bl_info 変数が含まれている必要があることです。
bl_info 変数は名前、作成者、カテゴリ、URLなどのメタデータを読み取るためにBlenderが使用する変数です。

User Preferencesアドオンリストは、bl_info 変数を使用して各アドオンに関する情報を表示します。

bl_info の詳細については、アドオンページをご覧ください。
wiki.blender.org
wiki.blender.org

bluebirdofoz.hatenablog.com