ZYNC を使用した画像レンダリングの自動化

このチュートリアルでは、Google Cloud Platform(GCP)で 3D レンダリングをデプロイするために使用されるサービス ZYNC を使用して、3D レンダリングを自動化する方法を説明します。このチュートリアルは、IoT 機械学習の自動化に付属するものであり、説明されている手順のいくつかは他のワークフローには適用されません。

エンジニアや建築家、視覚効果アーティスト、研究者は大量のジオメトリ データを処理し、それらのデータは、一般的に、OBJ、FBX、Alembic などの形式で保存されています。これらのデータセットには、可視化、シミュレーション、または機械学習(ML)に対する大きな潜在的可能性がありますが、これらのアセットのビジュアル ライブラリを作成することは、複雑で時間のかかるプロセスになる可能性があります。個々のモデルの数が数百個または数千個になると、図 1 に示すような一貫した外観を確保することは困難です。

一貫してレンダリングされた 3D アセットのコレクション。
図 1: Andrew Averkin 氏の厚意による、一貫してレンダリングされた 3D アセットのコレクション。

単純で反復可能なテンプレートを使用して、各アセットを取得し、レンダリングできるとしたらどうでしょう。また、テキスト ファイルを変更するだけで新しいアセットをレンダリングできるように、プロセスを自動化できるとしたらどうでしょう。

多くのアセットにわたるレンダリング プロセスを自動化することで、安定したアニメーションと照明の環境を維持し、命名規則を適用して、一貫してメタデータを入力できます。データは、生成されるとすぐに適切に整理されます。これは、自動化された ML トレーニングや、構造化およびラベル付けされた一連のアセットを必要とするその他のアプリケーションの要件です。

このチュートリアルでは、1)ファイル テンプレートを使用して 3D シーンをプロシージャルに構築する方法、2)ZYNC の Python API を使用してそれらをレンダリングする方法を学習します。ZYNC のレンダリング ファームは、一般的なデジタル コンテンツ作成(DCC)パッケージで動作し、Python API でアクセスすることもできます。

レンダリングの用語

「レンダリングする」とは、視覚効果生成パイプラインの一般的な作業単位です。 「レンダリング」とは、シーンファイルを計算して画像を生成することを意味します。「レンダリングを実行する」とは、シーンファイルをレンダリング ファーム(ここで、複数のコンピュータがそれぞれに 1 つのフレームをレンダリングする)に送信し、そのフレームのデータを計算して、そのフレームをレンダリングすることをいいます。

目標

  • ジオメトリ データのライブラリから画像をプロシージャルに生成します。
  • 多数のジョブを ZYNC に送信して、GCP 上でレンダリングします。
  • 単純な YAML スクリプトを作成して、反復タスクを実行します。

料金

このチュートリアルでは ZYNC Render を使用します。使用する特定のソフトウェア、レンダラ、およびマシンタイプについて、分単位の課金による料金が発生します。同期されたアセットとレンダリングは Cloud Storage に保存されます。詳細については、ZYNC の料金設定ページをご覧ください。

ZYNC の料金計算ツールを使用すると、想定される利用方法に基づいて費用の見積もりを作成できます。ここで使用されているデフォルト構成では、タイプ zync-16vcpu-32gb のプリエンプティブ インスタンス上で Maya / Arnold によってレンダリングされます。GCP の新規ユーザーは無料トライアルの対象となる可能性があります。

このチュートリアルのデフォルト構成、レンダリング解像度、およびソフトウェア選択を利用した場合、各部品のレンダリング費用は約 $4.00 です。次の費用内訳に示すように、3 つの部品すべてを ZYNC でレンダリングするには、約 $12.00 かかります。

費用内訳

始める前に

このチュートリアルでは、ZYNC クライアント アプリケーションを実行してグラフィカルに表示できるコンピュータからのシェルアクセスが必要です。これは、macOS の Terminal、Windows の PowerShell、または Compute Engine の Windows Server インスタンスの Remote Desktop Protocol を使用して、ローカル ワークステーションから実行できます。

Windows の注: このチュートリアルでは、Linux または Linux に似た環境とコマンドライン インターフェースが必要です。Windows の場合、Cygwin や PowerShell などのツールを使用してください。

