本日は Blender2.8 の調査枠です。
Blender 2.8 の Python API ドキュメントを少しずつ読みつつ試していきます。
Blender 2.8 Python API Documentation
以下のページを日本語訳しつつ実際に試しつつ記事を進めていきます。
docs.blender.org
docs.blender.org
今日は「クイックスタート」のタイプに関してです。
タイプ
Blender は多くの Python タイプを定義しますが、Python ネイティブタイプも使用します。
BlenderのPython API は3つのカテゴリに分割できます。
ネイティブ型
数値または文字列をカスタム型として返すのは扱いにくいので、これらは通常の Python 型としてアクセスします。
・Blender float/int/boolean -> float/int/boolean
・Blender 列挙子 -> string
>>> C.object.rotation_mode = 'AXIS_ANGLE'
・Blender列挙子(複数)-> set of strings
# setting multiple camera overlay guides # 複数のカメラオーバーレイガイドの設定 bpy.context.scene.camera.data.show_guide = {'GOLDEN', 'CENTER'} # passing as an operator argument for report types # レポートタイプの演算子引数として渡す self.report({'WARNING', 'INFO'}, "Some message!")
(Blender2.8ではオーバレイ操作が overlay タイプの配下のため、上記操作は利用不可)
内部型
bpy.types.bpy_struct は Blenderのデータブロックとコレクションに使用されます.。
例えば、独自の属性 collections / mehes / bones / scenes… などを含むデータが対象です。
Blender データをラップする2つの主なタイプがあります。
1つはデータブロック(内部的な bpy_struct)用で、もう1つはプロパティ用です。
>>> bpy.context.object bpy.data.objects['Cube'] >>> C.scene.objects bpy.data.scenes['Scene'].objects
これらのタイプは Blender のデータを参照するため、変更するとすぐに表示されることに注意してください。
Mathutilsのタイプ
mathutils からアクセス可能なベクター、クォータニオン、オイラー、マトリックスおよび色の種類に使用します。
以下の一部の属性は様々な方法で、使用および操作できる特別な数学タイプとしてアクセスできます
・bpy.types.Object.location
・bpy.types.PoseBone.rotation_euler
・bpy.types.Scene.cursor_location
行列の例、ベクトル乗算:
bpy.context.object.matrix_world * bpy.context.object.data.verts[0].co.x
mathutils タイプは Blender の内部データへの参照を保持するため、変更を反映することができます。
例:
# modifies the Z axis in place. # Z軸を所定の位置に変更します。 bpy.context.object.location.z += 2.0
# location variable holds a reference to the object too. # ロケーション変数は、オブジェクトへの参照も保持します。 location = bpy.context.object.location location *= 2.0
# Copying the value drops the reference so the value can be passed to # functions and modified without unwanted side effects. # 値をコピーすると参照が削除されるため、値を関数に渡して影響しないように変更できます。 location = bpy.context.object.location.copy() location *= 2.0
アニメーション
Python を介してキーフレームを追加するには2つの方法があります。
1つ目はキープロパティを直接使用する方法です。
これは、ユーザーとしてボタンからキーフレームを挿入することに似ています。
2つ目は曲線とキーフレームデータを手動で作成してから、プロパティへのパスを設定する方法です。
以下に両方の方法の例を示します。
どちらの例もアクティブなオブジェクトのZ軸にキーフレームを挿入します。
簡単な例:
obj = bpy.context.object obj.location[2] = 0.0 obj.keyframe_insert(data_path="location", frame=10.0, index=2) obj.location[2] = 1.0 obj.keyframe_insert(data_path="location", frame=20.0, index=2)
低レベル関数の使用:
obj = bpy.context.object obj.animation_data_create() obj.animation_data.action = bpy.data.actions.new(name="MyAction") fcu_z = obj.animation_data.action.fcurves.new(data_path="location", index=2) fcu_z.keyframe_points.add(2) fcu_z.keyframe_points[0].co = 10.0, 0.0 fcu_z.keyframe_points[1].co = 20.0, 1.0