本日は Blender2.8 の調査枠です。
今回から Blender 2.8 の Python API ドキュメントを少しずつ読みつつ試していきます。
Blender 2.8 Python API Documentation
以下のページを日本語訳しつつ実際に試して記事を進めていきます。
docs.blender.org
docs.blender.org
今日は「ReferenceAPIの使用法」のデータパスのコピーまでです。
ネストされたプロパティ
前の例は、コンテキストから直接アクセスできる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
ご覧のとおり、ネストされたデータにアクセスしたい場合があります。
プロパティは、データが内部的に(ブレンダーCコードで)格納される方法と一致するように調整されています。
このため、学習には時間がかかります。Blenderでデータがどのように組み合わされるかを理解するのに役立ちます。
これは、スクリプトを記述する際に重要です。
スクリプティングを開始すると、必要なデータにアクセスする方法がわからないという問題に遭遇することがよくあります。
この問題の解決にはいくつかの方法があります。
・Pythonコンソールのオートコンプリート(Ctrl + Spaceキー)を使用して、プロパティを検査します。
これはプロパティの値を簡単に確認して、結果をインタラクティブに割り当てることができるという利点があります。
・ユーザーインターフェイスからData-Pathをコピーします。
docs.blender.org
・ドキュメントを使用してリファレンスをフォローする。以下で更に説明します。
docs.blender.org
データパスのコピー
Blenderは、Python: ... 以下のツールチップに表示されるプロパティへのPython文字列を計算できます。
これにより、API参照を使用してデータにアクセスする場所を見つける必要がなくなります。
IDデータブロックからそのプロパティにパスを与えるデータパスをコピーするユーザーインターフェイス機能があります。
機能を確認するため、Subdivision-Surfaceモディファイアのサブディビジョン設定へのパスを取得してみます。
デフォルトのシーンを起動し、Modifiersタブから、Subdivision-Surfaceモディファイアをキューブに追加します。
次に、[ビューポート]ボタンの上にマウスを移動します。
ツールチップには bpy.types.SubsurfModifier.levels が表示されます。
オブジェクトからこのプロパティへのパスが必要です。
ツールチップのテキストには bpy.data.collection["name"]. コンポーネントが含まれないことに注意してください。
全てのアクセスでコレクションの調査を行わないと想定しているためです。
通常、各 bpy.types.ID インスタンスには名前でアクセスするのではなく、コンテキストを使用します。
PythonコンソールにIDパス bpy.context.active_object を入力します
次に、ボタンを右クリックして[データパスのコピー]を選択し、結果をコンソールに貼り付けます。
modifiers["Subdivision"].levels
結果、コンソールには以下のようなテキストが作成されます。
bpy.context.active_object.modifiers["Subdivision"].levels
Enterキーを押すと、現在の値1が取得されます。
次に、値を2に変更してみます。
bpy.context.active_object.modifiers["Subdivision"].levels = 2
値の更新は、Subdivision-SurfaceモディファイアのUIで確認できます。