これまでNUKE STUDIOのみだったFrame ServerがNUKE 11以降ではNUKEXやNUKEでも使用できるようになりました。設定メモです。
基本的な設定はNUKEのオンラインヘルプに載っているので、それを参考にしました。
Foundry - Rendering Using the Frame Server
https://help.thefoundry.co.uk/nuke/content/comp_environment/rendering/frame_server_renders.html
NUKE STUDIOだけでFrame Serverを使用していた時には、メインワークシステーションがMacで、スレーブがCentOSでした。サーバーはMacの仕様に合わせて、CentOSでも/Volumes以下にマウントしていたため、特に面倒なこともなかったのですが、今回は新たにWindows7のマシンをスレーブに追加してみました。
[追記]Windows7では別途Python(2.7)をインストールしておく必要があります。
スレーブ(Windows7)のコマンド設定
Windowsで使用したスレーブの起動コマンドは:
python.exe "C:\Program Files\Nuke11.1v1\pythonextensions\site-packages\foundry\frameserver\nuke\runframeserver.py" --numworkers=2 --nukeworkerthreads=4 --nukeworkermemory=8096 --workerconnecturl=tcp://192.168.1.199:5560 --nukepath="C:\Program Files\Nuke11.1v1\Nuke11.1.exe" --remap "/Volumes/Projects/,Z:/"
マニュアルにも書いてありますが、各引数をざっと説明すると
--numworkers
起動するNUKEのワーカーです。ここで指定した数だけNUKEのプロセスが起動します。NUKEは単体ではマルチコアを使い切らないことがあるので、ここでコア数と使用状況を見て複数起動するように設定します。
--nukeworkerthreads
これは上記のワーカーで走るレンダリングスレッド数です。「ワーカー数xレンダリングスレッド数」が、CPUのコア数(スレッド数)以内になるのが、ひとつの目安になるかと。
--nukeworkermemory
ワーカー1つあたりの割り当てメモリ(MB)です。ここでは8GBにしてます。
--workerconnecturl
メインワークステーションのURLとポートです。ポート5560は、メインワークステーション、スレーブともに、あらかじめファイアーウォールなどのブロック解除しておきます。
--nukepath
スレーブのマシンにインストールされたNUKEのパス。
--remap
ファイル共有のパスの書き換え設定。異なるOSの場合や同じOSでも共有フォルダのマウント先が異なっている場合には、パスをリマップします。最初にメインワークステーション、次にスレープでのパスをカンマ(,)区切りで記述。スペースは無視されませんので、不要なスペースはなしで。
--useInteractiveLicense
ここでは使用していない引数です。Frame Serverはスレーブにはレンダーライセンスが必要なのですが、NUKEのレンダーライセンスを所有しておらず、代わりにインタラクティブライセンス(通常のNUKEのGUIライセンスのこと)を使用したい場合にはこの引数を追加します。コマンドをコマンドプロンプトで実行してスレーブを待機状態にします。正常に起動した場合は、特に何も表示されません。
構文が間違っていたり引数にエラーがあった場合は、エラーメッセージが出ます。待機状態のコマンドの終了は[Ctrl]+[C]キーです。
コマンドを起動して待機状態にしたら、メインワークシステーションの方で接続を確認します。
メインワークステーション(Mac)での接続の確認
NUKE STUDIOなどを使用しているメインワークステーションから、スレーブの接続を確認します。メインワークステーションとは、前述のスレーブコマンドの引数"--workerconnecturl"で指定したマシンです。メインワークステーションでNUKEを起動してScript Editorで以下のコマンドを実行します。
from hiero.ui.nuke_bridge.FnNsFrameServer import frameServer
print [worker.address for worker in frameServer.getStatus(1).workerStatus]
メインワークステーションとスレーブを含めて、利用可能なFrame Serverのマシン名とIPアドレスが全て表示されます。ここではメインワークステーションではFrame Serverを起動させていないので(後述)、スレーブで設定している" --numworkers"の数だけが表示されています。
# Result: [u'Worker 0 - NKSLV01 - 192.168.1.92', u'Worker 1 - NKSLV01 - 192.168.1.92']
ここにスレーブが表示されない場合は、--workerconnecturlで指定したアドレスかポート番号が間違っているか、ファイアーウォールでポートがブロックされているなどネットワーク上での問題がほとんどです。
Frame ServerではメインワークステーションとスレーブでNUKEのバージョンやリビジョンが異なっていても接続されます。諸々トラブルが発生する可能性もあるので、バージョンは合わせておくのが良いと思います(最初に書きましたが、NUKE STUDIO以外でもFrame Serverが使用できるようになったのはバージョン11からです)。
接続されていることが確認できたら、Renderで"Render using frame server"オプションを有効にしてレンダリングします。スクリプトやフッテージなどの各ファイルは全て"--remap"で指定したパス以下に存在する必要があります。
レンダリングを開始するとスレーブのマシンでレンダリングが開始されます。
スレーブでレンダリングが行われていない場合に考えられるのは、
などが考えられます。
チューニングなど
前述した通り、メインワークステーションのリソースはレンダリングには使用せず、プレビューやオペレーションだけに使用するように設定しました。Preference->Performance->Threads/Processesのframse server processes to runを0(ゼロ)にします。
スレーブの1ワーカーあたり8GBのメモリを割り当てましたが、Windowsでは使用メモリがCentOSやMacに比べて多くなる傾向にあり、CentOSやMacでは8GBでレンダリング出来てもWindowsではメモリ不足でNUKEがクラッシュしてしまうことがあります。12GBくらいは割り当てておいたほうが良さそうな感じです。
コマンドは起動用のWindowsバッチファイルにしました。NUKE_frameserver.batをいう名称でWindowsのスタートアップ項目などに登録しておきます。
chcp 932
start "NUKE_frameserver" /W /low chcp 932| python.exe "C:\Program Files\Nuke11.1v1\pythonextensions\site-packages\foundry\frameserver\nuke\runframeserver.py" --numworkers=2 --nukeworkerthreads=4 --nukeworkermemory=12288 --workerconnecturl=tcp://192.168.1.199:5560 --nukepath="C:\Program Files\Nuke11.1v1\Nuke11.1.exe" --remap "/Volumes/Projects/,Z:/"
start "NUKE_frameserver" /W /low chcp 932| python.exe "C:\Program Files\Nuke11.1v1\pythonextensions\site-packages\foundry\frameserver\nuke\runframeserver.py" --numworkers=2 --nukeworkerthreads=4 --nukeworkermemory=12288 --workerconnecturl=tcp://192.168.1.199:5560 --nukepath="C:\Program Files\Nuke11.1v1\Nuke11.1.exe" --remap "/Volumes/Projects/,Z:/"
Frame Serverはメインワークステーションとスレーブが固定されるのでレンダーディスパッチャのように大勢で使用するのには向きません。ちなみにDeadlineではDealineスレーブをFrame Server用に確保することもできます。
Thinkbox - Deadline 10.0.10.4
https://docs.thinkboxsoftware.com/products/deadline/10.0/1_User%20Manual/manual/app-nukeframeserver.html
Frame ServerはNUKEから特にネットワークレンダリング、ローカルレンダリングを意識する必要もないので、一人で複数のマシンを使用する際にはとても使いやすくオススメです。