🔆

Blenderでの制作パイプラインについて考える

2024/08/17に公開

ある程度の規模の現場において、スタジオの基盤となるようなポジションでのBlender導入は事例があまりなく情報も限られています。

参考

Blenderでの実制作を通して知見を提供し続けているBlender Studioには、その制作で用いられたパイプラインについてのドキュメントも存在しています。規模的には10〜20人程度を想定しているようです。

https://studio.blender.org/pipeline/
https://studio.blender.org/pipeline/pipeline-overview/introduction

Blender Studioで使用されるパイプラインとITのセットアップについての説明ということで、Blender云々に留まらない非常に充実した資料となっています。

ただ、2023年4月ごろの日付で「更新中」になっていたり、ページだけ設けられて書き進められていない項目もあったりと、参考になる部分もあればヒントにとどまる部分もあります。

これに関連するツール、スクリプト類はBlender Developerサイトにリポジトリが用意されています。
https://projects.blender.org/studio/blender-studio-pipeline

同サイトには、目下ばりばり開発中のリギングシステム CloudRig のリポジトリもあります
https://projects.blender.org/Mets/CloudRig

パイプラインは思想的には大きく「アセット寄りパイプライン」と「ショット寄りパイプライン」とに分けられますが、CloudRigの充実など現状はアセット側を軸に手厚くしていっているのかなという印象です。
パイプラインそのものについてのまとまったドキュメントとしては、ボーンデジタル社のこちらが必読。
https://www.borndigital.co.jp/book/5160/
映像系、ゲーム系、規模の大小とわず考えるべきことを広範に扱ったほぼ唯一の日本語書籍です。

Blenderの実際

Blenderをパイプラインに組み込む、あるいはBlenderでパイプラインを敷く際に必要になるであろうBlender側の仕組みを確認しておきます。環境変数周りとツール共有周りです。

起動時にスクリプトを読む

-P <filepath>
--python <filepath>

このオプションでPyファイルを渡すと、起動時に実行されます。
また↓こちらの書き方だと、起動&指定したファイル内のテキストブロックをPythonスクリプトとして実行します。

blender /path/to/scene.blend --python-text Text

また、システムの環境変数も使えるようにするオプションもあります。(これが含まれない通常の起動だとシステム環境変数は無視されます)

--python-use-system-env

このほかPython系オプションについてのドキュメントはこちら
https://docs.blender.org/manual/en/latest/advanced/command_line/arguments.html#python-options

起動時にAddon有効化

--addons <addon(s)>
# Comma separated list (no spaces) of add-ons to enable in addition to any default add-ons.

カンマ区切りでアドオン名を指定。「any default add-ons.」とのことで、デフォルトの指すところがちょっと気になる。

スクリプトパス

# Directory for user scripts.
BLENDER_USER_SCRIPTS

# Directory for user configuration files.
BLENDER_USER_CONFIG

# Directory for user extensions.
BLENDER_USER_EXTENSIONS

↑この辺りが代表的なところかと思います。ドキュメントだとこちら↓

https://docs.blender.org/manual/en/latest/advanced/command_line/arguments.html#environment-variables

ただし、「Directory for user scripts.」と単数形で言及されているように、いずれもフォルダを直接指定するものであって複数パスは渡せません。
フォーラムとかだと、ここを改造するとできるよ、みたいなのは出てきます。

これでは困るので、Blenderの環境設定には複数のスクリプトディレクトリが登録できるようになっています。

ここにフォルダを登録することで、スタジオのスクリプト置き場・プロジェクトの置き場・ユーザーの置き場、と用途別に指定するような運用もできそうです。
また、これをPython経由で登録する関数「script_directory_add」も用意されています。

script_directory_add
>>> help(bpy.ops.preferences.script_directory_add)
Help on _BPyOpsSubModOp in module bpy.ops:

bpy.ops.preferences.script_directory_add(directory="", filter_folder=True)
    bpy.ops.preferences.script_directory_add(directory="", filter_folder=True)
    (undocumented operator)

登録済みのパスを確認する方法は二つありまして、

script_paths
# script_paths_pref
>>> help(bpy.utils.script_paths_pref)
Help on function script_paths_pref in module bpy.utils:

script_paths_pref()
    Returns a list of user preference script directories.

# script_paths
>>> help(bpy.utils.script_paths)
Help on function script_paths in module bpy.utils:

script_paths(*, subdir=None, user_pref=True, check_all=False, use_user=True, use_system_environment=True)
    Returns a list of valid script paths.(後略)

Preferenceで設定したパスだけ返ってくるのが script_paths_pref 、Blender全体のスクリプトパスも込みで返ってくるのが script_paths です。

ツールチップを見るとこの欄は 「ScriptDirectory」型 として保持されているようなので、それで返してくれるコマンドもありそうですが。はたして。
script_directory_add あたりの実装とかを見ると勉強になります。

