ここでは、バッチレンダリングを効率的に、簡単な操作で行なうことができるようなツールを作ってみましょう。
Maya において、バッチレンダリングを実行するときは、
メモリの有効利用という面と、
Maya だけではできない処理も行なうことができるので、
コマンドラインからレンダリングした方が便利で効率的なことがあります。
コマンドラインからのレンダリングには Render コマンドを使用しますが、
複数のシーンをまとめてレンダリングする場合には、
Windows ではバッチファイル、
Linux などの UNIX 系 OS ではシェルスクリプトなどを作成して、
レンダリングを実行します。
このバッチファイルやシェルスクリプトなどは、
通常、テキストエディタによって作成します。
これらの作成は、決して難しいものではないのですが、
Maya 上からバッチファイル・シェルスクリプトを作成できようにしておくと、
より手軽にレンダリングが実行できるでしょう。
ここでは、以下のような MEL スクリプトの作成を目標にしてみましょう。
2. のスクリプトを利用してシーンファイル名を読み込み、 3. のスクリプトでシーンファイル名を変更して、 1. のスクリプトで変更したシーンファイル名を書き込むという MEL スクリプトが最終的な目標になります。
MEL において、ファイルからデータの入出力を行なう場合の手順に付いて解説します。
ファイルの入出力は、どちらの場合も以下のような手順で行います。
まず、レンダリングするためのバッチファイルを、
ファイルに書き出すプロシージャー renderScript1 と、
そのファイルに書き込まれているデータを読み出すプロシージャー renderScript2 を作ってみましょう。
ここで作成する 2 つのスクリプトは今回の目標で説明した 1. と 2. にあたるものですが、
目標のスクリプトとしては未完成なものです。
目標を達するための改良は練習問題で行ってゆきます。
global proc renderScript1()
{
string $scenes[] = {"test1.mb", "test2.mb"};
string $myRenderBat = "Z:/デスクトップ/myrender.bat";
int $fp = `fopen $myRenderBat "w"`;
if($fp == 0)
{
warning ($myRenderBat + " can not Open\r\n");
return;
}
fprint $fp "Z:\r\n";
fprint $fp "cd Z:/myDocument/maya/projects/default/scenes\r\n";
for($f in $scenes)
{
fprint $fp ("Render " + $f + "\r\n");
}
fclose $fp;
}
Z:
cd Z:/myDocuments/maya/projects/default/scenes
Render test1.mb
Render test2.mb
global proc renderScript2()
{
string $scenes[];
string $myRenderBat = "Z:/デスクトップ/myrender.bat";
int $fp = `fopen $myRenderBat "r"`;
if($fp == 0)
{
warning ($myRenderBat + " can not Open\n");
return;
}
int $i = 0;
while(!`feof $fp`)
{
$scenes[$i] = `fgetword $fp`;
$i++;
}
fclose $fp;
for($f in $scenes)
{
print ($f + "\n");
}
}
global proc renderScript1()
string $files[] = {"test1.mb", "test2.mb"};
string $myRenderBat = "Z:/デスクトップ/myrender.bat";
int $fp = `fopen $myRenderBat "w"`;
if($fp == 0)
warning ($myRenderBat + " can not Open\n");
return;
fprint $fp "Z:\r\n";
fprint $fp "cd Z:/myDocument/maya/projects/default/scenes\r\n";
for($f in $files)
{
fprint $fp ("Render " + $f + "\r\n");
}
fclose $fp;
global proc renderScript2()
string $scenes[];
string $myRenderBat = "Z:/デスクトップ/myrender.bat";
int $fp = `fopen $myRenderBat "r"`;
if($fp == 0)
warning ($myRenderBat + " can not Open\n");
return;
int $i = 0;
while(!`feof $fp`)
$scenes[$i] = `fgetword $fp`;
$i++;
fclose $fp;
for($f in $scenes)
{
print ($f + "\n");
}
Z:
cd Z:/myDocuments/maya/projects/default/scenes
Render test2.mb
Render test3.mb
if(endsWith($str, ".mb"))
{
// $str が .mb で終わる単語の場合はここにある MEL コマンドを実行します。
}
global proc string [] renderScript5()
string $scenes2[];
return $scenes2;
string $files = renderScript5();
renderScript3($files);
さらに、この 1. 2. 3. のスクリプトを GUI を使って、 マウスの操作のみでできるようにすると便利でしょう。