ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
USDを使用する
Universal Scene Description(USD)を使用すると、安定した3Dシーンを描写することができ、エンジニアとアーティストがクリエイティブのワークフロー全体でシームレスにコラボレーションすることができます。このセッションでは、USDの強力な機能と、その優れた拡張性を紹介します。USDアセットの作成方法と、ARKitとRealityKitで使用するusdzコンテンツの作成に関する詳しい情報についてご確認ください。
リソース
関連ビデオ
WWDC21
WWDC20
WWDC19
-
ダウンロード
(音楽)
(拍手) こんにちは “Working with USD”へようこそ デニス・コバチです クロエ・ムーアと2人で進めます 昨年 iOSのAR Quick Lookを 紹介しました 3Dコンテンツを簡単に ARで見ることができます
購入したい商品のモデルも 見られます 実際のサイズ感を確認できるのです デバイスを動かしても モデルは その場にしっかり固定されています
実際の照明条件に合わせて レンダリングされるので 実物を部屋に置いた感じが よくわかります 光沢のあるクロムめっきのランプにも 部屋の光が反映されます
ARは楽しいものです 3Dコンテンツを 直感的に楽しませてくれます
このようなAR体験を支えるのが 昨年 紹介した ファイルフォーマットのUSDZです
アプリケーションやフレームワークと 深く統合されているため メッセージやメールで ARを共有できます インタラクティブなNewsを 体験したり Webで見つけた新体験を Safariを通じて ダイレクトにARで見られます USDZを使った アプリケーションも作れます
USDZの基礎となる技術がUSDで― このセッションのメインテーマです
では今日のトピックです 1つめはUSDとは何か? 次にUSDZの作成や変換の ワークフロー 残りの時間を使って USDに関する理解を深めていきます 3Dファイルフォーマットに 共通する基礎から始めて 最後はUSD固有の機能について
さて USDとは何か?
Universal Scene Descriptionの 略です 3Dファイルフォーマットであり C++ライブラリをサポートします Pythonバインディングは Pixarが開発したものです
このライブラリはUSDファイルの 読み書きができます
コンポジションエンジンなど 様々な機能があります 注目すべきはスピードと― 拡張性と共同作業です USDに関連する拡張子は3種類です プレーンテキストのUSDA これは 人間が読めることを目的として 設計されたものです バイナリのUSDC これは読み書きが効率的です USDは どちらのタイプにも 使われます
この3つを自由に使えます
そしてUSDZです 詳しく見てみましょう
USDZとは何か? USDの配布フォーマットです 3Dシーンの全データを 1つのファイルにまとめたものです 共有用に最適化された AR Quick Lookの基盤です iOS macOS tvOSが サポートしています USDZファイルの構造を見てみると 非圧縮のZIPアーカイブです すべてのファイルは 64バイトでアラインされています 最も効率的なメモリマッピングです
このアーカイブには 2種類のファイルが含まれます 1つは Scene description fileです
USDA USD USDC USDZの フォーマットで ネストしたアーカイブができます もう1つはテクスチャで PNGやJPEGです
ファイルフォーマットを ざっと比較してみましょう
一番簡単なものはOBJで 基本的に中身は3Dモデル1つです マテリアルは制限され アニメーションは扱えません
こちらはもっと新しい ファイルフォーマット群です シーングラフで表した 複数のモデルを持てます 複数のマテリアルや アニメーションにも対応しています
USDはすべてに対応しながら 拡張性も備えています Pixarが映画用に開発しました 共同作業にも対応しています 複数人が1つのシーンを作業しても お互いの邪魔をしません
USDZはアーカイブパッケージとして これらの機能を継承しています
次にワークフローを 見ていきましょう
2つのカテゴリに分けられます 既存アセットの変換と 新しいアセットの作成です
変換から始めましょう
アセットがあるとします フォーマットが異なる FBXやglTFです それをUSDZに変換するとします 自作のアプリケーションや AR Quick Look用です
ここでコマンドラインツール usdzconvertを紹介します 昨年のXcodeのコンバータに 代わるものです より多くのフォーマットに 対応しています FBXやglTFなどです アセットのバリデーションもします 正しいUSDZファイルか 確認できます Pythonベースで プラットフォームに依存しません そのため このコンバータは macOSの他のプラットフォームの パイプラインと 統合しやすいのです
いくつかサンプルがあります glFTファイルをusdzconvertで USDZに変換します バリデーションも実行されるのが わかりますね
コマンドラインオプションは すべて“-h”で確認できます
細かいマテリアルの定義も コマンドラインから 直接 設定できます 細かいマテリアル定義を持たない OBJなどには便利です
usdzconvertは 提供パッケージの一部です プリコンパイルされたmacOS用の USDライブラリや他のものも含みます
例えば USDコマンドラインツールです このusdcatはUSDZファイルの中身を テキストで表示してくれます
usdtreeはモデルの階層を 見るのに便利です
usdcheckerはバリデータです
fixOpacityという スクリプトもあります 昨年 AR Quick Look用に 透過にしたモデルが iOS 13で不透明に見える場合は スクリプトで修正します
デモはクロエがお見せします (拍手) ありがとう デニス プリコンパイルされたUSDの Pythonライブラリのダウンロードは こちらから行えます あらかじめ用意しておきました USDフォルダにはプリコンパイルされた USDのPythonライブラリと Pixarが提供するusdtreeやusdcatなどの コマンドラインツール一式があります usdzconvertフォルダには usdzconvertとfixOpacity 環境変数を設定する USD.commandもあります ダブルクリックで ターミナルウインドウが開きます
usdzconvertから始めましょう これだけで実行すると 引数が表示されます
変換したいglTFファイルが あるとします
ファイル名を指定して 実行するだけです
生成されたアセットを 見てみましょう
すべてのマテリアルと アニメーションが入っています
ご覧のとおり usdzconvertは バリデーションも行います
次にマテリアルのないOBJを 変換します
この4面体です
オプション引数で マテリアルを設定できます 例として色をつけます
マテリアルが設定されましたね
モデルの構造を見るには usdtreeを使います
マテリアルとメッシュがあります
モデルの詳細をテキストで見るには usdcatを使います
別の使用例をお見せします OBJファイルと―
テクスチャがあります
テクスチャの適用は 色の設定と同様に簡単です
USDZは 非圧縮のZIPアーカイブです 中身を調べる簡単な方法は zipinfoです
USDCファイルがあるのがわかります テクスチャもありますね
すべてのテクスチャが 適用されています
まとめましょう usdzconvertで簡単に USDZファイルに変換できます 変換後のアセットの確認に 役立つツールもあります デニスと代わります
(拍手) ありがとう
変換について説明しました 次はUSDZファイルを 一から作る方法です
お好きなオーサリングツールで アセットを作っても構いません FBXなどのフォーマットで エクスポートできると思いますので― それをusdzconvertで USDZに変換することは可能です
ですが USDエクスポート対応の コンテンツ制作アプリケーションが 増えています そのおかげでコンテンツ制作を USDパイプラインに 統合しやすくなります そして このような複雑な変換工程は もっとシンプルな アーカイブ処理に変わります
USDエクスポート対応の 2つの コンテンツ制作ツールを例にあげます これはAdobeの Substance Painterです 3Dオブジェクト用の リアルなマテリアルを作れます
USDとUSDZに対応しています
これは主要な3Dツールの1つ AutodeskのMayaです
USDとUSDZに対応しています プラグインはPixarの提供です
このように 多くのアプリケーションが USDZのダイレクトエクスポートに 対応し USDZの生成工程を簡略化しています
Pythonバインディングなので 特定のコンテンツに合わせた 独自のPythonパイプラインも作れます
次はSceneKitで USDZをエクスポートします SCNSceneを 用意しておくだけで済みます USDZのエクスポートは APIを呼ぶだけです 拡張子は必ず “usdz”にしてください
USDZのエクスポート機能は XcodeのSceneKitエディタにも 組み込まれています USDZエクスポートが UIでも同様に行えます
ワークフローは以上です
では 次に USDの機能を見ていきましょう 冒頭でふれましたが USDには多くの機能があります この場ですべてを取り上げるのは 不可能です
わかりやすいキーコンセプトが いくつかあります
まずは それを見てみましょう
4つ紹介します ファイル構造 シーングラフ メッシュデータ マテリアルです
USDが他と違う点は 読めるようにプレーンテキストを 設計したことです そのため フォーマットは把握しやすく 問題が発生しても 原因を早く特定できるのです
まずはファイル構造から
これはUSDAファイルの抜粋です 最初に気づくのは ネストしたコンテナです USDではPrimと呼びます
Primは実データを格納する プロパティを持ちます
3つの層に メタデータが付きます ファイル Prim プロパティです
ネストしているため オブジェクトパスでアクセスします この例ではPrimの“cube”は “simpleMesh”の下にあります パスは “/simpleMesh/cube”になります
プロパティも同様で ドット表記を使います
こうした基本のファイル構造が シーンデータでどう使われるか 見ていきます
シーングラフは オブジェクト階層を定義します 親要素が変わると子にも影響します ここでは立方体と それを親とする球体を使います
立方体を動かすと 球体も一緒に動きます
球体を動かしても 立方体はそのままです シーングラフはPrimのネスト構造に 簡単に格納できます これは親のPrimです 立方体と球体 2つの子のPrimがあります なお マテリアルや アニメーションなどのPrimは シーングラフに属しません
シーングラフは以上です メッシュデータに移りましょう
メッシュデータは 2つのカテゴリに分けられます 位置 法線 テクスチャ座標などの 属性と 連結性です これは1つの面の頂点の数や 面に属する頂点インデックス などです
4面体の単純な例を 見てみましょう 最初は4面体の4つの点です
すべての面に3つの頂点があるので 4つの三角形です
それぞれの面に 頂点インデックスを持ちます
次です
例として面ごとに法線を持たせます
4つの法線です “面ごと”は USDでは“uniform”なので メタデータに“uniform”を 設定します
テクスチャ座標も設定します これはインデックス付きの 属性になります インデックスは 面ごと 頂点ごとです USDでは“faceVarying”です
最後にこちらも必須です 4面体は細分割曲面ではなく ポリゴンでレンダリングします 後で説明します
それでは 次はマテリアルの定義です
USDのマテリアルの定義は精細です 元々 映画のレンダリングのためです リアルタイムレンダリングには UsdPreviewSurfaceという サブセットがあります 物理ベースの マテリアルディスクリプションで 2つのワークフローに 対応しています Metallic-roughnessと Specular-roughnessです Metallic-roughnessを 見ていきます
先ほどのデモと同じ蓄音機を 例にします 最初に色を白に設定します
次に法線マップと オクルージョンマップを指定し ディテールを際立たせます
次にメタリックのレベルを上げると 光沢が出ます ラフネスマップも追加して 部分的にツヤを消します
最後です ディフューズカラーと メタリックテクスチャを設定します 5つのテクスチャで メッシュの見た目が リアルになります
ではUSDの中を見てみましょう USDはシェーダノードグラフを 使います 別々のノードが結合したものです
UsdPreviewSurfaceは シンプルなつくりで ノードは4種類です メインシェーダノードは PBR属性を定義します テクスチャサンプラは 使用するテクスチャの宣言
Mesh Attribute Readerは テクスチャ座標などに使います UVトランスフォームノードは テクスチャ座標のスケールや 回転ができます シンプルな例をお見せします メッシュ属性が いくつか ついています
ご覧のように メインシェーダノードの サーフェスは マテリアルのものと 結びついています USDはご覧のとおりです ネストしたマテリアルPrimの中に
メインシェーダノードがあります
マテリアルと結びつけるために 先ほどお見せした オブジェクトパスを使います 次は少し複雑な例です ディフューズカラーを設定した テクスチャです
座標を読む Mesh Attribute Readerは 赤のシェーダノードです 対象とするテクスチャのサンプラは オレンジのものです そしてディフューズ属性の メインPBRシェーダ
USDはこうなります ここにもマテリアルPrimがあります そして3つのシェーダノード
それぞれ後続のシェーダノードに 結びついています
以上がUSDの基礎です ご紹介した内容は サンプルフォルダにあります そこに シーングラフを作成するための サンプルスクリプトや― メッシュデータ マテリアルと メッシュグループがあります これで1つのメッシュに 複数のマテリアルを設定できます 変形やボーンアニメーションの サンプルもあります
USDの基本構造の次は 他のフォーマットにはない USDの強みを紹介します
複合シーンの拡張性 コンポジションと共同作業です
拡張性については 細分割曲面で説明します 共同作業の例には コンポジションエンジンを使います
細分割曲面から始めましょう
細分割曲面は曲面を効率的に 表現します それに対して ポリゴンは実際の曲面の 近似値で表します この近似値は妥当な値を仮定して 設定されています 実物にどれだけ近づけるか ということです
一方 細分割曲面は 本物の曲面を表します ダイナミックテッセレーションです カメラまでの距離に基づいて 分割したポリゴンと本物の曲面の 近似値を割り出すようなものです
細分割曲面は アニメーションにも向いています
ここ数年 使われています 例をあげましょう 絵文字やミー文字です
左側を見ると ポリゴンでレンダリングするときの 分割の具合がわかります メモリフットプリントの観点で どちらがいいか明らかですね
右側が細分割曲面の最終形です ディテールがきれいですね
標準になっているのが OpenSubdivです これもPixarが開発しました Pixarと連携して提供している メタルシェーダは 私たちのプラットフォームに最適です GPUが速く処理できるのです
OpenSubdivはSceneKitの 細分割曲面の基盤です
もちろんUSDは 細分割曲面をサポートしており OpenSubdivにも活用されています 実際 USDの記述は ポリゴンメッシュデータと 細分割曲面で統一されています 分割に特化した プロパティもあります creasesやcornersなどです
つまり細分割曲面は 高品質なサーフェスの設定には 効率的な手法なのです
次はコンポジションエンジンです
これは強力なオーサリングツールで 効率的な共同作業を可能にします ここで参照例をお見せします
これは2つの子を持つ親の シーングラフです 2つのオブジェクトが 異なるかぎりは効率的です
しかし 同じオブジェクトの複製が いくつもあったらどうでしょうか? このネスト構造は 非効率的になります 重複データを格納するからです
大抵のフォーマットは 重複データを取り除き 参照を格納します これはUSDも同様です しかし それだけではありません
ネストしたシーングラフの中に 仮想オブジェクトを作ります それぞれのオブジェクトが―
固有のオブジェクトパスを持ちます そのパスでマテリアルを オーバーライドできます プロパティなどです ここでは例として 2つめの球体をオーバーライドして 色を黄色にしました
1つめの球体の色には影響しません
サブツリーを 丸ごと取り除くこともできます USDは これらの変更を 元データのオーバーライドとして 保持します
これによって実現できる ワークフローをお見せします これはmacOS CatalinaのFinderです ご覧のようにQuick Lookが USDファイルを レンダリングしています 私がレイアウトアーティストだと しましょう すべてのオブジェクトを このシーンに配置するとします それと同時に―
別のアーティストが オブジェクトの改良を行っています 例えば このイスです そのアーティストが オブジェクトを変更して このイスにします
こうしてから レイアウトファイルに戻ると ファイルはそのままで イスが置き換わっています 参照だからです 実際 こちらで編集できます
他のファイルに影響を与えずに 色を変えられます
それぞれのワークフローを 切り離せるのです
簡単なプレビューでしたが これがUSDで実現できる 新しいワークフローです
この2つの高度な機能の サンプルもあります サンプルフォルダの中です
細分割曲面とcreasesの例と 参照とオーバーライドの例です
Universal Scene Descriptionの まとめです USDはファイルフォーマットであり 3Dコンテンツをオーサリングする ライブラリです アセットをUSDZに変換する ワークフローをお見せしました 新しいツールのusdzconvertは OBJ glFT FBXなどを USDZに変換します PythonのUSDZツールが ダウンロードできます プリコンパイルされたUSDライブラリや サンプルスクリプトも含まれます
詳細はWebをご覧ください 明日3時からUSDとUSDZの ラボがあります 金曜9時に“Advances in AR Quick Look”もあります
ありがとう (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。