Blenderはコマンドで操作をすることができますが、
複数のコマンドを連続で実行できるなら、より多くのことができると思いませんか?
それを実現するのが、バッチ処理です。
たとえば、”PNGとJPEGの両方の出力結果が欲しい!”という場合でも、
その2つのコマンドをまとめて書いておけば、1発で欲しい結果が全て手に入ります。
1つのコマンドでできることに限界を感じてきたら、
その先としてバッチ処理の作成方法をチェックしていきましょう!
1度書いたら、何度でも使えるので効率化のためにもおススメです!
バッチ処理とは?
バッチ処理とは、複数のファイルやタスクを一括で処理する技術です。
Blenderにおいては、複数の.blendファイルを一度にレンダリングしたり、
共通の操作を複数ファイルに適用する際に利用できます。
これにより、時間を節約し、作業の効率化を図ることができます。
繰り返す作業はバッチ処理にしてしまおう!
定期的に同じような作業を繰り返すことはありませんか?
そんな作業にこそ、バッチ処理がおススメです。
たとえば、修正した後は必ず指定された画像形式で出力しなければならなかったり、
作成するモデルには全部同じ設定をしないといけなかったりなど。
このように繰り返し行う作業をバッチ処理にすることで、
手作業がなくなる分の効率化と人的ミスをなくした正確な作業が実現できます。
3回以上同じ作業をする予定があるなら、
バッチ処理を作る検討をしてみましょう!
Blenderのバッチ処理でできる事の例
バッチ処理を使うと、Blenderでどんなことができるのか、例を見ていきましょう。
以下に3点紹介します。
- 複数ファイルのレンダリング自動化
ファイルごとにBlenderを開く手間がなく、まとめてレンダリングが可能です。
- 複数の出力形式を一括出力
画像ならPNGやJPEG、モデルならFBXやOBJなどの
異なる出力形式をまとめて出力することができます。
- パラメータの一括変更
さまざまなパラメータを一括変更することが可能です。
ファイルには保存せず、一時的なパラメータ変更でテストすることもできます。
たとえば、解像度やカメラ位置を変更すれば、
さまざまなメディアに向けた画像のパターンも作成できるでしょう。
上記以外にも、多くの処理をまとめることができるため、
作業の効率化の面では非常に役立ちます。
今回はPythonとbat/シェルスクリプトでの書き方を紹介します。
手法1:Pythonのバッチ処理
Pythonでは、Blenderのモジュールを追加することで、
Blender内の操作を行うことが可能です。
たとえば、モデリングやレンダリングの設定など、
Blenderの画面上でボタンを押して実行する処理の多くは、
Pythonからも実行できるため、とても自由度の高い方法と言えるでしょう。
その他のできる事に興味があるかたは、以下の記事を確認してみましょう!
ここでは、Pythonでフォルダ内の.blendファイルをレンダリングして、
PNGとJPEG形式で出力するバッチ処理を例として作成していきます。
【プログラム】C:\Blender\sample_render\
以下の全ての.blendファイルから、
PNGとJPEGを出力するバッチ処理です。
import bpy
import os
# Blenderファイルが格納されているディレクトリ.
blend_directory = r"C:\\Blender\\sample_render\\" # 実際のパスに置き換えてください.
# 出力ディレクトリ
output_directory = r"C:\\Blender\\sample_render\\output\\" # 実際のパスに置き換えてください.
# ディレクトリ内のすべての.blendファイルを処理.
for filename in os.listdir(blend_directory):
if filename.endswith(".blend"):
# .blendファイルのパス.
blend_filepath = os.path.join(blend_directory, filename)
# .blendファイルを開く.
bpy.ops.wm.open_mainfile(filepath=blend_filepath)
# PNGでレンダリングして保存.
bpy.context.scene.render.image_settings.file_format = 'PNG'
bpy.context.scene.render.filepath = os.path.join(output_directory, filename.replace(".blend", ".png"))
bpy.ops.render.render(write_still=True)
# JPEGでレンダリングして保存.
bpy.context.scene.render.image_settings.file_format = 'JPEG'
bpy.context.scene.render.filepath = os.path.join(output_directory, filename.replace(".blend", ".jpeg"))
bpy.ops.render.render(write_still=True) # 保存.
print(f"Rendered and saved: {output_directory}")
【実行方法】
実行は、Blender画面を立ち上げない-b
とバッチ処理を記載したpythonファイルを指定します。
blender -b --python render_batch.py
今回は以下のようなファイル構成で実行していきます。
sample_render1~3.blenderはそれぞれ無色・青・赤の立方体だけを配置したファイルです。
【実行結果】
コマンドを実行中…
実行終了後に出力場所を確認します。
各blendファイルのPNG/JPEGファイルが出力されていることが確認できますね。
このように、複数のファイルに適用する処理や
PNGとJPEGといった別の出力処理を1つの処理にまとめられる点がバッチ処理の良い点です。
1度書いてしまえば、
同じ処理を何回でも呼び出せる点も非常に良い点です!
手法2:batとシェルスクリプトのバッチ処理
Python以外にもバッチ処理に使用できるプログラムを紹介します。
それは、WindowsやLinux系OSで最初から利用できる
batとシェルスクリプトでの書き方です。
Pythonほど多くのことはできませんが、
blenderのコマンドを実行するパラメータを変更するなどのサポート面で活用できます。
さっそく、Pythonの例と同様にPNGとJPEGをまとめて出力する例で確認していきましょう。
@echo off
set "BLENDER_FOLDER=C:\Blender\sample_render\"
set "OUTPUT_FOLDER=C:\Blender\sample_render\output\"
for %%f in ("%BLENDER_FOLDER%\*.blend") do (
REM PNG形式でレンダリング
blender -b "%%f" -o "%OUTPUT_FOLDER%\%%~nf_" -F PNG -x 1 -f 1
REM JPEG形式でレンダリング
blender -b "%%f" -o "%OUTPUT_FOLDER%\%%~nf_" -F JPEG -x 1 -f 1
)
echo Complete Rendering
pause
【実行方法】
render_batch.batをダブルクリックするだけです。
超簡単ですね。
コードはとても分かりづらいですねっ!
実行コマンドだけはPythonよりも簡単なので、
以下のように、具体的な処理はPythonで作成し、実行はbat/シェルスクリプトにすると、
両者の良いところだけ使えるでしょう。
#!/bin/bash
blender -b --python render_batch.py
【実行方法】
render_batch.batをダブルクリック
毎回 blender~ –python~とか書きたくない人には良い使い方ですね!
今から習得するならPythonのスクリプトがおすすめ!
batとシェルスクリプトも紹介はしましたが、Pythonで同じ処理を書くことはできます。
そのため、今から習得する場合はPythonだけに集中した方が、
理解が進みやすく、Blender以外に使用できるPythonのコード学習にもつながります。
batとシェルスクリプトについては、
Blenderに限らず作業を自動化するときに使用することはあるので、
興味があるかたは手を出すのも良いでしょう。
PythonはOSにインストールしないと使えませんが、
batやシェルスクリプトは最初から実行できます。
導入のハードルが低い点は、大きなメリットです。
まとめると、
まずはPython、興味があればbat/シェルスクリプトという進め方がおススメです!
サーバー関係の仕事だと、Linux系のコマンドに触れる機会は多いので、
シェルスクリプトはガンガン使います。
まとめ
今回は、Blenderのバッチ処理について説明していきました。
興味があるかたは、Pythonでの処理の書き方から学んでいくと良しです。
バッチ処理はBlender以外にも、
日々の定型業務を自動化するときにも応用できますし、知っておくメリットは大きいです。
なるべく楽して理想の結果が得られるように、
面倒な作業はどんどんまとめていきましょう!
バッチ処理を作ったあとは、CIなどで定期的に自動で実行できれば、
人の手を離れた完全な自動化になりますね!
おわり