https://projects.blender.org/blender/blender/src/branch/main/scripts/startup/bl_operators/userpref.py#L1243

スクリプトパスとアドオン

スクリプトパス以下にはaddonやstartupといった所定のフォルダが置かれることが想定されています。どういうフォルダが期待されているかはこちら↓

https://docs.blender.org/manual/en/latest/editors/preferences/file_paths.html#script-directories

Blenderといえばアドオン文化ですが、ユーザー単位で手元で機能を増減できるこの仕組みがBlenderの強みでありつつも、多人数用に環境を構築・管理する上では諸刃の剣な感じがします。

たとえば BLENDER_USER_SCRIPTS にスタジオ全体のスクリプト置き場を指定したとして、誰かが気軽にアドオン追加したらここに飛んでいきますし、うっかりアンインストールしたら全員に影響が出ます。管理という面では煩雑この上ないです。
かといって、じゃあアドオン周りは個人で触るなというルールにしてしまうのも、(もちろん正攻法ではありつつも)Blenderの強みをあえて放棄するようで勿体無い。
BLENDER_USER_SCRIPTSとScript Directoryの上手な仕分けが求められそうです。

このアドオン管理部分をrez化できるなどあれば、本稿の趣旨にとっては最高なんですが。
https://rez.readthedocs.io

あと上記記事のメモとしてめちゃくちゃ引っかかることが書かれてます。

🤔❓

プロジェクト設定

MayaやHoudiniなどでは、シーンデータを構成する一連のデータを収めるフォルダ群を「プロジェクト」として認識することができます。これがあると、多数のテクスチャやキャッシュなどで構成されたシーンデータの再現性も担保しやすく、共同作業者、社内・社外とのデータのやり取りが捗ります。

Blenderでもそういうのがあるかしら?と思ったら、検索してまず出てくるのがビデオ編集機能まわりだったりと、どうもその辺りは薄い様子。

https://docs.blender.org/manual/en/latest/video_editing/setup/index.html

一応bpyの中にはパス関連のアクセスがいろいろあるようなので、上記の起動時のスクリプトに入れ込む形でぐいぐいやることになるかもしれません。

メニューの追加

プロダクションのツール群、あるいはプロジェクト用のツール群をまとめたツールメニュー、ツールパレットを提供する必要もあります。

Pythonを使ったBlenderの拡張、アドオン制作に関してはぬっちさん執筆のドキュメントが圧倒的です。
https://colorful-pico.net/introduction-to-addon-development-in-blender/2.8/index.html

2023年12月には書籍化もされています。ぜひお求めください。

https://note.com/shuwasystem/n/n02a62d3307a4

アニメ業界での事例

Blender開発基金のCorporate Silver/Corporate Bronzeにクレジットされているスタジオカラー/プロジェクトスタジオQがアニメ制作へのBlender導入で意欲的な取り組みを続けていて、ツール配布や講演をしておられます。

https://studio-q.co.jp/tools/

https://youtu.be/xfVmXH15T4U

https://cgworld.jp/regular/studio-q/

また、かねてよりBlender使いとして知られる制作チーム Hurray! の『数分間のエールを』はBlender映画でした。

https://cgworld.jp/article/202408-yell-1.html

レンダリングマネジメント

アセット寄りパイプラインは、アセット制作の開始からリグへの着地をどう見据えるか=リギングフレームワークが軸になりますが、ショット寄りパイプラインは畢竟、ショット/コンポジット、さらにエフェクト…らがいかにエラーなくレンダリングおよびデータのやり取りができるかというレンダリングマネジメント=レンダーファームとの付き合いが軸になってきます。
Blender Studioでも使われているFlamencoやASWFのOpenCue などのオープンソースなもの、

https://flamenco.blender.org

https://www.opencue.io

Pixarの提供するTractorなどが挙がりますが、

https://renderman.pixar.com/tractor

やはり先日からオンプレ版は無償となったAWS Thinkbox Deadlineが引き続き定番と言えそうです。Blenderからのサブミットも用意されています。

https://aws.amazon.com/jp/thinkbox-deadline/

https://docs.thinkboxsoftware.com/products/deadline/10.3/1_User Manual/manual/app-blender.html#app-blender-ref-label

…用意されていますが、ドキュメント上は2.6〜2.8に対応しているとの記述になっていて、動くかもしれないし、動かなければPython書き換える等調整は必要そうです。Blenderのアップデートが盛んすぎるので仕方ない。

Blender Manager

https://github.com/verlorengest/BlenderManager/
プロジェクトの作成・管理、レンダリング管理、アドオン管理等ができるようです。


引き続いて、実装的な部分で書くことがあれば別記事にまとめるかもしれません。

Discussion