Search Unity

Pixar の Universal Scene Description、Unity 用のプレビュー版が公開

, 3月 28, 2019

Pixar の Universal Scene Description(USD)は、大規模なアセットパイプラインを対象とし、並列ワークフローに特に重点を置いたファイルフォーマットです。Apple でも最近、AR アプリケーション向けに USDZ という形式でこのフォーマットを採用しました。Unity 用には USD Unity SDK がプレビューパッケージとしてリリースされています。このパッケージを利用すると、既存の USD と Unity の統合が大幅に拡張されます。本記事では、サポートされる機能と使い方について簡単に説明します。

スタートガイド

使用を始めるには、パッケージマネージャー(「Window」 > 「Package Manager」)を開き、(「Advanced」オプションで)プレビューパッケージを有効にして、「USD」を検索してインストールボタンをクリックします。

USD インポーターはリニア色空間を使用するように設計されているため、シーンの色空間が「Linear」に設定されていることを確認します。

このパッケージでは、スタンドアロンプレイヤービルド(現在は OSX と Windows のみ)のために .NET 4.x API 互換性も必要です。これも、次のように Project 設定で設定します。

+最後に、最高の忠実度で頂点スキニングを可能にするために、プロジェクトの画質設定で「Skin Weights」を「Unlimited」に設定します(Unity 2019 以降)。

サンプルシーンを使った作業

USD パッケージとランタイムコンポーネントの使い方を学べるように、いくつかのサンプルシーンが用意されています。Unity 2019.1 以降で作業する場合、これらのパッケージサンプルにはパッケージマネージャーからアクセスして、簡単に、プロジェクトに直接インポートできます。それ以前のバージョンの Unity の場合には、Film & TV Toolbox リポジトリからアセットパッケージとしてこれらのサンプルを入手できます。

要件

USD パッケージは、Windows/OSX(エディターおよびプレイヤー)でサポートされており、Unity 2018.3(2018.3.4f1 以上)および 2019.1(2019.1.0b2 以上)と互換性があります。

アセットのインポートとエクスポート

USD パッケージをインストールすると、最上部に新しく表示される「USD」メニューから、USD アセットのインポートとエクスポートができます。USD でサポートされているファイルタイプ(.usd、.usda(ASCII/テキスト)、.usdc(バイナリ)、Alembic .abc ファイルなど)はすべてインポートできます。

アセットは、プレハブとしてインポートして何度も再利用したり、ゲームオブジェクトとしてインポートして素早く試してみたりできます。また、Timeline と併せて使用する必要があるアニメーションクリップの場合は、Timeline クリップとしてインポートできます。

インポートされたアセットには必ず、UsdAsset コンポーネントを備えたルートオブジェクトがあります。このコンポーネントは、ソース USD ファイルへのパスを保持しています。このパスは有効なファイルの場所を指し、相対プロジェクトパスと絶対パスのどちらの場合もあります。このようにすることによって、一般的な Unity プロジェクト中心のワークフローと大規模なアセットパイプラインワークフローをサポートしています。

UsdAsset コンポーネントには、インポートポリシーとインポートするアセット要素を制御するオプションがあります。また、USD から値を再読み込みするボタン、USD から完全に再インポートするボタン、すべての USD コンポーネントを削除するボタンもあります。「Advanced」タブは、より詳細にインポートプロセスを制御する必要のある上級ユーザー用です。

カメラ

カメラをインポート/エクスポートしたり、Timeline を使用してアニメーション化したりすることができます。クリッピング平面とカメラ投影はカメラの位置と向きと一緒に保持されます。

マテリアルとシェーディング

USD アセットには、ジオメトリに関連付けられたマテリアルが含まれていることがあります。Unity インポーターでサポートされているマテリアルシステムは、Pixar の「display color」と「preview surface」の 2 つです。display color はアルベドとアルファ頂点色に限定されており、preview surface は HD レンダーパイプライン(HDRP)リットサーフェスシェーダーに類似しています。

マテリアルは、組み込みのレンダーパイプライン、HDRP、またはライトウェイトレンダーパイプライン(LWRP)からインポートまたはエクスポートできます。カスタムエクスポーターは単純なインターフェースを使用して記述することができ、カスタムの Unity シェーダーパラメーターはエクスポートおよびインポート時に自動的に保存されます。

頂点スキニング

USD ディストリビューションには、UsdSkel を通じた頂点スキニングの形でスケルトン変形サポートが含まれています。アセットに UsdSkel スケルトンリグが含まれている場合、SkinnedMeshRenderer として自動的に Unity にインポートされます。同様に、SkinnedMeshRenderer を含むモデルをエクスポートする場合は、UsdSkel スケルトンとしてエクスポートされます。以下に、『The Blacksmith』のキャラクター、Volund を頂点スキニングを使用して USD にエクスポートし、USD ファイル調査用の外部ビューアー「usdview」で表示した例を示します。

