PythonでBlenderのプログラミングを開始した Part1


概要

blenderの学習を兼ねて、Blender上のPythonをやってみた。

きっかけ

自分一人で開発するときはblenderでのアニメーションや各種素材の開発は簡略化したかった。

*一プログラマなので、節約したくて、自分一人で進めたかった。

成果物

実行方法

まず動かしてみたいという人は試してみてください。

  1. スクリプト選択ダイアログを開く

  2. スクリプトファイルの選択
    2-1.ファイルダイアログを選択
    2-2.テキストを開くボタンをクリック

  1. 「▷」ボタンをクリック

4.実行出来たらアニメーション側をループ再生で確認
4-1.Animationタブをクリック
4-2.アニメーションしたの「▷」ボタンでアニメーションをループ再生して動きを確認

実際に取り組んだもの

参考にさせていただきました。

コードの解説

既存のBlenderの拡張

タイトルラベルの設定

row.label内のtextがタイトルで、iconが左部分に表示したいアイコンを指定します。

row = layout.row()
row.label(text="ショップ情報", icon='WORLD_DATA')

メニュー内のボタンオブジェクト生成

オブジェクト名.operator("起動するid名")

row = layout.row()
row.operator("mycustom.button")

アニメーション部分

今回は、アニメーションをCSVなどで指定できるようにしたくて、以下のようにアニメーション情報をループするように作りました。

1.の処理

bpy上のオブジェクト情報を取得してきました。

obj = bpy.context.scene.objects[0]
2.の処理

CSVにする前のアニメーション情報を一覧
x,y,zの座標情報を持ったtupleのリストとして表現しています。

locations = (
    (0, 0, 2),
    (0, 3, 4),
    (0, 3, 8),
    (0, 13, 8),
    (5, 13, 8),
    (5, 23, 8),

)
3.の処理

keyframe_insertでアニメーションを設定

i = 0
for location in locations:
    obj.location = location
    obj.keyframe_insert(data_path="location", frame=5.0*i)
    i += 1

開発環境

blender2.91

参考資料

Blender拡張時に参考にさせていただきました。

ホロモンさんの拡張記事

https://bluebirdofoz.hatenablog.com/entry/2019/11/12/090304

アニメーションの「キーフレーム」の設定

https://docs.blender.org/api/current/bpy.ops.anim.html?highlight=keyframe_insert#bpy.ops.anim.keyframe_insert

blender2.90のapi資料

https://wiki.blender.org/wiki/Reference/Release_Notes/2.90/Python_API

今回の開発をしたblenderのコミットログ

blenderの2.91で確認をしています。

https://github.com/sakuriver/technicalartchallenge/commit/3c21e5833a1c01d7af684ba6364e532ef0ba124d