3DCGソフト【Blender】をPythonで試してみた1
はじめに
こんにちは、がんがんです。
今回は研究にて3DCGソフト【Blender】を使用したのでその備忘録です。
以下はBlenderの公式サイトです。
www.blender.org
また、日本用の非公式ページもあるようです。
blender.jp
参考記事
今回は以下を参考にしてセットアップをやっていきます。Blenderは参考記事を参照してバージョン2.79bをインストールします。
www.cgradproject.com
1. インストールして日本語化
まずは無事にインストールできました。設定はすべてデフォルトです。
その後、以下を参考にとりあえず日本語化しておきます。
2. コマンドプロンプトからの実行
pythonファイルを作成し、コマンドプロンプトから実行していきます。
実行方法は以下を参考にしました。
Blender起動時オプション — blendstudy 0.01 documentation
コマンドはこんな感じです。
blender -b --python test.py
コマンドの説明をしていきます。
blender
まずblenderコマンドは、blender.exeがあるフォルダでしか実行できません。
普段仮想環境にてPythonを分けているため、これでは非常に使い勝手が悪いです。そこで、環境変数にblender.exeのパスをぶちこんで解決しました。
-b
これはバックグラウンドでの実行を意味しています。-b
(または--background
)を入れることにより、GUIを起動せずともblenderの実行が可能になります。
3. pythonによる実行
まずはこちらを参考に動かしてみたいと思います。
nnamm.com
コードはこんな感じです。
#------------------------------------------------------------ # # pythonでBlender # test.py # #------------------------------------------------------------ import bpy import os import math """ 初期化 """ def delete_all(): # デフォルトで存在しているCubeを削除 bpy.ops.object.delete() """ シーン作成 """ def create_scene(): # Cube作成 cube_count = 10 for axis_x in range(0, cube_count): for axis_y in range(0, cube_count): for axis_z in range(0, cube_count): # pattern1 #bpy.ops.mesh.primitive_cube_add(location=(axis_x*2, axis_y*2, axis_z*2)) #bpy.ops.rigidbody.object_add() # pattern2 #bpy.ops.mesh.primitive_cube_add(location=(axis_x*2, axis_y*2, axis_z*2), # rotation=(15, 15, 0)) #bpy.ops.rigidbody.object_add() # pattern3 bpy.ops.mesh.primitive_cube_add(location=(axis_x*2, axis_y*2, axis_z*2)) bpy.ops.rigidbody.object_add() bpy.ops.object.modifier_add(type='SOFT_BODY') # 平面作成 bpy.ops.mesh.primitive_plane_add(location=(cube_count-1, cube_count-1, -10)) bpy.ops.rigidbody.object_add(type='PASSIVE') bpy.data.objects["Plane"].scale = (cube_count+10, cube_count+10, 1) # カメラ bpy.data.objects["Camera"].location = (cube_count+20, cube_count+20, cube_count+20) bpy.data.objects["Camera"].rotation_euler = (math.pi/6, 0, math.pi*3/4) bpy.data.cameras["Camera"].lens = 10 # 照明 bpy.data.objects["Lamp"].location = (0, 0, cube_count+10) bpy.data.lamps["Lamp"].type = 'SUN' """ 物理シミュレーション """ def start_simulation(): bpy.ops.ptcache.bake_all() # 動画作成 bpy.context.scene.render.resolution_x = 400 bpy.context.scene.render.resolution_y = 300 bpy.context.scene.render.resolution_percentage = 100 bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG' bpy.data.scenes["Scene"].render.filepath = "Physical.avi" bpy.context.scene.frame_start = 0 bpy.context.scene.frame_end = 250 bpy.ops.render.render(animation=True) # 保存 save_path = os.path.abspath(os.path.dirname(__file__)) bpy.path.relpath(save_path) bpy.ops.wm.save_as_mainfile(filepath="Physical.blend", relative_remap=True) """ メイン処理 """ if __name__ == '__main__': delete_all() create_scene() start_simulation()
patternを3種類用意して実験されていたようです。
実行してみると、以下のようなエラーが出ました。
KeyError: 'bpy_prop_collection[key]: key "Plane" not found'
どうやらPlane
というKeyが存在しないようです。
まとめ
研究で使用するためにはじめてBlender
を使用しました。
普段使用しているPythonを用いていろいろやれることも分かったので、これからもいじってみます。
次回は今回起きたエラーを改善していきます。