Unsplashから画像を選択
前回 と引き続きblender記事を書こうと思います。 Blenderを初めてから約6年くらい経ちますが、 毎日コツコツ触っていたわけでなく、短期間の一点集中で制作していたので 時期が開いたりして忘れちゃうんですよね・・・・ ショートカットキー を。 毎度メモを見るか調べてやってましたが、そろそろどうにかしたい 特に 「視点をカメラにする」ショートカットキー(CTRL + ALT + テンキー0) 何回も使うので、ボタン押しただけで切り替えるようにしたい!!!! と編集画面をカスタマイズできないかと調べたところ なんとBlenderにはPythonが使えるという!6年越しの新発見です!! ということで、Pythonで視点をカメラにするボタン作りました!
〜環境〜 blender 3.0 python 3.9.7
目次 [非表示]
Pythonを書く前に 視点をカメラにする ▼コードの解説❶パネルを追加 ▼❷パネルのレイアウト ▼「視点をカメラにする」ボタンを追加 ▼「視点をカメラにする」機能を追加 おわりに Pythonを書く前に Blender内でPythonを書くことができます。 ① blenderを開き、ヘッダーメニュー(緑の枠)のScriptingをクリックします。
② 赤枠の部分の「 + 新規」をクリックすると記述できます。 赤枠の部分にコード書いていきます。
視点をカメラにする
完成したコードはこちらです。
import bpy
# 視点をカメラにするボタン
class Camera_viewpoint_Panel(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = 'カメラ'
bl_label = 'カメラ'
def draw(self, context):
layout = self.layout
row = layout.row()
row.operator('camera.add')
class Camera_viewpoint_btn(bpy.types.Operator):
bl_idname = 'camera.add'
bl_label = '視点をカメラにする'
bl_description = '視点をカメラにする'
def execute(self,context):
bpy.ops.object.select_all(action='DESELECT')
for obj in bpy.data.objects:
if obj.type == 'CAMERA':
if "Camera" in obj.name:
obj.select_set(True)
bpy.data.objects.remove(obj)
camera_data = bpy.data.cameras.new(name="Camera")
if camera_data is None:
return {"CANCELLED"}
my_camera = bpy.data.objects.new("Camera", camera_data)
if my_camera is None:
return {"CANCELLED"}
bpy.context.scene.collection.objects.link(my_camera)
context.scene.camera = my_camera
bpy.ops.view3d.camera_to_view()
return{'FINISHED'}
bpy.utils.register_class(Camera_viewpoint_Panel)
bpy.utils.register_class(Camera_viewpoint_btn)
コードの解説 ❶パネルを追加 class Camera_viewpoint_Panel(bpy.types.Panel): bl_space_type :パネルを追加する場所 今回は3D viewportを指すVIEW_3Dに設定します。 bl_region_type :パネルが所属する領域 bl_space_typeで指定した中に存在する領域を指定する必要があります。 指定できるものは以下です! ‘WINDOW’, ‘HEADER’, ‘CHANNELS’, ‘TEMPORARY’, ‘UI’, ‘TOOLS’, ‘TOOL_PROPS’, ‘PREVIEW’, ‘HUD’, ‘NAVIGATION_BAR’, ‘EXECUTE’, ‘FOOTER’, ‘TOOL_HEADER’ 🤔なぜか、指定できないものもあるのでエラーでたらダメなんだくらいで色々試してみてください🤔 今回は色々試してみてください🤔 今回はよく使ってる UI にパネルをボタンを追加していきます。 bl_category :サイドバーのタブに追加 既にあるものを指定した場合は、その中にボタンが追加されます。 bl_space_type :追加したパネルのタイトル
❷パネルのレイアウト def draw(self, context): layout = self.layout row = layout.row() row.operator(‘camera.add’) 以下の記事でレイアウトの種類を分かりやすく紹介しています! https://bookyakuno.com/python-layout-menu/ 完成したパネルはこちら
「視点をカメラにする」ボタンを追加 class Camera_viewpoint_btn(bpy.types.Operator): bl_idname = ‘camera.add’ bl_label = ‘視点をカメラにする’ bl_description = ‘視点をカメラにする’ bl_idname:追加したい場所を指定 今回は、row.operatorの camea.addを指定します。 bl_label:ボタンの名前 bl_idname:ボタンの説明 「視点をカメラにする」機能を追加 def execute(self,context): bpy.ops.object.select_all(action=’DESELECT’) for obj in bpy.data.objects: if obj.type == ‘CAMERA’: if “Camera” in obj.name: obj.select_set(True) bpy.data.objects.remove(obj) camera_data = bpy.data.cameras.new(name=”Camera”) if camera_data is None: return {“CANCELLED”} my_camera = bpy.data.objects.new(“Camera”, camera_data) if my_camera is None: return {“CANCELLED”} bpy.context.scene.collection.objects.link(my_camera) context.scene.camera = my_camera bpy.ops.view3d.camera_to_view() bpy.ops.view3d.camera_to_view() :カメラ視点に切り替える これだけだと、ただ カメラ視点に切り替える のみで現在の視点は反映されてません。 ここから、現視点をカメラに適用していきます。 他にも方法はありますが、 今回はカメラを現視点の位置で新規に作成して切り替えるように実装しました。 ※もっとスマートなやり方はあるかもです・・・・・
#シーンに新規でカメラを追加する #シーンに新規でカメラを追加する def execute(self,context): bpy.ops.object.select_all(action=’DESELECT’) for obj in bpy.data.objects: if obj.type == ‘CAMERA’: if “Camera” in obj.name: obj.select_set(True) bpy.data.objects.remove(obj) camera_data = bpy.data.cameras.new(name=”Camera”) if camera_data is None: return {“CANCELLED”} my_camera = bpy.data.objects.new(“Camera”, camera_data) if my_camera is None: return {“CANCELLED”} bpy.context.scene.collection.objects.link(my_camera) context.scene.camera = my_camera bpy.ops.view3d.camera_to_view() ただ、これだけだと大量にカメラが爆誕してしまうので 下記の記述で 選択されているカメラは削除 で一個のみになるようにしています。
オブジェクトタイプが”CAMERA”で名前に”Camera”が含まれていれば削除 bpy.ops.object.select_all(action=’DESELECT’) for obj in bpy.data.objects: if obj.type == ‘CAMERA’: if “Camera” in obj.name: obj.select_set(True) bpy.data.objects.remove(obj) 完成されたのがコチラになります!!!
「視点をカメラにする」ボタンを押すとカメラが適用されています。
おわりに 初!blenderでpythonというこで 日本語での解説が少なく英語サイトを翻訳したりしてかなり苦戦しましたが 組み合わせ次第で、カスタマイズが可能なので面白かったです。 今回はカメラのみの実装ですが もう少し使いやすく調整・他の機能も追加して blenderのUIをさらにわかりやすく・使いやすくする ものを いつかアドオンにして公開できたらなと思います。
検索で何度も(CTRL + ALT + テンキー0)と出会いました・・ 途中でやっぱりショートカットキー覚えた方が早かったのではと思ったのは内緒でお願いします。
参考サイト: Blender 3.1 Python API Documentation
ところで・・・・・
ロジカルスタジオではフロントエンジニア、バックエンドエンジニアを募集しています。
今回の記事が役に立つかも・・・・・・
株式会社ロジカルスタジオ's job postings