Dev:JA/Ref/Release Notes/4.10/python api
元記事:Python API - Blender Developer Documentation
目次
Blender 4.1: Python API
Python 3.11
Python が VFX platform 2024に合わせてバージョン 3.11にアップグレードしました。
Enum ID プロパティ
整数型(integer)プロパティが列挙(enum)型アイテムに対応しました。92cf9dd2f2d7f4d8d380d4b1dcc17f6c2b5b175d
UI を通じた列挙アイテムの編集は未対応です(技術的な理由は上のコミットメッセージを見てください)。
列挙アイテムは整数型プロパティに id_properties_ui Python メソッドを使用して追加できます。as_dict
メソッドを使用してプロパティの列挙リストアイテムを取得できます。
my_object["my_prop"] = 2
ui_data = my_object.id_properties_ui("my_prop")
ui_data.update(items=[
("TOMATOES", "Tomatoes", "Solanum lycopersicum"),
("CUCUMBERS", "Cucumbers", "Cucumis sativus"),
("RADISHES", "Radishes", "Raphanus raphanistrum"),
])
print(ui_data.as_dict())
既存の便利なラッパー関数も同様に対応しています。
from rna_prop_ui import rna_idprop_ui_create
rna_idprop_ui_create(my_object, "my_prop", default=2, items=[
("TOMATOES", "Tomatoes", "Solanum lycopersicum"),
("CUCUMBERS", "Cucumbers", "Cucumis sativus"),
("RADISHES", "Radishes", "Raphanus raphanistrum"),
])
列挙アイテムの付いた整数型プロパティは、UI 内でドロップダウンボタンとして表示されます。
レイアウトパネル
Blenderに新しく "layout panel" が追加されました。このパネルは draw
関数内で定義され、新たな登録は必要ありません。
これにより、パネル内の開閉可能なセクションの作成に必要なコード量が大幅に削減されます。(f824476bd5f81f98f9b969661e8e9ac4d50a5521、8896446f7e72084018bf7a45306a83d92e22f34a、ddd06eeb8f7495600c3a42a1c664c8b4de958ede)
import bpy
from bpy.props import BoolProperty
class LayoutDemoPanel(bpy.types.Panel):
bl_label = "Layout Panel Demo"
bl_idname = "SCENE_PT_layout_panel"
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "scene"
def draw(self, context):
layout = self.layout
scene = context.scene
layout.label(text="Before")
header, panel = layout.panel("my_panel_id", default_closed=False)
header.label(text="Hello World")
if panel:
panel.label(text="Success")
header, panel = layout.panel_prop(scene, "show_demo_panel")
header.label(text="My Panel")
if panel:
panel.prop(scene, "frame_start")
panel.prop(scene, "frame_end")
layout.label(text="After")
bpy.utils.register_class(LayoutDemoPanel)
bpy.types.Scene.show_demo_panel = BoolProperty(default=False)
互換性の失われる変更
Foreach
foreach_get
とforeach_set
が、8、16、64ビットの内部ストレージに最適化されました。(PR#115761)
foreach_set
が、より正確な境界チェックを行うようになり、従来こっそり不正な書き込みを行っていた場所では、TypeError
が発生します。
Light Probes
- Lightprobe タイプのアイテムがリネームされました。
bpy.types.LightProbe.type
、bpy.types.BlendDataProbes.new()
、bpy.ops.object.lightprobe_add()
に影響します。CUBEMAP
→SPHERE
PLANAR
→PLANE
GRID
→VOLUME
show_data
が廃止予定になりました。代わりにuse_data_display
を使用してください。
- 各
LightProbe
に、自身のdata_display_size
プロパティが付きました。
Mesh
- スカルプトのマスク値が汎用属性に格納されるように。(f2bcd73bd25625d6b5c1194a4199e96fc5fafa2e)
- 名前は ".sculpt_mask"(
FLOAT
タイプ) - マスクのアクセス、追加、削除がシンプルになりました。
Mesh.vertex_paint_mask
プロパティで集合(collection)ではなく、この属性が直接返ってきます。Mesh.vertex_paint_mask_ensure()
と、Mesh.vertex_paint_mask_remove()
関数で、属性の追加と削除が可能。
- 名前は ".sculpt_mask"(
Mesh
のauto_smooth
プロパティがモディファイアーノードグループアセットで置き換えられました。(89e3ba4e25c9ff921b2584c294cbc38c3d344c34)use_auto_smooth
は削除されました。スムーズとスムーズ以外のタグが混ざっている場合、面コーナーの法線が自動的に使用されます。メッシュはカスタム法線が存在していれば、常にそれを使うようになりました。auto_smooth_angle
は削除されました。"sharp_edge"
属性をコントロールするモディファイアー(またはオペレーター)で置き換えられました。つまり、もう(オブジェクトなしの)メッシュ単体では、角度による自動スムージングに関することは何も知ることはできなくなったということです。create_normals_split
、calc_normals_split
、free_normals_split
が削除され、もっとシンプルなMesh.corner_normals
集合プロパティ(bpy_prop_collection)によって置き換えられました。これは法線のキャッシュへのアクセスを与えるため、関連データに変更がある時は自動的に更新されます。MeshLoop.normal
が読み込み専用プロパティになりました。カスタム法線はnormals_split_custom_set
またはnormals_split_custom_set_from_vertices
で作成してください。
Material
displacement_method
プロパティが、cycles.properties.CyclesMaterialSettings
からbpy.types.Material
に移動しました。a001cf9f2b08a67aa3b20f1857eac5c915f5ef33
Sequencer
- ストリップの変換フィルタータイプの
SUBSAMPLING_3x3
が、BOX
にリネームされました。bpy.types.SequenceTransform.filter
に影響します。(PR#117584)
View Layer
Scene.view_layers.move()
メソッドを追加、ビューレイヤーを再配置できます。(PR#117037)
Nodes
- 一部ノード(
Store Named Attribute
など)が一度に存在するすべてのソケットタイプを持つ代わりに、動的なソケットタイプを使用するようになりました。つまり、node.outputs[some_index]
のようなことをしても、もうこれらのノードでは同じ動作はしなくなってしまったということです。代わりにもっと信頼性の高いnode.outputs[some_socket_identifier]
を使用してください。(8149678d5e1d6e0d00668c3f209736721401b4e9)
追記
Preferences.filepaths.asset_libraries.new/remove
メソッドを追加。(0061f2f65030)
ID.session_uid
読み込み専用プロパティを追加。(c68b22cfdf)
NodesModifierBake.bake_id
読み込み専用プロパティを追加。(7149424087)
NodesModifierBake.node
読み込み専用プロパティを追加。(65b722bc3003)
- 翻訳変更時に実行される
bpy.app.handlers.translation_update_post
アップデートハンドラを追加。(8564e03cdf59fb2a71d545e81871411b82f561d9)
Image.scale()
に、オプションの "frame" と "tile_index" 引数を追加。(3d60209d3d30c9ac99fead690ceafc18d594fcb1)
ShapeKey.points
プロパティを追加。(7d77caab9b)
- 複数入力のソケットにリンクする順序へのアクセスを追加。(8f362817875a9b2bcdd77e53130672624dadb2da)
シェイプキーのロック
シェイプキーをユーザーがロックし、スカルプトや編集モードによる不意の編集の防止が可能になりました (b350d7a4c311ec6a3065ac89febafc3ba6bd43a2)。アクティブシェイプをトポロジーの変更なしでトランスフォームするオペレーターを実装している、またはすでにこのチェックを行っている他のビルトインオペレーターを呼び出しているアドオンは、これらのコードにチェックを追加することを考えた方がいいかもしれません。
ビルトインオペレーターの例:
mesh.vertices_smooth
はアクティブシェイプをトランスフォームするためチェックします。mesh.subdivide
はトポロジーを変更するのでチェックしません。object.transform_apply
は(アクティブシェイプキーの選択がなんであれ)同じトランスフォームを全シェイプに適用するため、チェックしません。mesh.polybuild_extrude_at_cursor_move
は、内部的に他のチェックを行うオペレーターを呼び出すため、チェックします。
チェックの実装のサンプル:
from bpy_extras.object_utils import object_report_if_active_shape_key_is_locked
def execute(self, context):
if object_report_if_active_shape_key_is_locked(context.object, self):
return {'CANCELLED'}