見出し画像

自宅でBlenderの分散レンダリング環境を作ろうー!

はじめに

皆さん、今日も創作お疲れ様です。
最近カートゥーン調な作品を制作中で、最終的にCyclesでシーケンスレンダリングしたいなと思ってます。(EEVEE Nextも気になるけど!)

大変なのはレンダリング時間。
これネックでアニメーション作品は荷が重い、進捗が悪い…
なんてありがちかなと。

可能な限り短くしたい!と試した内容の共有記事です。


記事を3行でまとめると

・分散レンダリング = レンダーファームという手段を挙げる
・Blender特化ローカルレンダーファーム「flamenco」の紹介
・Flamencoの導入手順



分散レンダリングという手

つまり
複数PCマシンで1つのシーン(.blend)を同時にレンダリング(分散)すれば速い!
とまず行き着くと思います。
仮にこの行為を「分散レンダリング」と呼んだ場合、これらを実行するマシン一式を「レンダーファーム」と呼称されています。

ワークマシンを管理するマネージャーソフトを軸に、
実際にレンダーを行うワークマシンがひとまとまりとなって「レンダーファーム」を構成。
ローカルネットワークで完結するもの、クラウド上のワークマシンを動作させるものなど。
以下に例を挙げてみます。

・Tractor
Pixer発のレンダーファーム

・OpunCue
GoogleとImageWorks共同開発のオープンソース管理ソフト。

・RenderPool
Blenderのクラウドレンダリングで調べるとよくヒットするサービスですね

・BlenderStudio
AWSを利用したクラウドレンダリング手法もよく目にしますね。
こちらのサービスはAWSとBlender連携を簡易的にしたサービスのようです。
※blender.orgのBlenderStudioとは無関係


レンダーファームは色々あるものの…

OpenCueやTractorはBlenderベースではない、クラウドは利用料が掛かりフットワーク重め。
Blenderベースかつ、ローカルネットワークで完結したい!!

そんな条件に合致したレンダーファームのマネージャーソフトがBlender公式からリリースされています。

Flamenco

こちら、公式ムービーでおなじみBlenderStudio内製ツールでして、実際にスタジオ内で使用されているとのこと。
Blenderベースで構築され、ローカルネットワーク内で分散レンダリングを自動化してくれます。ステキ!

前置きが長くなりましたが、今回はFlamencoの導入記事です。

導入前の前提

ローカルネットワーク内でのフォルダ共有等、Blender知識が最低限ある前提で進行します。

私の環境では以下の通りとしました。

・メインマシン
マネージャーソフト実行、実作業用。離席時は兼ワークマシンに。

・サブマシン
GPUを積んだワークマシン専用PC。

・フォルダサーバマシン
データやり取り用の常稼働ファイルサーバー。
レンダーファーム全体のRead/Write先の指定が必要だったので1台用意しました。※ワークマシン兼、共有フォルダサーバでも問題ないです。

余談ですが、このマシンはASRockのベアボーンDeskMeet X300で構築しました。
CPU、メモリ、ストレージを買えば小型PCが組め、自宅サーバーにピッタリ。最低限カスタムが効くってのが素敵でメンテしやすいです。

これらをローカルネットワーク内でファイル共有できる状態にして導入開始です。
(双方で共有フォルダのRead/Writeアクセスが可能な状態)


導入手順

はじめに

公式ドキュメントに沿って進行しますので、まずはご自身で試されてもよいかもです!
各工程、補足しつつ説明していきます。


Blenderのバージョン揃え

レンダーファーム全体でBlenderのバージョンとアドオン状態を一致させます。
アドオン含め、設定ファイルは

%Appdata%でパス指定
Blender Foundation\任意のバージョン

フォルダをすべてのワークマシンに配置すればOKです。
現時点での最新 Blender4.2.2 LTS でFlamenco動作確認できました。

Flamencoの導入

公式HPよりダウンロードし、zipを展開します。

展開後、"flamenco-manager.exe" を実行。Webブラウザ環境での動作です。
※初回以降は上記exeを実行後、ローカルアドレスをchrome等でアクセスすることで使用可能です。


共有フォルダの構成

レンダーファーム全体のRead/Write先になる軸フォルダです。
私はファイルサーバーの以下に配置しました。

"C:\shareFolder\BlenderFarm\flamenco"

さらに、"\flamenco" 階層の中身に3つのフォルダを作成し、フォルダの構成は完了です。
・project
・renders
・software


Flamencoに共有ファイルを指定

続けて、マネージャー画面の初期設定を進行していきます。

私の場合、ファイルサーバの共有フォルダ先を指定すればよいのですがFlamencoがUNC表記に未対応です。