USD のバリアント

Universal Scene Description には、オブジェクトのバリアントを作成するという強力な機能があります。Pixar が提供している USD キッチンセットの例を見ると、バリアントを使用してジオメトリバリアントやシェーディングバリアントを作成する方法がわかります。以下の例では、選択したクレヨンを新品や使いかけにしたり(ジオメトリバリアント)、色をいくつかのシェーディングバリアントから選択したりできます。

USD ペイロード

USD ペイロードは、シーンのサブセットを選択的にロード/アンロードするメカニズムを提供することで、非常に大規模なアセットの構築を可能にします。ペイロードがアンロードされると、メモリ内の Unity のシーンや USD シーンからデータが存在しなくなり、アンロードしたアセットの効率が大幅に高まります。

ペイロードを使用して作成された USD アセットは、最初は空の状態で表示され、必要に応じて大規模なシーンを段階的にロードできるようになっています。ペイロードのロード/アンロードは USD メニューから、UsdPayload コンポーネントを使用するか、ルート USD ゲームオブジェクトのデフォルトポリシーを変更することで行なえます。

ストリーミング再生

USD アニメーションキャッシュとスケルタルアニメーションは、Timeline を使用して Unity にストリーミングできます。アニメーションの各フレームはディスクからオンデマンドでストリーミングされるため、大規模なアニメーションキャッシュを効率的に再生できます。USD ファイルは、シーンヒエラルキー内の 1 つの UsdAsset に適用する Timeline アニメーションクリップとして使用できます。さらにパフォーマンスを向上するために、再生が C# Job System に統合されているので、ディスクから読み取られたデータが、複数のスレッドから Unity にストリーミングされます。

Timeline Recorder

ストリーミング再生と同様に、Timeline USD Recorder トラックを追加して、特定のフレーム範囲のアニメーションをキャプチャーできます。レコーダートラックを追加するには、既存の Timeline を右クリックし、「Formats.Unity.USD」 > 「Usd Recorder Track」を選択して新しいトラックを追加します。その後、そのレコーダートラックを右クリックして「Add USD Recorder Clip」を選択して、レコーダークリップを追加します。

属性インスペクター

時折、基礎となる USD データをファイル内にある形のままで調査できると便利なことがあります。通常は usdview などの外部ビューアーを使用しますが、UsdPrimSource コンポーネントを展開することによって、このデータを Unity で直接調べることもできます。展開すると、基礎となる USD Prim(USD でゲームオブジェクトに相当する)上に作成されたすべての属性を調査することができます。

属性に関する USD の宣言も見ることができます。これは、デバッグをするうえでも、そのデータが本来どのように作成されたかを知るうえでも役立ちます。属性が公式スキーマに含まれている場合、この出力には、その属性に関するドキュメンテーションも含まれます。

次のステップ

USD Unity SDK の最新リリースによって、これまで以上に簡単に、ピクサーの Universal Scene Description を使い始めることができるようになっています。これらのツールを使えば、Unity に長編映画制作にも耐えうる規模のパイプラインを作成できます。USD レイヤーのおかげで、多くのアーティストが同一のアセットに同時に取り組んでも、ファイルがロックされることなく、他者の作業を邪魔することのない、ノンブロッキングなワークフローが実現します。

私たちは、世界はより多くのクリエイターがいるほど、より良い場所であると信じています。皆さんの創作物について、フォーラムでぜひお聞かせください。

コメント受付を終了しました。

  1. Thank you, Jeremy, for all your work bringing this to fruition.

  2. Thanks for this, I’m needing AR asset streaming for 8 different projects, and USD is the route I’m going to take. GLTF/Umbra is going to take a beating on this one.

  3. Is there a way to update the contents of the USD and see those changes updated in the unity scene? I don´t seem to be able to update it unless I reimport the USD.

    1. There is a refresh button in the upper right corner of the UsdAsset component, is that what you’re looking for? The API that this button calls is also publicly exposed on the UsdAsset MonBehaviour.

      If that is still too heavy, the SetTime( ) API is what Timeline uses and is optimized for playback, if what you want is a super light-weight update (just for deforming points, etc).

    2. There is a refresh button in the upper right corner of the UsdAsset component, is that what you’re looking for? The API that this button calls is also publicly exposed on the UsdAsset MonBehaviour.

      If that is still too heavy, the SetTime( ) API is what Timeline uses and is optimized for playback, if what you want is a super light-weight update (just for deforming points, etc).

  4. This is awesome news! Does this preview include USDZ support to allow for runtime importation of USDZ models for Unity-based AR applications?

    1. USDZ *export* is fully supported for creating AR models, but import support is currently limited (it does not yet support importing textures from USDZ).