以下の内容はhttps://redhologerbera.hatenablog.com/entry/2024/09/01/220223より取得しました。


Blenderで筆者にとって便利なアドオンを作る その①レンダリング設定の保存、読み込み

本日はBlender枠です。

〇環境

・Blender4.1

・Windows11PC

レンダリング設定のGUI

今回は以前作成した外部にレンダリング設定を保存しておいて読み込むスクリプトGUIを作成してより使いやすくしていきます。

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

Blenderでシンプルなコンソールを実装するPythonコードは以下のようになります。

bl_info = {
    "name": "HoloMotoUtility",
    "blender": (3, 0, 0),
    "category": "Object",
    "version": (1, 0, 0),
    "author": "HoloMoto",
    "description": "An addon to ensure music21 library and its dependencies are loaded",
    "location": "View3D > Tool Shelf",
    "warning": "",
    "doc_url": "",
}

import bpy

# Define a new operator (action or function)
class HelloWorldOperator(bpy.types.Operator):
    bl_idname = "object.hello_world"
    bl_label = "Hello, World!"

    def execute(self, context):
        self.report({'INFO'}, "Hello, World!")
        return {'FINISHED'}

# Define a new UI panel
class HelloWorldPanel(bpy.types.Panel):
    bl_label = "My Panel"
    bl_idname = "OBJECT_PT_hello_world"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = 'HoloMotoUtilis'

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

        # Add the operator to the panel
        layout.operator("object.hello_world")

# Registration
def register():
    bpy.utils.register_class(HelloWorldOperator)
    bpy.utils.register_class(HelloWorldPanel)

def unregister():
    bpy.utils.unregister_class(HelloWorldOperator)
    bpy.utils.unregister_class(HelloWorldPanel)

if __name__ == "__main__":
    register()

https://redhologerbera.hatenablog.com/entry/2023/08/23/151320

こちらをベースにレンダリング設定の保存の処理を加えていきます。

bl_info = {
    "name": "HoloMotoUtility",
    "blender": (3, 0, 0),
    "category": "Object",
    "version": (1, 0, 0),
    "author": "HoloMoto",
    "description": "",
    "location": "View3D > Tool Shelf",
    "warning": "",
    "doc_url": "",
}

import bpy
import json

# Define a new operator (action or function)
class HelloWorldOperator(bpy.types.Operator):
    bl_idname = "object.hello_world"
    bl_label = "Hello, World!"

    def execute(self, context):
        self.report({'INFO'}, "Hello, World!")
        
        return {'FINISHED'}


class OBJECT_OT_save_render_settings(bpy.types.Operator):
    bl_idname = "object.save_render_settings"
    bl_label = "Save Render Settings"

    def execute(self, context):
        render_settings = {
            "engine": bpy.context.scene.render.engine,
            "device": bpy.context.scene.cycles.device,
            "compute_device_type": bpy.context.preferences.addons['cycles'].preferences.compute_device_type,
            "samples": bpy.context.scene.cycles.samples,
            "preview_samples": bpy.context.scene.cycles.preview_samples,
        }
        # ファイルに保存
        file_path = "C:/Users/seiri/Documents/Development/BlenderProject/RenderSettings/render_settings.json"
        with open(file_path, 'w') as f:
            json.dump(render_settings, f, indent=4)

        self.report({'INFO'}, f"Render settings saved to {file_path}")
        return {'FINISHED'}

# Define a new UI panel
class HelloWorldPanel(bpy.types.Panel):
    bl_label = "Utilites"
    bl_idname = "OBJECT_PT_hello_world"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = 'HoloMotoUtilis'

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

        # Add the operator to the panel
        layout.operator("object.save_render_settings")
        
# Registration
def register():
    bpy.utils.register_class(HelloWorldOperator)
    bpy.utils.register_class(HelloWorldPanel)
    bpy.utils.register_class(OBJECT_OT_save_render_settings)

def unregister():
    bpy.utils.unregister_class(HelloWorldOperator)
    bpy.utils.unregister_class(HelloWorldPanel)
    bpy.utils.unregister_class(OBJECT_OT_save_render_settings)

if __name__ == "__main__":
    register()

これは既存のレンダリング設定の保存処理をクラスとして再定義しています。

具体的にはbpy.types.Operatiorを使用してラベルとidを定義しています。

class OBJECT_OT_save_render_settings(bpy.types.Operator):
    bl_idname = "object.save_render_settings"
    bl_label = "Save Render Settings"

    def execute(self, context):
    ・・・既存の処理

 これによって次のようにGUIレンダリング設定の保存が行えるようになりました。

 次回は保存パスを任意に設定できるようにしていきます。

本日は以上です。




以上の内容はhttps://redhologerbera.hatenablog.com/entry/2024/09/01/220223より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14