CGWireで一瞬でCGムービーのファイル階層を構築する

CGWireで一瞬でCGムービーのファイル階層を構築する

スタジオを訪問したり、CGアーティストとパイプラインについて話し合ったりすると、遅かれ早かれ必ず出てくるのがファイル階層の話題です。簡単に見えるかもしれませんが、実際には細部への注意や調整がかなり必要です。このトピックについては以前の記事で既に触れたので、詳細には踏み込みません。そこで今日は、CGWire APIとPythonクライアントを使ってファイルツリーをいかに簡単に構築・管理できるかをお見せします。

では、最初のPipelineチュートリアルに行きましょう!

1. 設定

サーバーに動作中のバージョンをインストールし、ローカルネットワーク経由でアクセスできているものとします。そうでない場合、または素早く始めたい場合は、Dockerコンテナを通してAPIインスタンスを起動できます。$ docker build -t cgwire .
$ docker run \
-ti -rm \
-p 80:80 \
-—name cgwire \
-v zou-storage:/var/lib/postgresql \
-v zou-storage:/opt/zou/zou/thumbnails \
cgwire

APIが起動したら、シンプルなPythonスクリプトでファイル階層を生成するのは簡単です。以下では、APIがhttp://localhost/apiエンドポイントからアクセス可能であると仮定します。

Pythonスクリプトを書く前に、APIクライアントをPythonの依存関係にインストールする必要があります:Gazupip install gazu

これで準備ができました。スクリプト(名前:build_file_tree.py)を書き始めます。まずPythonクライアントを設定し、それをAPIにログインさせます:import gazugazu.set_host("http://localhost/api")
gazu.log_in("admin@example.com", "default")

2. アセットとショット

PythonクライアントがAPIに正しく接続できたら、生産(プロダクション)の要素を作成するスクリプトを実行できます。ここでは、3つのアセットと3つのショットで構成されたシンプルなプロダクションを作成します:new_prod = gazu.project.new_project("Super production")
characters = gazu.asset.new_asset_type("Characters")
props = gazu.asset.new_asset_type("Props")rabbit = gazu.asset.new_asset(new_prod, characters, "Rabbit")
monkey = gazu.asset.new_asset(new_prod, characters, "Monkey")
chair = gazu.asset.new_asset(new_prod, props, "Chair")episode = gazu.shot.new_episode(new_prod, "E01")
sequence = gazu.shot.new_sequence(new_prod, episode, "SE01")
shot = gazu.shot.new_shot(new_prod, sequence, "SH01")
shot = gazu.shot.new_shot(new_prod, sequence, "SH02")
shot = gazu.shot.new_shot(new_prod, sequence, "SH03")

3. タスク

これで、プロダクションのすべての要素がセットアップできました。次は、関連するタスクを作成していきます。modeling = gazu.task.get_task_type_by_name("Modeling")
setup = gazu.task.get_task_type_by_name("Setup")
animation = gazu.task.get_task_type_by_name("Animation")
render = gazu.task.get_task_type_by_name("Render")for asset in gazu.asset.all_assets_for_project(new_prod):
gazu.task.new_task(asset, modeling)
gazu.task.new_task(asset, setup)for shot in gazu.shot.all_shots_for_project(new_prod):
gazu.task.new_task(shot, animation)
gazu.task.new_task(shot, render)

4. ファイルツリー

いよいよ最終ステップとして、ファイル階層のフォルダを作成します。import os

gazu.files.set_project_file_tree(new_prod, "simple")

for asset in gazu.asset.all_assets_for_project(new_prod):
for task in gazu.task.all_tasks_for_asset(asset):
path = os.path.dirname(
gazu.files.build_working_file_path(task))[1:]
)
os.makedirs(path)

for shot in gazu.shot.all_shots_for_project(new_prod):
for task in gazu.task.all_tasks_for_shot(shot):
path = os.path.dirname(
gazu.files.build_working_file_path(task))[1:]
)
os.makedirs(path)

以上です!これでファイル階層はすべて揃いました。結果を見てみましょう:$ tree -d my_root_folder
└── productions
└── super_production
├── assets
│ ├── characters
│ │ ├── monkey
│ │ │ ├── modeling
│ │ │ └── setup
│ │ └── rabbit
│ │ ├── modeling
│ │ └── setup
│ └── props
│ └── chair
│ ├── modeling
│ └── setup
└── shots
└── se01
├── sh01
│ ├── animation
│ └── render
├── sh02
│ ├── animation
│ └── render
└── sh03
├── animation
└── render

フォルダはテンプレートでカスタマイズ可能です。これは必要に合わせて一致するように設計されています。こちらが今回使用したものです:{
"working": {
"mountpoint": "/my_root_folder",
"root": "productions",
"folder_path": {
"shot": "<Project>/shots/<Sequence>/<Shot>/<TaskType>",
"asset": "<Project>/assets/<AssetType>/<Asset>/<TaskType>"
}
}

まとめると、シンプルなスクリプトでプロダクション情報を生成し、作業に必要なフォルダをすべて作成しました。そして嬉しいニュースとして、数千のアセットやショットを含むプロダクションに対しても、簡単にスケールできます。ぜひ、あなたの考えを聞かせてください。

本ブログはCGパイプラインとプロダクションマネジメントに捧げています。ファイル階層のスクリプト作成に興味があるなら、きっと当社の記事を楽しんでいただけるはずです。また、Discordチャンネルも用意しており、ご自身の課題や解決策について話し合ったり、他の人から学んだりできます。

この記事はいかがでしたか?

ニュースレターを購読して、さらなる考察、チュートリアル、業界ニュースをお受け取りください。