modoのヘッドレスモードを使用したバッチレンダリングの使い方について書いてみたいと思います。
複数のシーンを連続してレンダリングする場合に便利です。
ヘッドレスモードとは
ヘッドレスモードはGUIのないmodoです。WindowsのコマンドプロンプトやOS Xのターミナルを使用してmodoを操作します。GUIがないためメモリが少なく済み、レンダリング中のプレビュー表示がないためレンダリング速度も少し早くなります。
ヘッドレスモードはGUIで使用できるほとんどのコマンドが使用できるので、特定のパラメータを変更してレンダリングすることができて便利です。
ヘッドレスモードのような仕組みはMaya、Max、AfterEffectsなど、アニメーションをレンダリングするソフトには大抵搭載されていて、ネットワークレンダリングなんかに使用されます。
バッチファイルとコマンドファイル
modoではヘッドレスモード用のmodoを起動するバッチファイルと、modoのコマンドを記述したテキストファイルを使用してバッチレンダリングをおこないます。
例えばCut_001.lxo、Cut_002.lxo、Cut_003.lxoのように複数のシーンファイルがあって、全てのシーンをOutputフォルダにレンダリングする場合について書いてみます。
バッチファイル
バッチファイルは拡張子を.batに変えたテキストファイルです。ヘッドレスモード用のmodo_cl.exeのパスと、コマンドファイルへのパスを記述します。今回は.batと同じディレクトリに.txtファイルがあるのでファイル名だけ書いてます。バッチファイルは行ごとにコマンドが実行されるので改行には注意してください。
"C:\Program Files\Foundry\Modo\12.2v1j\modo_cl.exe" < RenderSettingsFile.txt
cmd /k
コマンドファイル
コマンドファイルは拡張子通り普通のテキストファイルです。コマンドファイルにはmodoのコマンドを書いておくと1行ごとに実行されます。
log.toConsole true
log.toConsoleRolling true
scene.open {C:\BatchFolder\Cut_001.lxo}
render.animation {C:\BatchFolder\Output\Cut_001_} PNG16
scene.close
scene.open {C:\BatchFolder\Cut_002.lxo}
@ChangeRenderFrameRange.pl 1 3
render.animation {C:\BatchFolder\Output\Cut_002_} PNG16
scene.close
scene.open {C:\BatchFolder\Cut_003.lxo}
@ChangeRenderFrameRange.pl 1 4
render.res 0 1280
render.res 1 720
render.animation {C:\BatchFolder\Output\Cut_003_} PNG16
scene.close
app.quit
最初の2行はログ出力用のコマンドです。scene.openでファイルを開きrender.animationでレンダリングを実行してscene.closeでファイルを閉じています。render.animationコマンドは引数としてファイルの出力先のパスと出力ファイル名、出力フォーマットを指定しています。
@ChangeRenderFrameRange.pl はmodo標準のレンダリング範囲を変更するスクリプトを使用して、レンダリング範囲を変更する例です。render.resはレンダリング解像度の変更コマンドです。
ファイルパスについて
上の例ではファイルパスがわかりやすいようにドライブ名を含めた「C:\BatchFolder\Cut_003.lxo」のような絶対パスで記述してますが、バッチファイルからの相対パスで指定することもできます。
scene.open {Cut_001.lxo}
render.animation {Output\Cut_001_} PNG16
scene.close
レンダリングの実行
バッチファイルとコマンドファイルの準備ができたら.batファイルをダブルクリックします。modo_cl.exeとコマンドファイルのパスが正しく設定されていれば、コマンドプロンプトが開いてレンダリングの状況が表示されます。レンダリングが終了したらコマンドプロンプト閉じて終了です。
今回は単純にバッチレンダリングの例でしたが、ヘッドレスモードはほとんどのmodoコマンドが使用できます。例えばキャラと背景別々のシーンファイルを1つのシーンに読み込んでレンダリングしたり、複数のファイルのパラメータに同じ編集を加えてファイル保存したり、色々な使い方ができて便利だと思います。
参考
コマンドラインからModoのレンダリング
https://www.pixelfondue.com/blog/2016/11/3/modo-rendering-from-the-command-line
RenderMonkey
バッチレンダリング用のスクリプトも公開されています。元は有料のキットでしたが無料化されました。
https://github.com/9bstudios/mecco_renderMonkey
バッチレンダリングスクリプト
modoを通常通り起動してPythonスクリプトでバッチレンダリングするという物。レンダリングウィンドウで進捗を見たい場合にはいいかもしれません。https://community.foundry.com/discuss/post/747715
コマンドが全然わからない僕でも見よう見まねでバッチレンダリングできました!ありがとうございます。
バッチレンダリングでのネットワークレンダリングができなかったので、もしやりかたご存じでしたらご教示いただけると嬉しいです。
記事が役立ったようでよかったです。
バッチファイル経由だとネットワークレンダリングの実行が上手く動かないのかもしれませんね。
ネットワークレンダリングできる状態のmodo起動して、スクリプトタブで以下のようなバッチスクリプト実行するといいかもしれません。
lx.eval1("scene.open {C:\BatchFolder\Cut01.lxo}")
lx.eval1("@ChangeRenderFrameRange.pl 1 10")
lx.eval1("render.animation {C:\BatchFolder\Output\Cut_001_} PNG16")
lx.eval1("!scene.close")
lx.eval1("scene.open {C:\AAA\Cut02.lxo}")
lx.eval1("@ChangeRenderFrameRange.pl 1 10")
lx.eval1("render.animation {C:\AAA\Output\Cut_002_} PNG16")
lx.eval1("!scene.close")
返信遅くなってすみません。ありがとうございました。
no problem 🙂
いつも有用な情報ありがとうございます。
playblastもバッチ処理できるのでしょうか?
ヘッドレスモードは3Dビューポートが存在しないので、恐らくgl.capture関連のコマンドは使えないと思います。
modo起動してスクリプトタブを使用したバッチ処理なら可能でした。
lx.eval1("scene.open {C:\BatchFolder\Cut_001.lxo}")
lx.eval1("gl.capture filename:{C:\BatchFolder\Cut_001.mov}")
lx.eval1("!scene.close")
lx.eval1("scene.open {C:\BatchFolder\Cut_002.lxo}")
lx.eval1("gl.capture filename:{C:\BatchFolder\Cut_002.mov}")
lx.eval1("!scene.close")
lx.eval1("scene.open {C:\BatchFolder\Cut_003.lxo}")
lx.eval1("gl.capture filename:{C:\BatchFolder\Cut_003.mov}")
lx.eval1("!scene.close")
回答ありがとうございました。