Mayaのコマンド ライン レンダラを使用したバッチレンダリングのしかたを紹介したことがありますが、今回はその応用編として、バッチコマンドを使用してMayaのバッチレンダリングを少し使いやすくする方法について書いてみます。
MayaはメジャーバージョンやSPごとに細かな不具合が多く発生します。このためコマンド ライン レンダラを使って各Mayaバージョンでレンダリングを実行し、どのバージョンからバグったか調べたりします。
しかし、Mayaは基本的にデザイナーに優しい動作をしないため、Maya標準動作が不便に思うことが多々あります。そこでバッチコマンドを使用して、Mayaのバッチレンダリングを少し使いやすくする方法を紹介したいと思います。
以下は指定したファイルをレンダリングする、基本的なバッチファイルの記述です。これを元に使いやすくしていきます。
"C:\Program Files\Autodesk\Maya2018\bin\Render.exe" -r sw -s 1 -e 120 -of png -log "C:\BatchFolder\Output\Cut001.log" -rd "C:\BatchFolder\Output" "C:\BatchFolder\Cut_001.ma"
バッチ実行後にウィンドウを閉じないようにするコマンド
cmd /k
通常コマンドプロンプト ウィンドウは、バッチファイルのコマンドを実行すると自動的にウィンドウが閉じます。バッチファイルの最後にコマンドを追加すると、コマンドプロンプト ウィンドウが閉じなくなります。
基本的になくてもよいですが、バッチの実行結果を確認したい時に使用します。バッチファイルが意図した通り動作するまではコマンドを入れておくとよいです。
"C:\Program Files\Autodesk\Maya2018\bin\Render.exe" -r sw -s 1 -e 120 -of png -log "C:\BatchFolder\Output\Cut001.log" -rd "C:\BatchFolder\Output" "C:\BatchFolder\Cut_001.ma"
cmd /k
変数 コマンド
set
変数を設定するコマンドです。
変数とは「値」や「文字列」を出し入れできるアイテムボックスみたなもので、「値」や「文字列」に好きな名前をつけてバッチファイル内で使うことができるようになります。
例えばログファイルと画像ファイルを同じ名称にしたいとき、バッチファイル内を2箇所書き換えるのが面倒です。そこでバッチファイル内で変数を定義し「set FileName=Cut001」、置換したい箇所に変数の展開「%FileName%」を記述します。下の例では変数「FileName」を「Cut001」という文字列に置き換えられてバッチが実行されます。
set FileName=Cut001
"C:\Program Files\Autodesk\Maya2018\bin\Render.exe" -r sw -s 1 -e 120 -of png -log "C:\BatchFolder\Output\%FileName%.log" -rd "C:\BatchFolder\Output\%FileName%" "C:\BatchFolder\Cut_001.ma"
レンダリングに使用するシーンファイルなど、書き換える頻度が高いものを変数として使用すると便利です。
set MayaFile=BatTest.ma
set FileName=Cut001
"C:\Program Files\Autodesk\Maya2018\bin\Render.exe" -r sw -s 1 -e 120 -of png -log "C:\BatchFolder\Output\%FileName%.log" -rd "C:\BatchFolder\Output\%FileName%" "C:\BatchFolder\%MayaFile%"
カレントディレクトリ コマンド
%~dp0
バッチファイルのあるディレクトリを指定するコマンドです。
バッチファイルとMayaファイルを同じディレクトリで管理して使用するとき、画像ファイルの出力先のパスを毎回書き換えるのは面倒です。相対パスで記述しておけばパスを書き換える必要がなくなって便利です。
例えば下の画像のようにバッチファイルとMayaファイルを同じディレクトリに入れて使用するとします。
絶対パスでは「C:\BatchFolder\Cut_001.ma」のような記述になりますが、相対パスでは「%~dp0\Cut_001.ma」で済みます。
set MayaFile=Cut_001.ma
set FileName=Cut001
"C:\Program Files\Autodesk\Maya2018\bin\Render.exe" -r sw -s 1 -e 120 -of png -log "%~dp0\%FileName%\%FileName%.log" -rd "%~dp0\%FileName%" "%~dp0\%MayaFile%"
フォルダ作成 コマンド
mkdir
フォルダを作成するコマンドです。
Mayaは画像の出力先のディレクトリがなかった場合、自動的にフォルダを作成してくれます。しかしログ作成「-log」はフォルダを作成してくれません。このためログファイルを出力する場合はあらかじめフォルダを作成する必要があります。
下の例では変数を使用してフォルダを作成してます。
set MayaFile=BatTest.ma
set FileName=Cut001
mkdir %FileName%
"C:\Program Files\Autodesk\Maya2018\bin\Render.exe" -r sw -s 1 -e 120 -of png -log "%~dp0\%FileName%\%FileName%.log" -rd "%~dp0\%FileName%" "%~dp0\%MayaFile%"
ファイル削除コマンド
del
ファイルを削除するコマンドです。
ログ作成は「-log」は、レンダリングを繰り返すたびファイルにログを追加し続けます。私の場合は最新のログしか必要ないので、レンダリング前にログファイルを削除します。
set MayaFile=BatTest.ma
set FileName=Cut001
mkdir %FileName%
del %FileName%\%FileName%.log
"C:\Program Files\Autodesk\Maya2018\bin\Render.exe" -r sw -s 1 -e 120 -of png -log "%~dp0\%FileName%\%FileName%.log" -rd "%~dp0\%FileName%" "%~dp0\%MayaFile%"
バッチファイルを参照する
call
バッチファイルから別のバッチファイルを呼び出すコマンドです。
例えばMayaのバージョンを変数で管理したいとき以下のように記述します。Mayaのバージョンが多くなると見にくくなると思います。
set Maya2016=C:\Program Files\Autodesk\Maya2016.5\bin
set Maya2017=C:\Program Files\Autodesk\Maya2017\bin
set Maya2018=C:\Program Files\Autodesk\Maya2018.5\bin
set Maya2019=C:\Program Files\Autodesk\Maya2019\bin
set Maya2020=C:\Program Files\Autodesk\Maya2020\bin
set MayaVersion=2019
set MayaFile=BatTest.ma
set FileName=Cut001
call set MayaVersionPath=%%Maya%MayaVersion%%%
mkdir %FileName%
del %FileName%\%FileName%.log
"%MayaVersionPath%\Render.exe"-r sw -s 1 -e 120 -of png -log "%~dp0\%FileName%\%FileName%.log" -rd "%~dp0\%FileName%" "%~dp0\%MayaFile%"
Mayaのパスだけ別のバッチファイル「MayaPath.bat」に記述し、このバッチファイルを他のバッチファイルから参照することができます。
set Maya2016=C:\Program Files\Autodesk\Maya2016.5\bin
set Maya2017=C:\Program Files\Autodesk\Maya2017\bin
set Maya2018=C:\Program Files\Autodesk\Maya2018.5\bin
set Maya2019=C:\Program Files\Autodesk\Maya2019\bin
set Maya2020=C:\Program Files\Autodesk\Maya2020\bin
「call」を使用して他のバッチファイルを指定します。
call C:\BatchFolder\MayaPath.bat
set MayaVersion=2019
set MayaFile=BatTest.ma
set FileName=Cut001
call set MayaVersionPath=%%Maya%MayaVersion%%%
mkdir %FileName%
del %FileName%\%FileName%.log
"%MayaVersionPath%\Render.exe"-r sw -s 1 -e 120 -of png -log "%~dp0\%FileName%\%FileName%.log" -rd "%~dp0\%FileName%" "%~dp0\%MayaFile%"
Mayaのパスを分けるのはバッチファイルが長くなるのを避けることができることの他に、将来的にMayaのバージョンが増えた場合に、ファイルの書き換えが1ファイルの編集だけで済むというメリットもあります。考え方としては3Dソフトのリファレンス機能と同じです。
バッチファイル完成!これでバッチファイルの使い勝手がよくなりました。バッチコマンドを使いこなせば、フォルダ内の全てのMayaファイルを全てレンダリングするようなこともできます。
個人的にはバッチファイルやCUIは苦手なので使いたくないのですが、Mayaはスクリプトやらコマンドプロンプトやら色々知ってること前提のソフトなので、GUIベースのソフトで育った人には辛い。