Dev:JA/2.5/Py/Scripts/Cookbook/Code snippets/Introduction

提供: wiki
< Dev:JA‎ | 2.5‎ | Py/Scripts/Cookbook/Code snippets
2018年6月29日 (金) 05:54時点におけるYamyam (トーク | 投稿記録)による版 (1版 をインポートしました)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

はじめに

バージョン 2.5x の Blender が登場し、Python スクリプティングは新たな段階に入りました。Blender 2.49 までの Python APIはかなり未完成でその場しのぎでしたが、Blender 2.5x の API によって、Python は Blender の全機能に、完全な系統だった方法でアクセス可能になります。

この驚異的なツールの学習曲線はしかしながら急勾配です。この記事の目的は、Blender の Python スクリプティングの多様な側面を表すスクリプト例を示し、学習方法を簡単にすることです。

Blender はいまも大規模な開発が続けられおり、Python API はまだ完全な安定版ではありません。この記事の最初の二つの版が出た2ヶ月間に、Python API は古いスクリプトをすべてなくして、完全に整備されました。第2版 (Blender 2.54.0 向け) と現在の第3版 (Blender 2.57.0 向け) にはそれほど劇的な違いはありません。しかしながら、API の小規模の変更がスクリプトを動かなくさせることがあり得ます。この記事のスクリプトは Blender 2.57.0 rev 35147 で(この情報はスプラッシュスクリーンで見られます)テストしています。

Blender 2.57 は最初の安定版と告知されており、API が将来的にも安定したままである望みがあります。この記事のスクリプトが長い期間動作し続けるチャンスですが、この保証はありません。 扱う話題は次のうちのいずれかに分類されます:

ほとんどのプログラムは実用的ではなく、概念を説明するためのものです。

  • データ作成と操作
  • 独自のプロパティ
  • ユーザーインタフェース: パネル、ボタン、メニュー
  • スクリプトから Blender add-on への変換。Blender 開始時に自動的に読み込まれるようにできます
  • スクリプトのファイル分割
  • シミュレーション(particles, hair, cloth, softbodies, smoke, fluids など)
  • ノード

スクリプトの実行

スクリプト例は multi-file パッケージを除いて完全なプログラムです。Blender の Scripting screen にある Text Editor に、コピー&ペーストできます。Run Script ボタンを押すか、キーボードで AltP を押して実行します。

スクリプトはそのファイルの入っていた scripts フォルダに置いて、単独の Python ファイルとしても利用可能です。Python ファイルを Text Editor AltO に読み込み、実行するだけです。他の多くのスクリプトを一度に実行するバッチスクリプトもあります。詳しくは最終章で述べます。

スクリプトは ~/snippets/scripts folder にあるものと仮定されます。 ここで ~ はホームディレクトリです(例:Linux では /home/thomas、Windows XP では C:/Documents and Settings/users/thomas、Windows Vista では C:/Users/thomasです)。スクリプトはどこに置くこともできますが、一部のファイルのパス名は (batc.py, texture.py と uvs.py) は相応なものにする必要があります。Python は該当ファイルが見つからない場合、ユーザーに通知します。

ファイル batch.py を読み込んで実行すれば、object および simulation フォルダにあるすべてのスクリプトを一括して実行できます。バッチスクリプトを実行すれば、すべてのスクリプトが正しく動作することを(もしくは少なくともエラーを発生させないことを)簡単に確かめることができます。問題があれば、コンソールウィンドウを見てさらなる情報を得ます。

さらなる情報を得る

スクリプト例は、Blender 2.5x の Python スクリプティングで何ができるのか、表層をなぞるものに過ぎません。自分でスクリプトを書くとき、ここで述べられていない操作や変数にアクセスしたいときっと思うでしょう。この情報を得る方法がいくつかあります。


API リファレンス

中心となる情報源は Blender Python documentation です。Help » Python API Reference からも便利にアクセスできます。


1 2 Help.png


チュートリアル

公式のスクリプティングチュートリアルも ここ にあります。


ツールチップ

ツールチップを使ってください。例えば Lamp コンテキストの This Layer Only オプションの上にマウスを置くと、次のテキストが現れます:

Illuminates objects only on the same layer the lamp is on
Python: PointLamp.use_own_layer


ここから、このオプションが lamp.use_own_layer でアクセスできることが推測できます。ここで lamp はアクティブオブジェクトのデータです。例えば lamp = bpy.context.object.data など。


1 2 ToolTip.png


追加メニューにもツールチップがあります。

Construct an UV sphere mesh
Python: bpy.ops.primitive_uv_sphere_add()


プリミティブ UV sphere メッシュを追加するのにどの operator が呼ばれるのかがわかります。


1 2 ToolTipMenu.png


operator(演算)reports

operator が一旦実行されると、Scripting screen の report ウィンドウに履歴を残します。

bpy.ops.mesh.primitive_uv_sphere_add(segments=32, rings=16,
size=1, view_align=False, enter_editmode=False,
location=(0, 0, 0), rotation=(0, 0, 0), layer=(True, False, False,
False, False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False))


メニューから UV sphere を追加するときは常に 32 の segment と 16 の ring を持っている、など。ここから、例えば 12 の segment と 6 つの ring を持ち、半径が 3 で中心が (1, 1, 1) であるような他のデータで sphere を作る呼び出しを考えるのは簡単です:

bpy.ops.mesh.primitive_uv_sphere_add(
segments=12,
rings=6,
size=3,enter_editmode=True,
location=(1, 1, 1))


report ウィンドウに記録されるのは operator の実行だけで、値の設定などは記録されません。


1 2 ToolTipInfo.png


最近の Blender のバージョンでは、スクリプティングの履歴は上にあるメニューバーを下に下ろすと現れる Info ウィンドウに表示されます。

1 2 ToolTipInfoShow.png


コミュニティ

  • 他人のコードから学んでください。Blender に同梱のスクリプトは大きなインスピレーションの元になります。
  • 活動的なオンラインコミュニティが BlenderArtist のPython and scripting subform にあります。