セットアップ

  1. GCP プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

  2. プロジェクトに対して課金が有効になっていることを確認します。

    課金を有効にする方法について

  3. 必要な ZYNC、Cloud Storage APIを有効にします。

    APIを有効にする

  4. Cloud SDK をインストールして初期化します。
  5. プロジェクト スクリプトが含まれるこのチュートリアルの git リポジトリのクローンを作成します。
    git clone https://github.com/GoogleCloudPlatform/automating-zync-renders

    作成されたディレクトリ automating-zync-renders が作業ディレクトリになります。

  6. 作業ディレクトリに移動して続行します。
    cd automating-zync-renders
  7. インストール前に環境を分離するために、virtualenv を実行します。
    virtualenv --python=python2.7 env
    source env/bin/activate

    詳細については、virtualenv をご覧ください。

  8. 使用する環境に必要なすべての Python パッケージがインストールされていることを確認します。
    pip install -r requirements.txt
  9. 無料の ZYNC アカウント登録し、ZYNC URL を予約します。
    1. 最初の手順で [Google Project ID] 項目に作成されたプロジェクトの ID を使用します。この番号を忘れた場合には、その ID を見つけることができます。
    2. 名前、会社名、またはその他の一意識別子に基づいて、一意の ZYNC URL を選択します。URL [NAME].zync.io が割り当てられます。
    3. 登録後、URL が利用可能になるまで数分かかります。
  10. ZYNC Python API を作業ディレクトリにダウンロードします。後で構成ファイルを更新するときに使用するため、ディレクトリ パスを書き留めておきます。このチュートリアルの互換性を確実にするために、特定の commit バージョンがここに含まれています。[NAME] を、ZYNC アカウントの登録時に選択した一意の URL で置き換えます。
    git clone https://github.com/zync/zync-python
    cd zync-python
    git checkout 927ea857782a0e3245cff3470f749892e572c55c
    echo 'ZYNC_URL = "https://[NAME].zync.io"' > config.py
  11. ローカル ワークステーションで ZYNC クライアント アプリケーションをダウンロードし、インストールして起動します。

ZYNC 登録プロセスで予約した URL https://[NAME].zync.io に移動すると、[My Account] > [Usage] にある [Breakdown by jobs] パネルで ZYNC の使用状況を確認できます。

ZYNC プロジェクトの構成と設定の詳細については、ZYNC のドキュメント ページをご覧ください。

生成パイプラインの概要

このチュートリアルを完了するために 3D ソフトウェアにアクセスする必要はありませんが、アクセス権がない場合、アセットや環境を編集することはできません。このチュートリアルのリポジトリには元々 Autodesk Maya で作成されたファイルが含まれ、rigs ディレクトリに置かれています。

レンダリング環境を変更する場合やその他のソフトウェア要件がある場合は、アプリケーション間の相違に対応するために、パイプラインを変更する必要があります。

図 2 に、レンダリング プロセスの概要を示します。

レンダリング生成パイプライン
図 2: レンダリング生成パイプライン。

コンポーネントの理解

各アセットは同一の環境でレンダリングされます。この環境は、多数のテンプレートまたはリグの組み合わせで構成されています。各テンプレート ファイルは rigs ディレクトリ下の作業ディレクトリにあり、mayaAscii 形式という、Maya ネイティブの人間が読めるファイル形式になっています。次のリグが含まれています。

テンプレートまたはリグ ファイル名 説明
基本テンプレート base_scene_template.ma カメラリグ、ライトリグ、および個々のアセットを参照するための文字列置換を実行する空の Maya ASCII ファイル。
カメラリグ cam_rig.ma アニメーション カメラを含む Maya ASCII ファイル。
ライトリグ light_rig.ma シームレスな環境の背景と 3 つのライトを含む Maya ASCII ファイル。このファイルには、Arnold レンダリングを実行するように構成されたレンダリング設定も含まれています。

モデルの準備

