ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
USDの基礎の理解
PixarのUniversal Scene Description(USD)の原理をはじめ、これにより優れた3Dアセットやワークフローを構築する仕組みをご確認ください。USDを支える中心概念をはじめ、フォーマットをコンテンツ作成パイプラインに統合する方法について解説します。また、構成を利用したUSD機能で、柔軟性と汎用性に優れたアセットを作成する方法も紹介します。
リソース
- ASWF USD Working Group
- Creating a 3D application with Hydra rendering
- Introduction to Universal Scene Description (USD)
- USDZ schemas for AR
関連ビデオ
WWDC23
WWDC22
WWDC21
-
ダウンロード
♪ メロウな ヒップホップ音楽 ♪ ♪ こんにちは WWDCへようこそ Kaceyです Universal Scene Description (USD)について ご存知でしょうか 拡張現実でUSDを扱ったり 他の形式から USDにアセットを 変換した方もいるでしょう ではUSDファイルの 実際の中身は何でしょうか USDはユニークな機能を持つ 重要な技術ですので 具体的な中身に触れ USDの基本を 一緒に確認していきましょう ここではUSDとは何か USDの基本コンセプト USDでシーンを構成する方法 USDファイル形式に ついて学びます まず USDとは何でしょうか? USDはピクサー・ アニメーション・スタジオが 複雑な動画の制作を 可能にするために開発しました 映画 エンターテインメント その他の産業で 広く使われています 拡張性あるデザインで 共同制作の鍵となる ワークフロー技術として 急速に普及しています 映画業界における数十年の 製作経験をもとに構築された オープンソース プロジェクトで ゲーム シミュレーション AR 製造 eコマースの分野などで採用が進んでいます USDには3つのコア要素があります シーン記述仕様 API レンダリングシステムです AppはAPIを使用して USDとやり取りします レンダリングシステムは 異なるレンダラを使用して シーンの視覚化をサポートします Appleには USD用に複数の レンダリングシステムがあります 詳しくは「USDツールと レンダリングに関する詳細」の セッションをご覧ください 本セッションでは シーン記述仕様に焦点を当て シーンデータの記述法や 整理の仕方 ファイル形式で定められた 表現方法について説明します 基本的に USDファイルには シーンの見せ方を記述した データが含まれています レンダリングするAppが データを解釈し 画面に画像を表示します 例えば 昨年の WWDCセッションで このUSDシーンを作成し Octaneでレンダリングしました では 基本的な概念を理解し レンダリングの背後にある データを見てみましょう シンプルにするために ここではUSDで テキストを表現します USDには たくさんの機能がありますが 時間の都合上 ステージ プリム レイヤなど USDでの作業時に 最も遭遇する基本的な機能に 焦点を当てます まずステージから 始めましょう 劇場での演劇鑑賞を 想像してください 観客として 私たちは俳優の 演技を見るために ステージを観察し 環境 照明 小道具に注目します これはUSDにおけるステージの 仕組みに例えられます ステージとは シーングラフ (データ構造)のことで グラフィック情報を階層的に 整理し すべての シーン要素を 集約したものです ステージは 1つ以上の レイヤで構成され 通常 ファイルには シーン情報が含まれます 一般的にステージは シーンの主要な コンテナオブジェクトである プリムで構成されています プリムは他のプリムを 含むことができ シーンエレメントの 階層を作成できます 例を見てみましょう 左がUSDレイヤの サンプルで 右がステージの ビジュアル表現の プレビューです 球と立方体の 2つのプリムが見えます 各プリムには ステージ上での 表現を定義する 特定のタイプがあります ステージを構成する プリムには メッシュ ライト マテリアルなど 異なるタイプがあります この例では 球のプリムは「Sphere」と 呼ばれるタイプ 立方体のプリムは「Cube」と 呼ばれるタイプです ここで疑問が浮かびます USDはどうやってプリム タイプを判別するのでしょう USDはスキーマを 使ってそれを判別します スキーマとは ステージ上の プリムの役割を定義した 構造化データのことです ジオメトリや マテリアルなどの 一般的なシーンの コンセプトに意味を与えます この例では 球のスキーマ定義を 示しています すべての球に 半径と バウンディングボックスの 範囲が定義されています 既存のスキーマを使うことで USDは シーン記述用にビルトインされた 豊富な基盤を提供できます カスタムスキーマは USDをさらに拡張します 独自のユースケースや ワークフローのために カスタムデータ用の 独自のスキーマを提供できます スキーマは視覚的な 表現である必要はなく 構造化された 意味のある方法で ステージに表示したい データがあれば大丈夫です 例えば ここでは「WWDC」という スキーマを作成しています これはタイトルと年を 関連付けた プリムを定義しています このスキーマを使った 「WWDC22」という プリムになります 年を2022年に設定し タイトルを「Call to code」に 設定しています 年とタイトルは プリムの「属性」と 呼ばれるものです プリムは多くの異なる 属性を持つことができ 各属性には タイプと値があります スキーマを使用するプリムで 明示的に 定義する必要が無いように デフォルト値の 設定が可能です 球のスキーマでは 半径と範囲の属性に 定義された デフォルト値が分かります 子のレイヤには 球のプリムが1つあります Radius属性が 定義されていないため Sphereスキーマの デフォルト値である 1が適用されています 明示的にRadius属性を 設定することもできます スキーマで設定されている デフォルト値の 1と同じなため 球の見た目は変わりません では半径0.5の 2つ目の球を追加します これでもう一方の球の 半分の大きさだと分かります 属性 プリム ステージは メタデータを含むこともでき シーンに補助的な データを提供できる 情報のキー・バリュー ペアとなります メタデータは 適用させる レベルで設定可能です ステージ全体と その中のすべての プリムに影響するメタデータは ステージレベルで設定します 単一のプリムに固有の メタデータは そのプリムに設定します 属性にも メタデータを使用可能です 例えば こちらは典型的な ステージのメタデータです metersPerUnitは シーンの スケール単位を定義します upAxisはX Y Z軸から シーン内のカメラの上方向と 見なす軸を定義します doc文字列は ワークフローの 追跡に役立つ ドキュメントを保存します これらの基本を定義すれば USDの活用が可能になります これらの概念だけを使った パンケーキのシーンを 作り方を見てみましょう レイヤの中に 「Pancakes」という名前の トランスフォームプリムを作成します 次にPancake プリムの子になる 「Blueberry_01」という名前の トランスフォームプリムを追加します Blueberry_01プリムに メッシュプリムを含めます メッシュプリムは ブルーベリーの ジオメトリを保持し マテリアルにバインドします 他のプリムを追加して アセットの 残りを完成させます 基本的な コンセプトのみを使用して 完成したパンケーキの シーンがこちらです
基本だけでも色々できますが 製作が中心の プロジェクトでは 様々なチームの メンバーや組織と 協力する必要があります USDでは このニーズに 対応するために 「コンポジション」という 機能が多数あります コンポジションにより 別々の 単位からシーンを記述し ステージを作成できます これによりシーン内の 3D要素を 効率的に再利用し 共同作業と 高速な 反復作業が可能になります ここでは 最も一般的な構成である レイヤ リファレンス ペイロード variantSetsについて説明します 楽しい方法で やってみましょう チェスはお好きですか? チェスセットの シーンを構築しましょう このシーンでは カタログレイヤの アセットを使い チェスの駒を参照します そして駒を レイアウトレイヤで チェス盤に配置して 最終結果を見ます この結果はChessSet レイヤで確認できます まず チェスの 駒を用意します チェスには 6つの駒があります ポーン ルーク ビショップ ナイト クイーン キングです Object Captureで作成した アセットを使い チェスセットを完成させます まず USDの概念である リファレンスを使い ステージに駒を持ち込みます リファレンスとは あるステージのプリムが データをコピーすることなく 同じステージや 別のレイヤのプリムを 参照することを意味します これにより データの 重複を最小限に抑え 異なる担当者やAppから 別々にデータを更新可能です ポーンアセットを シーンで参照してみましょう カタログレイヤに 「Pawn」というプリムを定義します 今のところデータは無いので ステージは空のままです 次に Pawn.usdaレイヤへの 参照を追加します これでポーン アセットが持ち込まれ カタログレイヤに 表示されました しかしUSDはどうやって 取り込むべきプリムを 判別するのでしょうか? このプリムはdefaultPrim メタデータで指定できます defaultPrimメタデータは ステージ上で定義され このシーンを 別のステージで使用する際 参照すべき プリムを指定します USDアセットには必ずdefaultPrimを 記述することをおすすめします ポーンアセットで defaultPrimの記述を 確認しましょう アセットのステージレベルで defaultPrimメタデータを 確認できます うまく行きましたね またdefaultPrimが 記述されていない場合や defaultPrimとは 別のプリムを 参照したい場合には 参照するレイヤの プリムのパスを 階層内の 任意の場所で 明示的に指定できます USDのパスは ステージ上の エレメントの識別に使用されます プリムのパスは プリムの一意な識別子です 例えば このステージでは 3つのプリムがあります Worldプリムには /Worldの パスが設定されています ポーンとナイトのプリムは Worldプリムの 子プリムとして扱われます つまり ポーンプリムのパスは /World/Pawnとなり ナイトプリムのパスは /World/Knightになります これを念頭に ここで参照する際には ポーンプリムのパスを 明示的に設定できます 大きなシーンの場合 すべての シーン情報を一度に 読み込むとコストが掛かります USDでは「ペイロード」と 呼ばれる タイプのリファレンスで ステージへのシーン記述の 読み込みを遅らせることができます 複雑なジオメトリなどの 大きなデータセットや 小道具や キャラクターを示す大きな シーングラフの参照には ペイロードの使用をおすすめします
この参照アセットを ペイロードに変換して チェスの駒の読み込みを 遅らせることができます ペイロードを 読み込まない場合 シーンを開くと 最初は空のままです ペイロードの 読み込みを有効にすると すべての駒を 見ることができます これでシーン内に 駒が入ったので チェス盤に 並べることができます これはUSDの レイヤを利用して さらに別のレイヤで 行うことができます Photoshopや Affinity Photoなどの 画像編集ソフトと同様に レイヤを 重ねることが可能です より上にある レイヤのプリムは より強いとみなされ 下のレイヤのデータを 追加したり上書きできます ご覧の通り 駒の現在の位置は 間違っていますが レイヤを使って 他のレイヤに非破壊的な 変更を加えられます これはカタログレイヤを 編集せずに駒を移動させる 最適な方法です ではやり方を見てみましょう まず 最終的なシーンとなる 「ChessSet」という 新しいステージを作成します レイヤの一番上には 「sublayers」という メタデータがあります カタログレイヤで 駒を取り込みます 次に 駒を動かすために 「Layout.usda」という 新しいレイヤを作成します このレイアウトレイヤは 駒の位置を保持しています シーン内の駒の位置を 上書きしてみましょう まず Pawn_01から始めます トランスレーション 属性を変更して ポーンアセットの 位置を変更します これでシーンに加えられた 変更を見てみましょう これはレイアウトレイヤ無しの チェスセットです ポーンはまだ 元の位置にあります レイアウトレイヤを 追加すると ポーンはチェス盤の 本来の位置に移動しました 他の駒も同様に 正しい位置に 移動させましょう
他の駒も ポーンと 同じ方法で配置します こちらがPawn_02のやり方です Pawn_03 以降も繰り返します レイアウトレイヤの 変更を終え チェスの駒が正しい位置に セットされました
これで半分の駒が出来ました レイヤを使って カタログレイヤを取り込み レイアウトレイヤで 上書きして チェス盤に配置しました
次に相手側の 駒をセットします 相手側の駒は色が違うことに 注意してください 新しいアセットを 作る代わりに 別のUSDの概念である VariantSetsを使って 駒のアセットを更新します VariantSetsは ステージ上の 個別に選択したアセットを 動的にスワップできます VariantSetのバリアントは 異なる素材 ジオメトリなど USDで表現できるものなら 何でも構いません ステージ上のバリアントは 非破壊的に切り替えられます 駒の素材を切り替えるため VariantSetを 設定します ポーンアセットに 「color」という variantSetを追加して 色を切り替えます これで2つのvariantSetを 追加できました 暗い素材を使うDarkと 明るい素材を使うLightです 最後に デフォルト バリアントを設定して ポーンをステージに読み込むときの バリアントを指定します カタログレイヤに 戻ってきました 盤上にすべての駒を 配置しましたが すべて明るい 素材を使っています デフォルトのバリアントが 明るい素材に なっているためです ポーンのバリアントを 暗い素材に変えてみましょう バリアントを Darkに設定します 相手側のポーンが1つ 暗い素材になりました 他の駒にも 変更を適用してみましょう これでチェスセットが 完成しました
シーンの最適化に使える もう1つのUSD概念があります シーングラフの インスタンス化です シーングラフの インスタンス化によって ステージ上のシーングラフの 一部を何度も再利用して 葉っぱや家具 今回紹介したチェスの駒など 複数の物体を含むものを 表現できます インスタンス化を使用すると Appのメモリとパフォーマンスの 両方が改善されます インスタンス化を 使用するには プリムや シーングラフの一部に インスタンス メタデータを指定します インスタンス化された すべてのプリムは 同じシーングラフを 共有する候補となります シーンのプリムを インスタンス化しましょう カタログファイルで チェスの駒のプリムに 「instanceable」というメタデータを 追加し 値をtrueに設定します このメタデータを追加することで USDはこれらのアセットを 各プリムにデータを重複させずに 同じデータを共有する インスタンス化が可能な プリムとして扱うようになります チェスセットの 見た目は同じですが パフォーマンスと メモリ効率が向上しています これでチェスセットが 完成しました 見た目も良く USDの機能を たくさん使っています
レイヤ リファレンス ペイロード variantSetsは USDで定義されている コンポジションのほんの一部です USDでシーングラフを 構成する際に 一貫した シーン表現を行うために 決められた強さの順序があります コンポジションやオーダーの 頭文字である LIVRPSについての詳細は PixarのUSDに関する ドキュメントをご覧ください このセッションでは USDファイルの中身について お話しました 次にファイルそのものと ディスク上での表示の され方についてお話します USDファイルには 複数の種類があります 読み取り可能な ASCIIテキストを含む USDファイルには .usdaの拡張子が付けられます このセッションでも このファイルを使ってきました より小さく効率的な バイナリファイルは crate形式で .usdcの 拡張子が付けられます .usdの拡張子を持つ ファイルもあります ASCIIテキストと バイナリ crateファイルの両方が可能です USDには パッケージング形式があり 複数のUSDファイルや テクスチャなどの 関連補助ファイルを .usdz拡張子を持つ 無圧縮の zipアーカイブに格納できます 本日はUSDの基本的な 概念である ステージ レイヤ プリム スキーマ 属性 メタデータについて学びました これらの概念を使って チェスセットを作り リファレンス ペイロード デフォルトプリム プリムパス レイヤ インスタンス化を利用しました 最後にUSDの ファイル形式である .usda .usdc .usd .usdzを紹介しました PixarのUSDに関する ドキュメントを 更に詳しくご覧いただき ご自身のAppで 機能をフル活用させて みてください ありがとうございました ♪
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。