- 
							
							USDを使用するUniversal Scene Description(USD)を使用すると、安定した3Dシーンを描写することができ、エンジニアとアーティストがクリエイティブのワークフロー全体でシームレスにコラボレーションすることができます。このセッションでは、USDの強力な機能と、その優れた拡張性を紹介します。USDアセットの作成方法と、ARKitとRealityKitで使用するusdzコンテンツの作成に関する詳しい情報についてご確認ください。 リソース関連ビデオWWDC21WWDC20WWDC19
- 
							このビデオを検索(音楽) (拍手) こんにちは “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”もあります ありがとう (拍手) 
-