この例では、一般的にキットバッシングとして知られているランダムな機械部品のコレクションに基づいた 3D ジオメトリ アセット(部品)のライブラリを使用します。ライトリグとカメラリグで同じ方法で各部品を処理するには、各モデルの 3D(方向、スケール、位置)のワールドスペース配置が一貫している必要があります。3 つのアセットの一貫したレンダリングの例、およびワールドスペースへの配置については、図 3 をご覧ください。

レンダリング生成パイプライン
図 3: レンダリングのために準備された 3 つのアセット。上段: ワイヤフレーム ビュー。下段: 最終的にレンダリングされた画像。各アセットは、一貫した照明とスケーリングで原点に中心がくるように配置されています。

レンダリング用にモデルを準備するには、各部品が次のようになっていることを確認する必要があります。

  • 専用のファイルにある。
  • 一貫した命名規則に準拠している。
  • 原点を中心としている。
  • 他のすべての部品に相対的にスケーリングされている。

このチュートリアルに含まれているファイルはすべて、これらの要件を満たしています。

GCP での認証

ローカル ワークステーション上の ZYNC が GCP と通信するためのサービス アカウントキーを作成します。

  1. コンソールで、[API とサービス] > [認証情報] の [認証情報] ページに移動します。
  2. [認証情報を作成] > [サービス アカウントキー] を選択します。

    認証情報の作成

  3. 次の値を入力します。[サービス アカウント名] に値を入力すると [サービス アカウント ID] の値が自動入力されますが、別の値に変更することもできます。

    • [サービス アカウント]: New service account
    • [サービス アカウント名]: zync-api
    • [役割]: Storage Admin

      [役割] を設定するには、[役割を選択] をクリックし、リストを [ストレージ] までスクロールして、[ストレージ管理者] を選択します。

    • [サービス アカウント ID]: zync-api

    • [キーのタイプ]: JSON

    認証情報の値

  4. [作成] をクリックします。JSON ファイルがローカル ワークステーションにダウンロードされます。JSON ファイルを作業ディレクトリのルートに移動します。

構成ファイルの更新

パイプラインは、作業ディレクトリ内の YAML 構成ファイルを読み取る Python スクリプトを実行します。構成ファイルには、認証ファイルを含むすべてのファイルへのパスと、その他の ZYNC およびプロジェクト固有の設定が含まれています。

  1. 作業ディレクトリで、projectData.config-template テンプレート構成ファイルを見つけます。

  2. 作業ディレクトリで構成ファイルのコピーを作成し、名前を projectData.config に変更します。

    cp projectData.config-template projectData.config
    

構成ファイルについて

構成ファイル例のいくつかのデフォルト値には、該当するユーザーデータ、ローカルパス、ファイル名を入力する必要があります。このチュートリアルを実行するには、gcp_projectbase_pathauth_filezync_lib_path の設定のデフォルト値を変更する必要があります。

次のリストは、projectData.config-template 構成ファイルに出現する順序で変数を示しています。

gcp_project
このチュートリアルで使用している Cloud プロジェクト ID。
base_path
作業ディレクトリへの絶対パス。
auth_file
GCP での認証で生成された承認ファイルへの相対パスまたは絶対パス。
zync_lib_path
セットアップ時にインストールした ZYNC Python API への絶対パス。
scene_template
base_scene_template.ma への相対パス。
camera_rig
cam_rig.ma への相対パス。
light_rig
light_rig.ma への相対パス。
scene_dir
組み立てられたシーンファイルが書き込まれるディレクトリへの相対パス。これらのファイルが生成された後、ZYNC にアップロードされてレンダリングされます。
image_dir
最終的にレンダリングされた画像が書き込まれるディレクトリへの相対パス。
parts_dir
個々のジオメトリ ファイルを含むディレクトリへの相対パス。
parts
反復処理を行う個々のジオメトリ ファイル名のリスト(名前のみ、パスなし)。

レンダリングの実行

構成ファイルが正しく設定されたら、render.py スクリプトを使って最初のレンダリングを ZYNC で開始します。コマンドラインからプロジェクト ディレクトリに移動し、レンダリングを開始します。

cd automating-zync-renders
./render.py --config projectData.config

最初にスクリプトを実行すると、ブラウザで Google アカウントの認証を求めるメッセージが表示されることがあります。

