Amazon Web Services ブログ
Open Job Description を使用したサブミッターワークフローのカスタマイズ
この記事は 2025 年 2 月 13 日に公開された Using Open Job Description to Customize Submitter Workflows を翻訳したものです。
レンダーファームへのジョブの定義と送信プロセスを効率化したいアーティストやテクニカルディレクター (TD) の方はいらっしゃいますか?このブログでは、Open Job Description (OpenJD) を使用して AWS Deadline Cloud の統合サブミッターをカスタマイズする方法について説明し、最後にゼロから作成したカスタムサブミッターのコードサンプルを紹介します。
OpenJD は、ユーザーがレンダーファームに送信するジョブを定義できるオープンな仕様です。ジョブの送信はコンテンツ作成ワークフローの終盤で行われ、OpenJD は TD やテクニカルアーティストがワークフローの中断を最小限に抑えるために、サブミッターワークフローをカスタマイズする機会を提供します。サブミッターのカスタマイズにより、AWS Deadline Cloud にジョブを送信するユーザーの時間と労力を節約できます。
図 A は、Deadline Cloud に統合された Maya 2024 サブミッターを示しています。これは Maya ジョブを送信するための基本的な機能ユーザーに提供します。
カスタマイズのユースケース
FuzzyPixel のカスタム Maya サブミッターは、FuzzyPixel チームによって開発されました。私たちは、AWS の機能がリリースされる前に、設計、プロトタイプ作成、テストを行うために、実際のプロダクションに取り組んでいる AWS チームです。このブログでは、最新のプロダクションで開発したカスタマイズについて説明します。
ユースケースは以下の通りです:
- プロジェクトパスと出力パスの更新:プロジェクトパスと出力パスが開いているシーンに基づいて自動的に設定されることで、ユーザーの時間を節約し、認知的負荷を軽減します。
- 画像解像度:ジョブの最終レンダリング解像度が 8K の場合があります。テストレンダリング用に解像度を下げることができれば、時間を節約しレンダリングコストを削減できます。
- GUI の再構成:統合されたサブミッターは、4 つの異なるタブを使用して GUI コントロールを整理します。頻繁に使用するコントロールを RenderSettings タブの下に配置することで、ジョブ送信ワークフローを効率化できます。
- フリートのカスタム属性:ユーザーがジョブをスポットインスタンスとオンデマンドインスタンスのどちらで実行するかを選択できるようになると、長時間のレンダリングでもジョブの中断を回避できます。
- レンダーレイヤーコントロール:サブミッターでレンダーレイヤーを明示的に制御できるようにすることで、レンダーレイヤーの可視性とフレーム範囲をより詳細に制御できます。
これら全てのユースケース要件を、OpenJD、AWS Deadline Cloud API、Maya API、PySide2、Python スクリプトを使用して実現しました。最初のユースケースを見ていく前に、OpenJD について詳しく見ていきましょう。
前提条件
続行する前に、以下の前提条件をすべて満たす必要があります。
- Windows ワークステーション
- Maya 2024 と AWS Deadline Cloud Submitter のインストール
- Maya 2024 には独自の料金体系があり、これはAWS とは関連していないことに注意してください。
- ファーム、フリート、キュー、および Deadline Cloud Monitor、そしてファーム用に作成されたプロファイル
- Python-3.10.8 のインストール (Maya 2024 の Python バージョンと一致させるため、このバージョンの使用を推奨します)
- https://www.python.org/downloads/
- このバージョンの Python に deadline と GUI の依存関係を pip でインストール
- 例:”C:\Program Files\Python-3.10.8\PCBuild\amd64\python.exe” -m pip install deadline[gui]
- FuzzyPixel カスタム Maya サブミッターのダウンロード
注意: このブログで提供されているすべての例は、Windows ワークステーションでのみ実行できます。
ジョブバンドルで OpenJD を見る
Deadline Cloud 統合サブミッターの画像 (図 A) では、右下に Export bundle ボタンがあります。ジョブバンドルとは、Deadline Cloud レンダーファームで実行されるジョブの完全な説明です。このセクションでは、前述のユースケースがどのように実現されたかを理解するための第一歩として、Maya シーンからエクスポートされたジョブバンドルを見ていきます。
ジョブバンドルのエクスポート
- Maya を開き、レンダーファームに送信するシーンを読み込みます。
- シーンの読み込み後、サブミッターを起動します。サブミッターが正しくインストールされている場合、図 B に示すように AWS Deadline タブ (画面の右端) が表示されます。サブミッターが表示されない場合は、Windows、Settings/Preferences、そして Plug-in Manager の順に選択してください。表示されるポップアップウィンドウで Deadline と入力し、Loaded と Auto load を選択してからウィンドウを閉じます。
- AWS Deadline シェルフに Deadline Cloud アイコンが表示されたら、それをクリックすると Maya 統合 サブミッターが起動します。こちらの手順に従ってファームにログインしてください。
- サブミッターを起動したら、Export bundle ボタンをクリックします。エクスポート後、ファイルブラウザと確認モーダルがポップアップ表示されます。ファイルブラウザには、ジョブバンドルを含む 3 つのファイルが格納されたフォルダが表示されます。
ジョブバンドルの説明
Maya からエクスポートされた各ジョブバンドルフォルダには、アセット参照用、パラメータ値用、エクスポートされたジョブを記述するテンプレートの 3 つのファイルが含まれています。
- asset_references.yaml ファイルには、アセットパス、出力フォルダ、ジョブの参照パスが含まれています。Service-Managed Fleet (SMF) を使用している場合、これはアセットをレンダーファームにアップロードするための手段となります。Customer-Managed Fleet (CMF) をストレージプロファイルと共に使用している場合、asset_references.yaml で指定されるリストは空でも構いません。
- parameter_values.yaml ファイルには、ジョブテンプレートで参照する予定の値が全て含まれているので便利です。画像解像度のユースケースでは、パラメータ値の例として ImageWidth と ImageHeight があります。
- template.yaml ファイルには、ジョブの説明が含まれています。asset_references.yaml と parameter_values.yaml ファイルを参照して、ジョブを完全に表現することができます。3 つのファイルすべてを使用すると便利ですが、template.yaml ファイルだけでジョブを完全に記述することも可能です。
最初のユースケースである、プロジェクトパスと出力パスの更新を実現するために、ジョブバンドルを使用して構築していきます。
ユースケース #1 – プロジェクトパスと出力パスの更新
FuzzyPixel チームは、現在開いている Maya シーンから導出した Python コードを使用して、プロジェクトパスと出力パスを設定したいと考えていました。
以下のようなアプローチを取りました:
- Maya クエリの実行
- Maya ファイルの現在のパスを取得する方法は複数ありますが、ここでは次のように実行しました:
project_path = cmds.workspace(q=True, active=True)
- 出力パスについては、図 G に示すように、プロジェクトパスとフォルダを連結しました:
output_path = f'{project_path}/images'
- Maya ファイルの現在のパスを取得する方法は複数ありますが、ここでは次のように実行しました:
- 次に、クエリの結果を使用して、サブミッターのプロジェクトフィールドと出力フィールドに値を設定します。
- プロジェクトパスと出力パスの値が得られたら、前のセクションで説明した parameter_values.yaml ファイルにデータを挿入できます。
- 先ほどエクスポートした parameter_values.yaml ファイルを開き、プロジェクトパスと出力パスを参照している行を見つけます。これらの行がハイライトされたエクスポートされたバンドルは図 E で確認できます。エクスポートしたバンドルの .yaml ファイルの該当する行は次のとおりです:
- Python の pyyaml パッケージを使用して、parameter_values.yaml ファイルをプログラムで更新できます。今回は手動でファイルを変更します。例えば、13 行目の project_path と、15 行目の output_path に変更します (図 E を参照)。
変更されたバンドルからジョブを送信
このセクションでは、エクスポートしたジョブバンドルに加えた変更を表示する GUI を起動します。
1. 上記の前提条件を満たしたワークステーションのコマンドシェルから、次のコマンドを入力します:
deadline bundle gui-submit C:\path_to_your_exported_and_modified_bundle
-
- サブミッターの起動:
- Job-specific settings タブをクリックして、変更したプロジェクトパスと出力パスを確認します。
ユースケース #2 – 画像解像度
バンドルデータを変更して画像解像度のユースケースを実現するパターンに従うことで、時間を節約し、レンダリングコストを削減できます。すべての GUI control の Description が利用可能です。
ユースケース #3、#4、#5 – カスタムサブミッターのスクラッチ開発
タブの再編成、フリートのカスタム属性、レンダーレイヤーの制御のユースケースは、前のセクションのカスタマイズパターンから、以下の 4 つの領域で外れていました。
- タブの再編成: Deadline Cloud Maya 統合サブミッターでは、.yaml の編集によるタブの追加や削除はできません。
- QTree Widget: レンダーレイヤーの表示に QTree Widget コントロールを使用したいと考えましたが、このコントロールはジョブテンプレート UI コントロールとして利用できません。
- カスタムハンドラー: 統合サブミッターは、Submit ボタンをクリックした後の template.yaml の更新をまだサポートしていません。Maya のクエリ、またはカスタムサブミッター GUI の変更、そしてユーザーが Submit ボタンをクリックした後に template.yaml を更新するには、カスタムハンドラーが必要です。
- フリート属性の表示: ユーザーがジョブを実行するインスタンスタイプを制御できるようにするため、ファームで ‘スポット’ と ‘オンデマンド’ のフリート属性を定義し、これらの属性をサブミッターで表示しました。
タブの再編成、QTree Widget の実装、カスタムハンドラーについては、公開されている QT のコントロールとドキュメントを活用しました。フリートの属性を表示するために AWS Deadline Cloud API を使用しました。
FuzzyPixel Maya カスタムサブミッターは、図 H に示すように、Render Settings タブの下によく使用される機能を統合することで、ユーザーのワークフローを効率化します。図 I に示すように、Render Layers タブはサブミッター内でレンダーレイヤーの可視性とフレーム範囲を直接制御できるようにすることで、サブミッターの機能を拡張します。これまでのすべてのユースケースは、スクラッチ開発された Python コードを通じて実装されており、OpenJD スキーマ全体を探索するための実践的な経験とコンテキストを提供します。
まとめ
このブログでは、Maya サブミッターのワークフローをカスタマイズするために、Python コードを手動で編集し、ジョブバンドルを変更しました。これらのカスタマイズにより、クリエイティブワークフローの中断を最小限に抑え、時間を節約し、最終的にコストを削減するというるユースケースを実現するのに役立ちました。
AWS がどのようにお客様のビジネスを加速させることができるのか、 AWS の担当者にお問い合わせください。
参考資料
参考リンク
AWS Media Services
AWS Media & Entertainment Blog (日本語)
AWS Media & Entertainment Blog (英語)
AWS のメディアチームの問い合わせ先: awsmedia@amazon.co.jp
※ 毎月のメルマガをはじめました。最新のニュースやイベント情報を発信していきます。購読希望は上記宛先にご連絡ください。
本記事は、Using Open Job Description to Customize Submitter Workflows を翻訳したものです。翻訳は Solutions Architect の濵野が担当しました。