ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
USDツールとレンダリングに関する詳細
Universal Scene Description(USD)アセットの生成、検査、変換に役立つ最新ツールがどこまで進化したかご確認ください。これらのツールの最新情報について解説し、これによりご利用のコンテンツ作成パイプラインに統合することもできるようになります。また、USD Hydraレンダリングの機能や、ご利用のAppへの統合方法も紹介します。 USDの導入については、WWDC22の「USDの基礎の理解」をご確認ください。
リソース
- ASWF USD Working Group
- Creating a 3D application with Hydra rendering
- Introduction to Universal Scene Description (USD)
- USDZ schemas for AR
関連ビデオ
WWDC22
WWDC21
WWDC20
-
ダウンロード
♪ ♪
こんにちは 今年のWWDCへようこそ 私の名前はStellaです Alexです 私たちは AppleでUSDに関連する 多くのことに一緒に取り組んでいます USDツールとレンダリングの アップデートについて説明します Stella 始めてください
USDは基盤となる技術で コンテンツ作成ツールへの 統合が進み深まることで ゲームや AR 映画 Web などでのレンダリングや アセットやコンテンツの 作成方法がますます増え すべてがUSDを 中心としています エコシステムのレンダリング とツールに焦点を当てます USDツールのアップデートから 始めましょう
AR Quick Look の 新しいライティングで アセットがさらに良く見える 方法を示し USDレンダリングを 深く掘り下げて 最後に Hydraの統合方法を ご紹介します
Appleエコシステムにおける USDツールから始めてみましょう
USDZ ToolsとReality Converter を取り上げ その後にさらにツールと フレームワークを紹介します これらがUSDZ コンテンツの 作成に役立ちます
USDZツールはパッケージで 必須のコマンドライン USD Pythonツールを含み USDZファイルの生成 検証 および検査に役立ちます パッケージにはusdzconvert と呼ばれるコンバータも含まれ 他の主要な3Dファイルフォーマット からUSDZファイルを作成します
Pythonスクリプトは自動化と バッチ処理の強力なツールで USDの探索や APIの 使用方法を学ぶための 素晴らしい方法です 今年はPython 3と Apple Siliconをサポートします USDバージョンもアップグレードし 新機能や性能向上により 簡単にアクセスできる ようになりました
その上usdzconvertに 優れた新機能を追加しました マテリアルを含むOBJを useObjMtlフラグで USDZに変換できるように なりました GLTFファイルからの 点と線のサポートを追加し FBXファイルのアニメーションの シーンタイムをサポートしました usdzconvertオプションと 変換のカスタマイズ方法は ターミナルで "usdzconvert --help" と入力するだけです
著作権情報の追加や 3Dモデルの拡散色や 法線マップの提供など
usdzconvertで使用できる すべてのオプションが 表示されます コマンドラインを使うよりも ワークフローに
UIエディタを 希望する場合は USDZツールを使用した Reality Converterもあり usdzconvertと同じ 機能を提供します しかし エディタウィンドウでは macOSでUSDコンテンツの 変換やカスタマイズが簡単で
一般的な3Dファイルフォーマットを インポートするだけです OBJ GLTF FBXなど そして変換されたUSDZの 結果を表示します 今年はUIも改善し ワークフローを効率化しました テクスチャを選択すると さらに情報を表示できます
テクスチャでマテリアル プロパティをカスタマイズし
著作権を追加するか ファイル のメタデータを編集します
クラシックまたは新しい ライティングを選択します 詳細は後述します
USDZオブジェクトの プレビューもでき オプションが組み込まれた さまざまな条件の下で それに応じて 露出を調整します
アセット側では新機能を追加 し USDZファイルの エクスポート時にテクスチャの 品質を選択できます 初期設定ではオリジナルの 非圧縮でエクスポートされます USDZファイルを小さく したい場合はテクスチャを JPEGに圧縮する オプションがあります
この例では Object Captureを 使ってチェスの駒を
高解像度でスキャンしました メッシュの詳細を失わずに ファイルを縮小するために RealityConverterを使って エクスポートしました 見た目の違いは ほとんど目立ちませんが ファイルサイズがなんと 80%も削減されました
ここにさらに嬉しい お知らせがあります RealityConverterは USDアセットを自動修正します 属性とコネクションタイプの 不一致を修正し 複数のトップレベルプリムと 初期値プリムの欠落を修正し 非推奨の属性を更新し 不足したメタデータを追加します ユニバーサルバイナリにも対応し Apple Siliconで動作します
3Dモデルを最初から作り たい場合はどうでしょうか
昨年 RealityKit APIとして Object Captureを発表しました これは USDZアセットを作成 する革新的な方法を提供します Reality Composerを使って アセットでシーンを構成でき 今年は RoomPlan APIを お届けします これでパラメトリックな 3Dスキャンを作成できます ぜひ この3つの セッションをご覧ください 技術を組み合わせ これまで以上に簡単になり 誰もが没入型の AR体験を作成できます 今日ご紹介した ツールはすべて Appleのデベロッパサイトの AR作成ツールページで 今すぐダウンロードできます ぜひチェックしてください! 次に AR Quick Lookの 新しいライティングをご覧ください AR Quick Lookは iOSに 搭載されたARビューアで 3D USDZオブジェクトを テーブルや壁 床のように 物理的な空間に配置でき 簡単なタッチ操作で インタラクションができます Reality Composerで インタラクティブシーンも作れます USDZファイルに保存して iMessageやメール メモなどで ほかの人と共有できます 私たちは常にAR Quick Look の作成に努め より現実的なレンダリングのために 今年はAR Quick Look に 改良されたライティングを導入し より明るくコントラストが 強く形状の鮮明度が改善され アセットがより美しく 見えるようになりました
オブジェクトモードの AirPods Pro の例で クラシックと新しい ライティングでの撮影です AirPods Pro は どちらの条件でも素晴らしいですが 新しいオプションに お気づきでしょう より明るい色 より高いコントラスト およびより多くのハイライト を提供しています
AirPods Max を机の上に 置いて新しいライティングで ARモードで 見てみましょう! 見事ですね
新しいライティングをどう アセットに適用するのか? とても簡単です コンテンツに最適な ライティングを選ぶだけです USDZファイルに新しい メタデータを設定します
preferredIblVersionの値を 2 に設定しました AR Quick Lookが新しい ライティングシステムを使用します
これをもう少し詳しく 理解してきましょう PreferredIBLVersionの メタデータは 0 1 および 2 の値を 保持できます
preferredIblVersion が 0 のアセットでは システムの初期設定 ライティングを使用します 1 設定ではクラシックの ライティングを使用します
値を 2 にすると新しい ライティングが使用されます
つまり 現在のアセット も簡単に新しいライティングに 更新できるのです! すべてのアセットにこの メタデータを明確に選択し 設定することをお勧めします そのためには usdzconvertに preferrediblversionという フラグを付けて使用できます たとえばフラグを使って 消火栓のOBJファイルを 新しいライティングでUSDZ へ コンバートする方法を説明します またはReality Converter を使用すると 初期設定で新しいライティングが 使用されます しかし従来のライティングを 使用したい場合は プロパティパネルに 新しいオプションがあります
AirPods Maxのアセットを 両ライティングでプレビューします
このように簡単に違いを 比較することができます
ライティングアイコンをクリックする と適用されたライティングが 強調表示され 参照することができます
最後に このメタデータが ないアセットの場合は AR Quick Look はファイルの date-timeスタンプに基づいて ライティングバージョンを 自動的に決定します
アセットが 2022/7/1以降の場合は 新しいライティングが使用されます
古いアセットはクラシックの ライティングを引き続き使用します そのため外見は変わりません
では レンダリングに関して Alexに代わります ありがとう Stella 今日はレンダリングされた アセットを見てきました USDレンダリングと Hydraが3D制作の パイプラインに最適な 選択肢となる理由と 独自のAppに統合する 方法を探ります
まず 一般的なレンダリング について説明します
レンダラは3Dモデル カメラ ライトを受け取り それらを使って 画像を生成します 多くのさまざまなレンダラ がありそれぞれが 特定の目的のために構築され 使用別に最適化されています
一部のレンダラは リアルタイムApp用に設計され ゲームやARシーンで 人物をレンダリングします もう一方は時間はかかりますが より写実的な画像を生成します たとえばハリウッド映画の 視覚効果を製作する場合です
すべてのレンダラは機能を 選択し独自性を持っています
異なる使用に対応する 異なるUSDレンダラは Appleプラットフォーム にも存在します これらの異なるレンダラに 関するドキュメントを developer.apple.comに 追加しています それは両者の違いを 理解するのに役立ち どのUSD機能が サポートされているのか説明し 最適なUSDを作成するため のガイダンスを提供します
Appleプラットフォームの レンダラであるRealityKitは 写実的なレンダリング システムを備えた インタラクティブな拡張現実体験に 最適化され AR Quick Lookで 使用されています これは USDZファイルの 主要なレンダラです macOSでの別の選択肢は PixarのStormです プロダクショングレードの アセットに最適化され 大規模なシーンのリアルタイム プレビュー用に設計されています
アセットを視覚化し 反復するのに最適な技術で コンテンツ制作の パイプラインを通ります Stormは Hydraと呼ばれる 技術を使用しています HydraはUSDオープンソース プロジェクトのコアです 次にHydraとStormの 関連を理解しましょう 先程のこの図から始めます ここでは レンダラとして Stormを使用しています
入力は通常 "シーングラフ"と呼ばれ Stormはそのプレビュー レンダリングを生成します
同じシーンの写実的な画像を 別のレンダラを使って 生成したい場合は どうでしょうか?
Hydraはまさにそのために 作られたのです シーンをレンダラに 密結合するのではなく シーンからレンダラに データを転送する 抽象的なレイヤとして 機能します
これによりシーングラフを 変更することなく 必要に応じていつでも簡単に レンダラを交換できます たとえばStormとPixarの RenderManを使用できます
コンテンツ作成パイプライン で高速レンダリングと イテレーションに Stormを使用して その後RenderMan に切り替えます 準備ができたら 最終的な画像を作成します シーングラフについても 同様です Hydraへの入力は USDシーングラフか別のグラフで
複数Appで同じ レンダラを活用できます 全く異なるシーングラフを 持っていたとしてもです Hydraとシーングラフや レンダラを接続する インターフェイスは デリゲートと呼ばれます シーングラフはデリゲート を介してHydraに接続され レンダラはデリゲートを 介してHydraに接続されます それがHydraです! Nuke 13はビューポートを レンダリングしています macOSのNukeアーティストは Nukeの3Dシステムで より良い品質とインタラクティブな 体験をすることができます
Hydraとシーンデリゲート およびMetalによって加速されたStormを 使用することで実現します
この度 ピクサー・アニメー ション・スタジオと共同で Metalによって加速されたStormを オープンソースに公開し 22.05米ドルで ご利用いただけます Hydraの力を見てきましたが レンダラとしての Stormと USDシーングラフの 典型的な使用例として HydraのサンプルAppを 見てみましょう コンテンツ作成ツールと 3D Appを 構築する方法を確認します HydraPlayerは非常に シンプルで強力です StormでUSDをレンダリングし カメラを動かします
HydraPlayerをサンプル プロジェクトとして すぐに始められるように公開 することに興奮しています! セッションリソースから 利用可能で Readmeに 完全な説明があります
このビデオを今一時停止し プロジェクトを ダウンロードして説明に従う ことをお勧めします
Xcodeプロジェクトには 4 つのクラスがあります AppDelegate カメラ レンダラ ビューコントローラーです AppDelegate は基本的に ルートオブジェクトで システムとのインタラクションを 管理します カメラクラスはユーザー入力 の変換を容易にするために USDシーンカメラを シンプルに表現したものです レンダラはUSDやHydra とのインタラクションを処理します
最後にViewControllerは ユーザー入力を処理します HydraPlayerをビルドし起動前 にすべきことが 3 つあります
環境を整え Apple Silicon MacでRosettaを使用し USDとHydraを ダウンロードしてビルドします では 始めましょう
まず 開発環境を整えます Xcode Python CMakeの インストールを確認します
次に 2 つの手順のために ターミナルを開きます
Apple Silicon Macの場合は USDがarm64をサポート するように移行している間は Rosettaで実行します そのためにはarchコマンド を使用します
環境が整ったら USDと Hydraソースコードを ダウンロードする 必要があります どちらも同じ GitHubリポジトリ PixarAnimationStudios/USD にあります さて コードができたので ビルドできます USDにはPythonのビルド スクリプトが付属しています "generatorXcode" と "no-python" のフラグを追加し USDをインストールする場所 を指定します "USDInstall" の ソースコードの横に置きます USDのビルドが完了すると HydraPlayerの準備完了です この図に戻り HydraPlayer の重要な部分を特定して 詳細を確認しましょう 3Dモデルのロード方法と カメラの設定方法 シーンライトの設定を 見ています 次にシーングラフを Stormに取り込む方法と 最後にウィンドウ用の画像を 作成する方法を学びます
では USDから3Dモデルの ロードを始めましょう ViewControllerの viewDidAppearで NSOpenPanelを使いファイル ピッカーを作成します
ファイルが選択されると レンダラは シーンの設定を開始し USDファイルをロードします
ファイルのロードは USD API を使用すると非常に簡単です ファイルパスで USD ステージを開くだけです
完了です ファイルがロードされました
次に カメラを設定します このコードでは 簡単です setupCameraでは新しい シーンカメラを作成します
次にシーンに基づいてワールド サイズと中心を計算します カメラを十分な距離に移動し 中心に焦点を合わせます こうすることで 全体が 写るようになります
これでカメラの設定は 完了です 次はライティングです 簡単な環境光を 1 つ作り その位置をカメラに合わせて 設定します それだけです 3D モデル カメラ ライトの フルシーンが完成しました このシーンを Stormに 渡すことができます まず レンダリングエンジン を初期化します ここで UsdImagingGLEngine を新規に作成します 最も重要なパラメータは rootPathです エンジンを3Dモデルを含む USDステージに向けます 他のパラメーターと UsdImagingGLEngineの詳細は PixarのUSD API ドキュメントを参照ください
次に カメラをエンジンに 設定し ライティング設定を行います 最後にレンダリング パラメータを設定して Stormのレンダリング 方法を定義します たとえば 透明な背景を レンダリングしたい場合 レンダリングされた画像が Appの配色と調和します アニメーションの あるシーンでは ここでタイムコードを 指定することも重要です
これで画像をレンダリング する準備が整いました
必要な設定は すべて完了しているので レンダリングのコマンドは 1 行のコードで済みます 結果を取得して ウィンドウに表示します USDのおもちゃの飛行機を レンダリングしています! 実は 1 次元だけでなく レンダリングしています HydraPlayerは 数千万の三角形で何千もの アニメーションアセットを 簡単にレンダリングできます
このセッションのリソースを 確認しサンプルプロジェクトを ダウンロードしてさらに 楽しく研究してください
私たちはAppleのUSDツールの アップデートを掘り下げ より強力に アセットがより 良く見えるようになりました Hydraの機能 について確認し HydraPlayerのサンプル プロジェクトを通して Appにインテグレート できる方法を確認しました
USDの重要な 概念について詳細は "USDの基礎の理解" のセッションをご覧ください
ありがとうございました ♪ ♪
-
-
3:00 - Phyton usdconvert --help
% python usdzconvert --help usdzconvert 0.66 usage: usdzconvert inputFile [outputFile] [-h] [-version] [-f file] [-v] [-path path[+path2[...]]] [-url url] [-copyright copyright] [-copytextures] [-metersPerUnit value] // ... [-diffuseColor r,g,b] [-diffuseColor <file> fr,fg,fb] [-normal x,y,z] [-normal <file> fx,fy,fz] // ...
-
9:00 - choosing lighting in usda metadata
// asset.usda #usda 1.0 ( customLayerData = { dictionary Apple = { int preferredIblVersion = 2 } } )
-
17:50 - Build USD + Hydra
// Rosetta % arch -x86_64 /bin/zsh // Download source code % git clone https://github.com/PixarAnimationStudios/USD.git // Build USD + Hydra % python3 USD/build_scripts/build_usd.py --generator Xcode --no-python USDInstall
-
18:54 - Load USD ViewController
// AAPLViewController.mm - (void)viewDidAppear { NSOpenPanel* panel = [NSOpenPanel openPanel]; panel.allowedContentTypes = @[UTTypeUSD, UTTypeUSDZ]; [panel beginWithCompletionHandler:^(NSModalResponse result) { if (result == NSModalResponseOK) { NSURL* url = panel.URLs[0]; [self->_renderer setupScene:[url path]]; } }]; } // AAPLRenderer.mm - (bool)loadStage:(NSString*)filePath { _stage = UsdStage::Open([filePath UTF8String]); // ... }
-
19:30 - Create Scene Camera
// AAPLRenderer.mm - (void)setupCamera { _viewCamera = [[AAPLCamera alloc] initWithRenderer:self]; [self calculateWorldCenterAndSize]; [_viewCamera setDistance:_worldSize]; [_viewCamera setFocus:_worldCenter]; }
-
19:54 - Create Scene Light
// AAPLRenderer.mm GlfSimpleLight computeCameraLight(const GfMatrix4d& cameraTransform) { GlfSimpleLight light; light.SetPosition(GfVec4f(cameraPosition[0], cameraPosition[1], cameraPosition[2], 1)); return light; }
-
20:17 - transport to storm
// AAPLRenderer.mm - (void)initializeEngine { _engine.reset(new UsdImagingGLEngine(_stage->GetPseudoRoot().GetPath(), excludedPaths, SdfPathVector(), SdfPath::AbsoluteRootPath(), driver)); } // AAPLRenderer.mm - (HgiTextureHandle)drawWithHydraAt:(double)timeCode viewSize:(CGSize)viewSize { _engine->SetCameraState(modelViewMatrix, projMatrix); _engine->SetLightingState(lights, _material, _sceneAmbient); UsdImagingGLRenderParams params; params.clearColor = GfVec4f(0.0f, 0.0f, 0.0f, 0.0f); params.frame = timeCode; // ... }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。