render.py スクリプトは、生成パイプラインの概要に記載されているプロセスの詳細を出力します。デフォルトのロギングレベルが 4(INFO)に設定されていることに注意してください。デフォルトのロギングレベルをオーバーライドし、--verbose フラグを使用してより多くの出力を提供できます。詳細については、--help フラグを使用してください。

レンダリングのモニタリング

スクリプトの実行後、ジョブが実行されていることを確認するには、ZYNC 登録プロセスの一部として予約した https://[NAME].zync.io URL に移動します。ZYNC がレンダリング インスタンスをデプロイして割り当てるまでに、最大 5 分かかることがあります。図 4 に示すように、[Machines] パネルにインスタンスが表示されます。

ZYNC コンソール
図 4: ZYNC コンソール。

ジョブがレンダリングのために送信された後、ZYNC クライアント アプリケーションはローカル ワークステーションから Cloud Storage にファイルをアップロードします。[Job Details] パネル、および ZYNC クライアント アプリケーションの [Log] タブで、アップロードの進行状況を表示できます。

render.py スクリプトを実行すると、3 つの ZYNC レンダリング ジョブが表示されます。各ジョブは、projectData.config 内の parts 下にある Alembic ファイルのリストから描画される、それぞれ異なる部品のフレーム 1~1,000 をレンダリングします。

ZYNC を使用すると、いくつでも必要なだけのジョブを起動できます。ジョブは、リソースの可用性とジョブの優先度に基づいて自動的にキューに入れられます。このチュートリアルでは、Python API を使用してジョブを ZYNC に送信します。他の一般的な 3D アプリケーションを使用してジョブを送信することもできます。ジョブは一度にすべて、または一度に 1 つずつ起動できます。

ZYNC の詳細については、そのドキュメントをご覧ください。

独自のジオメトリのレンダリング

このパイプラインで独自のジオメトリをレンダリングするには、Alembic 形式へのエクスポートが可能な 3D アプリケーションにアクセスする必要があります。手順は次のとおりです。

  1. モデルの準備の説明に沿って部品を準備します。
  2. Alembic 形式のモデルを parts ディレクトリにエクスポートします。
  3. parts ディレクトリ内のエクスポートされたすべてのファイルの名前を、part#.abc という命名規則に従って変更します。render.py スクリプトに指定する部品番号の長さに制限はありません。1000 未満の番号は 4 桁になるようにゼロが付加されます。
  4. projectData.config で、部品のデフォルト リストを独自の Alembic ファイル名に置き換えます。
  5. レンダリングの実行の手順を実施します。

Cloud Storage への最終的なレンダリングの push

レンダリングが完了すると、ZYNC クライアント アプリケーションは images/[PART_NAME] 下の作業ディレクトリにそれらを自動的にダウンロードします。

ジョブの送信中に、Cloud Storage バケットが gs://[PROJECT-ID]-renders という名前で作成されます。


  1. フレーム範囲全体のレンダリングとダウンロードが完了したら、images ディレクトリに移動し、gsutil を使用して画像ディレクトリをバケットにコピーします。

    cd images/
    
    gsutil -m cp -r [PART-NAME] gs://[PROJECT-ID]-renders/
    

    例:

    gsutil -m cp -r part01 gs://cad-iot-ml-renders
    
  2. また、gsutilrsync 機能を使用して、images ディレクトリ内のすべてのディレクトリをレンダリング バケットにアップロードすることもできます。

    gsutil -m rsync -r . gs://[PROJECT-ID]-renders
    

トラブルシューティング

このチュートリアルは、ローカルベースのワークフローとクラウドベースのワークフローの両方に依存しているため、一部の手順が期待どおりに機能しない場合があります。このセクションでは、一般的な課題とその解決方法について説明します。

作業ディレクトリ

このチュートリアルのほとんどは、セットアップの手順 5 で作成した作業ディレクトリを基点にしています。含まれているスクリプトの中には、絶対パスと相対パスの両方を処理するものもありますが、projectData.config ようなファイルは、ZYNC Render のデプロイに必要なファイルとリグを見つける際に相対パスに依存します。

