MRが楽しい

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

Blender 2.8のPython APIドキュメントを少しずつ読み解く リファレンスAPIの使用法 その2

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

Blender 2.8 Python API Documentation

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

今日は「ReferenceAPIの使用法」のデータパスのコピーまでです。
f:id:bluebirdofoz:20190924091454j:plain

ネストされたプロパティ

前の例は、コンテキストから直接アクセスできるObjectのlocationプロパティであるため、非常に簡単です。
より複雑な例を次に示します。

# access a render layers samples
bpy.context.scene.render.layers["RenderLayer"].samples
# Blender2.8では以下を使用する
bpy.context.scene.view_layers["View Layer"].samples

# access to the current weight paint brush size
bpy.context.tool_settings.weight_paint.brush.size

# check if the window is fullscreen
bpy.context.window.screen.show_fullscreen

f:id:bluebirdofoz:20190924091503j:plain

ご覧のとおり、ネストされたデータにアクセスしたい場合があります。

プロパティは、データが内部的に(ブレンダーCコードで)格納される方法と一致するように調整されています。
このため、学習には時間がかかります。Blenderでデータがどのように組み合わされるかを理解するのに役立ちます。
これは、スクリプトを記述する際に重要です。

スクリプティングを開始すると、必要なデータにアクセスする方法がわからないという問題に遭遇することがよくあります。
この問題の解決にはいくつかの方法があります。

Pythonコンソールのオートコンプリート(Ctrl + Spaceキー)を使用して、プロパティを検査します。
 これはプロパティの値を簡単に確認して、結果をインタラクティブに割り当てることができるという利点があります。
f:id:bluebirdofoz:20190924091514j:plain
ユーザーインターフェイスからData-Pathをコピーします。
docs.blender.org
・ドキュメントを使用してリファレンスをフォローする。以下で更に説明します。
docs.blender.org

データパスのコピー

Blenderは、Python: ... 以下のツールチップに表示されるプロパティへのPython文字列を計算できます。
これにより、API参照を使用してデータにアクセスする場所を見つける必要がなくなります。

IDデータブロックからそのプロパティにパスを与えるデータパスをコピーするユーザーインターフェイス機能があります。
機能を確認するため、Subdivision-Surfaceモディファイアのサブディビジョン設定へのパスを取得してみます。

デフォルトのシーンを起動し、Modifiersタブから、Subdivision-Surfaceモディファイアをキューブに追加します。
f:id:bluebirdofoz:20190924091559j:plain

次に、[ビューポート]ボタンの上にマウスを移動します。
ツールチップには bpy.types.SubsurfModifier.levels が表示されます。
オブジェクトからこのプロパティへのパスが必要です。
f:id:bluebirdofoz:20190924091608j:plain

ツールチップのテキストには bpy.data.collection["name"]. コンポーネントが含まれないことに注意してください。
全てのアクセスでコレクションの調査を行わないと想定しているためです。
通常、各 bpy.types.ID インスタンスには名前でアクセスするのではなく、コンテキストを使用します。

PythonコンソールにIDパス bpy.context.active_object を入力します
次に、ボタンを右クリックして[データパスのコピー]を選択し、結果をコンソールに貼り付けます。
f:id:bluebirdofoz:20190924091621j:plain

modifiers["Subdivision"].levels

結果、コンソールには以下のようなテキストが作成されます。

bpy.context.active_object.modifiers["Subdivision"].levels

Enterキーを押すと、現在の値1が取得されます。
f:id:bluebirdofoz:20190924091632j:plain

次に、値を2に変更してみます。

bpy.context.active_object.modifiers["Subdivision"].levels = 2

値の更新は、Subdivision-SurfaceモディファイアのUIで確認できます。
f:id:bluebirdofoz:20190924091641j:plain

bluebirdofoz.hatenablog.com