【Blender】ChatGPTにアドオンを作ってもらう

投稿者: | 2023-05-24

ChatGPTに、Blenderのアドオンを作ってもらいました。今回は、テストとして簡単なカスタムパネルを作りました。

3Dビューポートのサイドバーにパネルを表示し、列挙体や文字列を入力したり、ドラッグアンドドロップでオブジェクトの参照をもたせたりできるようにします。

スクリプト

bl_infoの「blender」キーに、アドオンが互換性を持つBlenderのバージョンを設定します。

# -*- coding: utf-8 -*-

bl_info = {
    "name": "Custom Input Panel",
    "author": "Your Name",
    "version": (1, 0),
    "blender": (3, 5, 0),
    "location": "View3D > Sidebar > Custom Input",
    "description": "Custom input panel for Blender",
    "warning": "",
    "wiki_url": "",
    "category": "Object",
}

import bpy

class SimpleOperator(bpy.types.Operator):
    bl_idname = "object.simple_operator"
    bl_label = "Simple Operator"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):
        scene = context.scene
        tool = scene.simple_tool

        print(f"Your text: {tool.my_string}")
        return {'FINISHED'}


class SimpleTool(bpy.types.PropertyGroup):
    my_enum: bpy.props.EnumProperty(
        name="My Enum",
        description="Sample enumeration",
        items=[
            ("OP1", "Option 1", ""),
            ("OP2", "Option 2", ""),
            ("OP3", "Option 3", ""),
        ]
    )

    my_string: bpy.props.StringProperty(
        name="My String"
    )

    my_object: bpy.props.PointerProperty(
        name="My Object",
        type=bpy.types.Object
    )


class SimplePanel(bpy.types.Panel):
    bl_label = "Simple Panel"
    bl_idname = "OBJECT_PT_simple"
    bl_space_type = 'VIEW_3D'   
    bl_region_type = 'UI'        
    bl_context = "objectmode"   
    bl_category = "Custom Input" 

    def draw(self, context):
        layout = self.layout

        scene = context.scene
        tool = scene.simple_tool

        layout.prop(tool, "my_enum")
        layout.prop(tool, "my_string")
        layout.prop(tool, "my_object")

        layout.operator("object.simple_operator")


def register():
    bpy.utils.register_class(SimpleOperator)
    bpy.utils.register_class(SimpleTool)
    bpy.utils.register_class(SimplePanel)
    bpy.types.Scene.simple_tool = bpy.props.PointerProperty(type=SimpleTool)


def unregister():
    bpy.utils.unregister_class(SimpleOperator)
    bpy.utils.unregister_class(SimpleTool)
    bpy.utils.unregister_class(SimplePanel)
    del bpy.types.Scene.simple_tool


if __name__ == "__main__":
    register()

インストール方法

上のコードをメモ帳などにコピペして、ファイルの拡張子を.pyにします。

Blenderの Edit > Preferences… を開きます。

Add-ons の「Install…」をクリックします。

保存したスクリプトを選択して「Install Add-on」ボタンを押します。

新規アドオンが一覧に表示されるので、チェックを入れると使えるようになります。

その横の三角アイコンをクリックするとアドオンの情報が表示されます。

使い方

3DビューポートでNキーを押してサイドバーを表示させると、新しいタブができていて、パネルが表示されます。

ドロップダウンから列挙体の値を選択できます。

その下のテキストフィールドに文字列を入力できます。

ボタンを押すと、この文字列がシステムコンソールに表示されます。

また、3つ目のフィールドにはドラッグアンドドロップでオブジェクトの参照を設定できます。ドロップダウンメニューやスポイトも使えます。

これで、Blenderで簡単なアドオンを作ることができました。

ChatGPT

今回もChatGPT(GPT-4)にスクリプトを書いてもらいました。

Blenderのアドオンを作りたいです。インストールして使うタイプです。とりあえず、どこかにカスタムパネルを作って、テキストと列挙体を入力できるようにしてください。それからオブジェクトをドラッグアンドドロップできるフィールドを作ってください。また、ボタンを1つつくって、押すと、print関数でテキストフィールドに入力した文字列を表示できるようにしてください。

指示をするとすぐにスクリプトが作られましたが、fake_module: addon missing ‘bl_info’ gives bad performance!:…というエラーがでました。エラーをそのまま送ると、以下の順に一つずつ修正された後に完成版のスクリプトを得ました。

  1. bl_infoを追加
  2. 互換性のあるBlenderバージョンを修正
  3. 「# -*- coding: utf-8 -*-」を追加
  4. 表示場所をプロパティから3Dビューポートのサイドバーに変更
  5. bl_categoryを修正

インストール方法も具体的に説明してくれました。

アドオンをインストールする手順は以下の通りです。

  1. Pythonスクリプトをテキストエディタ(メモ帳など)にコピー&ペーストします。
  2. ファイルを .py 拡張子で保存します。この時、ファイル名は custom_input_panel.py とします。
  3. Blenderを起動します。
  4. 上部のメニューから Edit > Preferences を選択します。
  5. 開いたウィンドウで左側のメニューから Add-ons を選択します。
  6. 右上の Install… ボタンをクリックします。
  7. ファイルブラウザが開いたら、先程保存したPythonスクリプト (custom_input_panel.py) を選択し、 Install Add-on ボタンをクリックします。
  8. Add-ons リストに新しいエントリが表示されるはずです。検索ボックスを使って新しく追加されたアドオン(この場合は “Custom Input Panel”)を探します。
  9. アドオンの左側にあるチェックボックスをクリックしてアドオンを有効化します。
これらの手順を正しく実行しても問題が発生する場合、Pythonスクリプト自体に問題があるかもしれません。エラーメッセージやBlenderのコンソールログなどを参照して、詳細な情報を提供していただければと思います。

次は、このアドオンにもう少し複雑な処理を追加してみます。

コメントを残す

メールアドレスが公開されることはありません。