次の点を確認してください。

  • 作業ディレクトリ内のすべてのコンテンツがダウンロード後も作業ディレクトリに残っている。
  • 作業ディレクトリへの読み書きの権限と、作業ディレクトリ内に新しいディレクトリを作成する権限がある。

Python ライブラリのインストールの確認

render.py スクリプトを実行するには、いくつかの Python ライブラリが必要です。こうしたライブラリは requirements.txt にリストされており、セットアップの手順 8 でインストールされます。これらのライブラリが正しくインストールされていることを確認するには、Python シェルを開いて次のように入力します。

from google.cloud import storage
import yaml

エラーが返されない場合、これらのライブラリは存在します。これらのライブラリが存在しない場合、次のようなエラー メッセージが表示されます。

ImportError: No module named yaml
ImportError: cannot import name storage

render.py の認証エラー

render.py スクリプトの実行時に認証エラーが発生した場合は、GCP での認証で作成したキーに一意のサービス アカウント名が設定されていることを確認してください。サービス アカウント名を再利用すると、認証が失敗する可能性があります。

ZYNC ジョブの送信中のエラー

render.py スクリプトを実行しているときに、次のような ZYNC 接続エラーが発生する場合があります。

zync.ZyncConnectionError: ZYNC is down at URL: https://[NAME].zync.io

以下をご確認ください。

  • ブラウザで URL に移動して、ZYNC URL が実行中であることを確認します。
  • config.pyZYNC_URL の値が、セットアップの手順 9 で説明している ZYNC URL と正確に同じであることを確認します。

ファイルが見つからない

ZYNC の送信中に 'Files not found' エラーが発生した場合は、作業ディレクトリ内のすべてのファイルが読み取り可能になっていることを確認してください。

レンダリング ログの表示

ZYNC コンソールでは、各サブジョブ(「チャンク」)が [Tasks] パネルにリストされます。

レンダリング ログの表示

[Log] 列にある [maya] リンクをクリックすると、関連するチャンクのログ出力が表示されます。レンダリング ログは、レンダリングに失敗した場合に最初に確認すべき場所です。

レンダリングがダウンロードされない

各チャンクが完成した後、ZYNC Render ではレンダリングされた画像をローカル ワークステーションにダウンロードすることを自動的に試みます。コンピュータをスリープ状態にした場合、Google アカウントからログアウトした場合、または ZYNC クライアント アプリケーションを終了した場合、レンダリング ジョブは続行され、レンダリングされたフレームは ZYNC アカウントのストレージに保存されます。再接続したとき、ログインしなおしたとき、または ZYNC クライアント アプリケーションを起動したとき、ZYNC によってフレームのダウンロードが再開されます。

ダウンロード ジョブが失敗した場合は、次の方法でチャンクを強制的に再ダウンロードできます。

  1. [Tasks] パネルの左の列のチェックボックスをオンにして、ダウンロードするチャンクを選択します。
  2. 右上にある [Task] の下のメニューをクリックして、[Redownload Task(s)] を選択します。

    タスクの再ダウンロード

ZYNC アクティビティのモニタリング

ローカル ワークステーションと ZYNC Render との間の通信はすべて、ZYNC クライアント アプリケーションを経由します。ZYNC クライアント アプリケーションで [Log] タブを選択すると、ZYNC アクティビティ ログを表示できます。

ZYNC アクティビティ ログ

クリーンアップ

このチュートリアルで使用するリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

ZYNC リソースの削除

ZYNC によってデプロイされたインスタンスは、タスクの完了時、強制終了時、またはエラー発生時に自動的に削除されます。これらのリソースを削除するためのアクションは必要ありません。

保存されたデータの削除

同期されたアセットと完成したレンダリングは Cloud Storage に保存され、月単位で請求されます。データを削除するまで、ストレージに対して課金されます。プロジェクトのデータを ZYNC に保存する必要がなくなった場合は、ZYNC ウェブ コンソールの [My Account page] の [Projects] タブからこれを削除できます。

virtualenv の終了

virtualenv を使用した場合は、シェルに「deactivate」と入力して、この一時的な環境を終了してください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...