はじめに
Blender関連のブログを書いている時、微妙に値を変えてレンダリングをして違いを見ることがよくあります。
その時レンダリングしたイメージにその時の設定を表示させたいと思ったらできそうだったのでメモ
参照元
任意の値をレンダースタンプに表示するには?
How to show render-stamp for arbitrary values?
Is it possible to take arbitrary properties and display them in the render stamp as some other software do. (Click the image for larger version)
仕組み
そもそもBlenderにはOutput Properties タブに Burn Into Image というチェックが有り
Metadataでチェックを入れたものや、Noteに記載した内容はレンダリング時に焼き付けてくれますね。
Noteという項目には自由な文言を入れることができます。しかしこのパネル上では改行はできません。
このNoteという項目に Python から値を送れば改行もできるようなので、この記事はその方法の紹介です。
Script から render stamp を登録する
import bpy
def stamp_set(scene):
note = "Samples: {}n".format(scene.eevee.taa_render_samples)
note += "File format: {}n".format(scene.render.image_settings.file_format)
note += "Version:{}".format(bpy.app.version_string)
# 上記で作成した note の内容をMetadataの Note に入力する
scene.render.stamp_note_text = note
# レンダリング前に実行する処理として登録
bpy.app.handlers.render_pre.append(stamp_set)
Code language: PHP (php)
- 上記のスクリプトを一度実行すればハンドラーに登録されレンダリング前に常に呼ばれるようになります
- 他のBlendファイルを開いたり、Blenderを閉じるとハンドラー(一番下の行で登録したもの)は削除されます
- つまり再度関数を実行するまで焼き付けることはなくなります
- 上記のスクリプトは参照元をほんの少し変えています。(Cycles用だったのをEevee用にして冗長だが簡便化)
- レンダリングしたときにNoteとBurn Inにチェックが入っていれば stamp_set で作成したテキストがレンダリング時に焼き付けられます
グローバルスタンプ(任意のファイルのレンダーに適用)
上でも少し書きましたが、ハンドラーは別のファイルを開くと削除されます。なので別ファイルで同じような内容の文言を焼き付けたい場合は、そのファイルにスクリプトを移植して実行する必要があります。
別のファイルを開いても削除されない特殊なハンドラーがあります
import bpy
@bpy.app.handlers.persistent
def stamp_set(scene):
note = "Samples: {}n".format(scene.eevee.taa_render_samples)
note += "File format: {}n".format(scene.render.image_settings.file_format)
note += "Version:{}".format(bpy.app.version_string)
# 上記で作成した note の内容をMetadataの Note に入力する
scene.render.stamp_note_text = note
# レンダリング前に実行する処理として登録
bpy.app.handlers.render_pre.append(stamp_set)
Code language: PHP (php)
- stamp_set 関数の上の
@bpy.app.handlers.persistent
を追加したのみです - 別のファイルを開いてもハンドラーは削除されませんが、別のファイルで焼き付けたい場合はNoteとBurn into Imageのチェックは入っている必要があります
- デフォルトでは入っていません。
- 気に入った場合はStartup File に保存しておきましょう
- Blender を閉じればハンドラーは削除されますので起動ごとに行う必要はあります
- 起動時に勝手に登録されるようにすることもできますがあまり必要に思わないため作成していません。
- 他の項目の値が欲しい場合はメモ欄にパスの取得方法を記載していますので参考にしてください
メモ
取りたい値のパス
値を取得したい項目の上にマウスカーソルを持っていき確認する。
例えば Frame End のパスを知りたければマウスカーソルを Frame End に持っていけばメッセージがポップアップする
尚、上記のポップアップは設定のTooltipが有効になっている必要があります
ハンドラーについて
ハンドラーは何らかのイベント発生をトリガとして任意の処理を行いたいときに使うようです。
Application Handlers (bpy.app.handlers) - Blender Python API
- bpy.app.handlers.depsgraph_update_post
- depsgraph 更新後
- depsgraph とは Dependency Graph(依存関係グラフ)の事を指す模様
- bpy.app.handlers.depsgraph_update_pre
- depsgraph 更新前
- depsgraph とは Dependency Graph(依存関係グラフ)の事を指す模様
- bpy.app.handlers.frame_change_post
- フレームチェンジ後
- bpy.app.handlers.frame_change_pre
- フレームチェンジ前
- bpy.app.handlers.load_factory_preferences_post
- 工場(デフォルト)設定ロード後
- bpy.app.handlers.load_factory_startup_post
- 工場(デフォルト)設定ロード前
- bpy.app.handlers.load_post
- 新しい Blend ファイルを読み込んだ後
- bpy.app.handlers.load_pre
- 新しい Blend ファイルを読み込む前
- bpy.app.handlers.redo_post
- redo後
- bpy.app.handlers.redo_pre
- redo前
- bpy.app.handlers.render_cancel
- レンダリングキャンセル時
- bpy.app.handlers.render_complete
- レンダリング完了時
- bpy.app.handlers.render_init
- レンダリングジョブの初期化時
- bpy.app.handlers.render_post
- レンダー後
- bpy.app.handlers.render_pre
- レンダー前
- bpy.app.handlers.render_stats
- レンダリング統計表示時
- bpy.app.handlers.render_write
- レンダーフレーム書き込み後
- bpy.app.handlers.save_post
- ファイル保存後
- bpy.app.handlers.save_pre
- ファイル保存前
- bpy.app.handlers.undo_post
- undo前
- bpy.app.handlers.undo_pre
- undo後
- bpy.app.handlers.version_update
- ? on ending the versioning code
- bpy.app.handlers.persistent
- デコレーター。新しいファイルが開かれてもハンドラーを削除しないようにする