UNC表記とは、ネットワーク上のフォルダを表す表記で "\\myPC" など
"\\" から始まる表記です。
今回のファイルサーバーも "\\server\shareFolder…" となり使用できません。

これ回避するため、ボリュームラベルを割り当てます。
ネットワークの特定フォルダリンクをボリュームラベルに置換える対応です。

エクスプローラーのネットワークで右クリックし、ネットワークドライブの割り当てを実行します。(※全ワークマシン、メインマシン)

「ドライブ文字」と「共有フォルダの "\flamenco"階層前まで」のリンクを指定。

これで、"\\server\shareFolder\blenderFarm" = "Z:\" と同義になります。

マネージャー画面に戻り、共有フォルダ先を指定します。
今回は "U:\flamenco" 

続項目の「Blenderのバージョン指定」は合わせたバージョンを指定すればOK。


Blenderアドオンの有効

メインマシンのBlenderにのみ、アドオンを導入します。
当アドオンの役割は「レンダーファーム(マネージャーソフト)へジョブの登録」です
ですので、実データを扱うメインマシンのみ導入となります。

Webマネージャー画面中央「GetAdoon」を押下。

公式解説動画から引用

アドオン設定は以下の通り。

アドオン導入は以上です。
実際にジョブを登録し、ファーム全体が動作するよう構築していきます。


ジョブの登録

流れは以下の通りです。

1.メインマシンBlenderからジョブを登録
2.ジョブ登録とともに、現シーンデータの複製が [U:\flamenco]に行われる
3.ワークマシンの登録
4.分散レンダリングの開始

 

連番レンダリング準備が整っているシーンを開きます。
シーン内で設定したレンダリング設定を参照しファームは動作するので一通り設定を終えます。

GPU演算、サンプル数、解像度など普段通り指定


「出力設定」タブは以下の通り

フォーマット:PNG
出力先:指定不要
フレームレンジ:任意範囲を指定


その真下にFlamenco3 タブがあり、ジョブ登録に必要な項目を指定します。

JobName:任意
JobType:Simple Blender Render
Frames:Scene frame range(※先ほど指定した範囲を引き継ぎ)
Chunk size:任意(※例えば5なら、ワークマシンに5Fずつタスクを分散)
Render Output Root:U:\flamenco\render上の任意(※絶対パス指定)

絶対パス指定はパス指定ウィンドウ右上「歯車マーク」から、OFFで絶対パスです。

以上でSubmit to Flamencoを押下することで、「ジョブの登録」「現シーン.blenderの複製」が行われます。

留意したいのは "U:\flamenco\project" 以外の場所に現シーンデータがないと、上記画像のように"\flamenco" 直下に複製データが生成されてしまうこと。
予め作業シーン自体も "\project\任意のフォルダ" に格納しておけば、以下のように同階層にファーム用.blendが生成され、管理がしやすいです。

この複製された "_flamenco.blend" が共有フォルダ経由で各ワークマシンで読み込まれ、レンダーされる仕組みです。
この際、テクスチャなど外部ファイルが相対パスであるとリンク切れを起こすので、 "\project"内にRepath、もしくはパックが必要となります。

ワークマシンの指定

現状、ワークマシンの指定をしていないため開始されません。
ダウンロードしたzipの "tool"、 "flamenco-worker.exe" をコピーし
"U:\flamenco\sotfware"へ貼り付けます。

ワークマシンとしたいPCから直接、"\software\flamenco-worker.exe"を叩き"実行"します。
コマンドプロンプトとともにWebマネージャーのWorker欄にマシンが登録されます。
(※メインマシンも実行させればワークマシンとして兼用できますよ!)

worker.exe実行中 = awake

マシン分だけworker.exeを実行すれば、タスクが全自動で分散されます。分散されるフレームはChunk size に基づきます。
早速、先ほど登録したジョブが実行されている様子がJobsタブから確認できます。

active が現在実行中のタスク。画面だと152F目が進行中。

最新のレンダー画像やログも確認でき、非常に直感的なUIです。

ジョブ最後に連番統合したMP4を生成し完了です。


以上!

非常に動作も安定していて、Blender用に構築されているため一度理解してしまえば誰でもローカルネットワーク内でレンダーファームを運用できます。

ローカル完結なのでコスト面を気にせずルックの試行錯誤、素材の差し替え、レンダーと実作業の同時進行が安易に行えプリレンダーアニメーション作品の敷居が下がったように感じます。

コマンド実行で挙動を制御できるとのことで、タスクの分散割合などできないか試したいですね。
サブとメインでGPU性能差が倍あり、均一タスクを振るとサブが足を引っ張ります。この辺りはもう少し触って理解したら追記しますね。

では!創作楽しんでいきましょ~!!!
以上です。

いいなと思ったら応援しよう!