From BlenderWiki

Jump to: navigation, search

Blender 2.79: Python API

互換性がなくなる変更

  • bpy.data.xxx.remove() 関数の do_unlink パラメータのデフォルト値が False から True に切り替わりました。(44b691dc658)


データブロックポインタプロパティ

オブジェクトやマテリアルなどのように、カスタムプロパティにデータブロックへのポインタが格納できるようになりました。このため、データブロックタイプと共に PointerProperty が作成可能になりました。

前方互換性

不運にも、この新しいカスタムプロパティタイプのおかげで、従来のコードの未知のプロパティで Blender がクラッシュするという深刻なバグが露呈しました。このバグは将来的には 15189baa52 で修正されますが、現存のリリースでこれを修正するのは不可能です。

つまり、新しいデータブロックカスタムプロパティを使用した .blend ファイルを、2.79より前のバージョンで読み込むとクラッシュするということです。

この問題についての詳細な技術情報は T51260 をご覧ください。

レンダーパス

レンダーパスが名前だけで識別されるようになり、type プロパティは削除されました。この変更の目的は外部レンダリングエンジンが従来の Blender で公開されていた31タイプのパスだけに限らず、任意のレンダーパスを生成し、Blender に返すことができるようにするためです。(4cf7fc3b3a4d),)

変更:

  • typedebug_type プロパティが RenderPass 構造体から削除されました。
  • find_by_name 関数が RenderPasses 構造体に追加され、find_by_type は非推奨になりました。
  • SceneRenderLayer がカスタムプロパティに対応し、レンダーエンジンが自分用のレンダーパスを追加できるようになりました。
  • RenderEngine に3つの新しい関数を追加。
    • add_pass: レンダリング中に Render Result にレンダーパスを追加するため、レンダーエンジンから呼ばれます。名前とチャンネル数、チャンネルを識別する文字(RGBA など)、オプションで追加すべきレンダーレイヤーを指定します。
    • update_render_passes: これはレンダーパスを使用するレンダーエンジンによる実装が必要です。目的は与えられた現在のオプションによって生成されるパスの情報を、Blender に伝えられるようにすることで、これは各自の register_pass 呼び出しによって行われます。
    • register_pass は update_render_passes から呼ばれ、名前、チャンネル、データタイプ(コンポジターの出力ソケットを決定するのに使用)を渡して生成されたパスの情報を Blender に提供します。
  • 前述の31のパスタイプを表わす、31のパス名が予約されています。レンダーエンジンがこれらのパスを提供するかもしれませんが、旧パスタイプと関連付けられていると見なされる可能性があります(例えば、コンポジターのノード接続が予約されてしまうなど)。

その他の新しい API

  • 右クリックメニューへのエントリの挿入(と、そのエントリをクリックした UI エレメントからのデータの取得)。サンプルが bpy.types.Menu ドキュメントにあります。(d6963630d)
  • ID プロパティ配列が Python バッファプロトコルに対応しました。これは、その配列の作成とアクセスを非常に効率的にします。(73a9ff0d2d4f)