
Blenderは、実はコマンドラインでも動かすことができます。レンダリング命令もできるので、簡易ネットワークレンダリングやバッチレンダリングにぴったりです。
コマンドの例
コマンドはこのような感じになります。Windows, Linuxどちらも共通です。
blender --background -noaudio test.blend --threads 0 --render-output //anim --render-anim
※BlenderへのPATHが通っている前提の記載です。(PATHが通っていない場合は、上記の「blender」とある部分を、C:\Program Files~~などから始まる絶対パスで記述すればOKです)
オプションの解説
よく使うもののみを紹介します。すべてのオプションは、公式マニュアルにあるのでそちらを御覧ください。
-b もしくは –background
バックグラウンド実行(GUIを表示しない)。コマンドラインレンダリングの際は通常これにする。
-noaudio
オーディオシステムを使わない(GUIを起動していないLinuxなどはこれを追記する)。
-t もしくは –threads <スレッド数>
レンダリングに使うCPUスレッド数。0を指定すると、すべての論理スレッドを使う。(8コア16スレッドCPUを使っているとしたら、16になる。)これは無くてもいいが、blendファイルで少なく指定している場合にオーバーライドするために使う。
-o もしくは –render-output <アウトプットのパス+ファイル名>
出力先。指定しない場合は、blendファイルの情報が使用される。
・// がblendファイルの場所基準の相対パス。
・アニメーションの場合、末尾に0000.pngや0000.exrがつく。
したがって、たとえば //render/out とすると、(blendファイルの場所)/render/out0000.exr 、 (blendファイルの場所)/render/out0001.exr 、といった形でファイルが保存されていく。
・#記号を使うことで、その部分を連番扱いにすることも可能。
//render/animation_##_testとすると、animation_01_test.png のように名前がつけられる。#の数がそのままゼロ埋めの桁数になる。
-a もしくは –render-anim
アニメーションレンダリング。blendファイルで定義されたフレームのレンダリングを順番にすべて行う。
-f もしくは –render-frame <フレーム番号>
特定のフレームのみレンダリング。とびとびの値や、連続フレームなどが柔軟に指定できる。
・複数のフレームを指定するときは、コンマで区切る。
例 : –render-frame 1,4,10,20
・あるフレームからあるフレームの間を指定するときは、「..」を使う。
例 : –render-frame 5..10
・上2つを組み合わせた表記も可能。
例 : –render-frame 1,5,10..20,30..40,55,60
・スペースなどを含めないこと(引数の切れ目として認識されてしまう)。
オプション指定の注意点
以上のオプションを書く順番は、ある程度決まっています。ルールは、
blender [引数を取らないオプション] [blendファイル] [引数をとるオプション] [フレーム指定オプション]
となります。
[引数を取らないオプション]
-b(–background)や、-noaudioなど。blenderの起動方法に関わる部分。
[blendファイル]
blendファイルの場所を指定する。
[引数をとるオプション]
上の例では-t(–threads)や-o(–render-output)など。
[フレーム指定オプション]
-a(–render-anim)もしくは-f(–render-frame)を入れる。このオプションは必ず最後にしないといけない。途中に書くと、命令がそこまでだと認識され、後に書いた部分はすべて無視される。
Windowsバッチファイル
Windowsのバッチレンダリングに使える.batファイルを作成してみました。変数を使って、柔軟に変更できるようになっています。
set文は、変数の指定を意味しています。同じ変数の指定文が複数ありますが、一番下にあるものが優先されるので、行の順番を変えることで設定をいじれるようになっています。
また、logファイルに、レンダリングの情報が逐一出力されるようになっています。log=nulにすると、ログを作りません。
%blender%から始まる行を複製して並べれば、複数ファイルを順番にレンダリングするようなものを作れます。
set blender="C:\Software\Blender.81\blender.exe" set log=nul set log="Z:\Web\CGBeginner\log.txt" set blendfile="Z:\Web\CGBeginner\render.blend" set threads=0 set outpath= --render-output //scene1/render set outpath= set frame=--render-frame 359..360 set frame=--render-anim %blender% --background -noaudio %blendfile% --threads %threads% %outpath% %frame% >> %log% 2>&1 rem @echo off echo End of Batch pause
シェルスクリプト(Bash)
Linuxで使うシェルスクリプトも作成しました。中身は.batと同等です。
blender="/home/user/bin/blender2.81/blender"
log="/dev/null"
log="/home/user/log"
blendfile="/home/user/render.blend"
threads=0
outpath="--render-output //scene1/render"
outpath=""
frame="--render-frame 1,3,5"
frame="--render-frame 1..10"
frame="--render-anim"
${blender} --background -noaudio ${blendfile} --threads ${threads} ${outpath} ${frame} >> ${log} 2>&1 &
コメント