#現象
V-RayをレンダリングエンジンでDeadlineやBackburnerといったディスパッチを経由して、Mayabatchでレンダリングをした際にメモリーが開放されない。
レンダリングマシン環境
-
Windows7pro 64bit
-
RAM : 32GB
-
CPU :Corei7
-
V-Ray 3.x
-
V-Ray 3.30.01 for Maya2016
-
V-Ray 3.30.01 for Maya2015
-
V-Ray 3.30.01 for Maya2014
-
Maya
- Maya2016
- Maya2015 SP6
- Maya2015 SP4
-
Deadline 7.22.02
#レンダリングプロセスのおさらい
Maya上でのV-Rayのディスパッチャを利用したレンダリングプロセスとしては...
1.Deadline/Backburnerがシーンパスなどを合わせてジョブをサブミットする。
2.レンダーノードのmayabatch.exeがシーン(.ma/mb)ファイルを読み込む。
3.MayaがシーンファイルをV-Rayのネイティブシーンファイル(.vrscene)に変換する。
4.vray.exeに変換したシーンを転送。
5.リファレンスしているファイルを転送。
6.V-Rayレンダリング
7.Mayaにレンダリングしたバッファ(.vrimage)をV-Ray VFBに転送、または任意のフォーマットで指定のフォルダに書き出す。
V-Rayに限らずディスパッチャー使った大体のレンダリングはざっくりとはこの7工程になります。
ここでメモリーを利用する工程としては2,3,5,6,7です。
- mayabatch.exeがシーン(.ma/mb)ファイルを読み込む
- ネイティブシーンファイルの変換
- レンダリングしたバッファ
これらの何処かで問題が起きていると予測されます。
#今までの推測と対応
前々から睨んでいたところとしては「2.mayabatch.exeがシーン(.ma/mb)ファイルを読み込む」「5.リファレンスしているファイルを転送。」じゃないかと思っていました。
Mayaがレンダリング終了した時点でもバックグラウンドで起動し続けたりリファレンスしたファイルメモリーを保持し続けてるのだと思っていなのです。
しかし長期的にマシンを起動し続けていると、どんどんメモリーを消費していくのですが「タスクマネージャー」などではmayabatch.exeは確認できないためマシンごと再起動する他ありませんでした。
#おかしい様子
もう一度「タスクマネージャー」をよく見てみるとずっとvray.exeが起動しているのが確認できました。
V-RayにはDistribution Renderingという分散レンダリングのために、「Register V-Ray render slave as a service」というサービス設定が可能です。
これはマシン起動時にDistribution Rendering用にvray.exeをサーバーモードで起動させるためのものになります。
従来の僕の考えでは、Maya側から呼び出すV-RayとDistribution Rendering用のvray.exeは別物だと思っていました。
しかし、どうやらそうではなくこのDistribution Rendring用のvray.exeがバッチレンダリングで走らせていた際のvrsceneを何らかの原因でキャッチしてしまったようです。
#検証でわかった現象:追記2016/05/17
このDistribution Rendring用のvray.exeは例えばMaya2015でレンダリングした場合、それ以外のMayaバージョンのSpwnerとして起動しているvray.exeでも保持し続けて利用なので、複合的な問題が絡んでいそうです。
#解決方法
そして、このvray.exeはそのままサービスとして起動はされ続けるので、そこでメモリーを消費し続けていたというのが、ことの全貌のようです。
結論としてはこの問題の解決として、レンダリングマシンで「Remove V-Ray render slave as a service」を実行してvray.exeをサービス・プロセスから終了することで解決しました。
この問題に関してDistribution Rendering用のサーバーと通常のバッチレンダリングのサーバーが同一の場合に発生し易い問題になりますので、代理店経由にて現象を報告して修正依頼等を開発元に申請してもらう予定です。
若干モヤモヤしますが、とりあえずDistributionとバッチレンダリングを併用することはないので、当面はこの形で運用しようと思います。