
-
visionOSのカスタム環境の最適化
プロシージャツールを使用して、visionOSのアプリやゲーム向けの美しいイマーシブ環境を作成する方法を学びましょう。高品質な環境を作成するための構成要素を紹介し、最適化プロセスについて詳しく説明します。シーンのポリゴン数を減らす、ジオメトリをクリーンアップする、UVマップをパッケージ化する、Reality Composer Proまたはその他のゲームエンジンにインポートするためのUSDアセットを作成するなど、Appleが提供する一連のHoudini用ワークフローを活用する方法を紹介します。
関連する章
- 0:00 - イントロダクション
- 3:51 - Vision Proでの開発に向けた準備
- 7:35 - ジオメトリの最適化
- 17:22 - UV投影
- 24:20 - テクスチャのベイク
- 25:38 - USDの設定
- 28:35 - まとめ
リソース
- Construct an immersive environment for visionOS
- Download immersive environment optimization toolkit for Houdini
- Enabling video reflections in an immersive environment
関連ビデオ
WWDC24
WWDC23
-
このビデオを検索
こんにちは 「Optimize Environments for visionOS」セッションへようこそ Appleのテクニカルアーティスト Alexです このビデオでは イマーシブな環境を 構築して Apple Vision Proで リアルなストーリーを 表現する方法を学びます このプラットフォームでは 超高解像度、高速のフレームレート シームレスなリアルタイム インタラクションで作業できるため 迫力ある臨場感をもたらす環境を 構築するための またとない場が得られます うまく利用できれば ユーザーを魅了できるでしょう そのために目指すべきは かつてないストーリーを演出できる 映画レベルのビジュアルです 残念ながら 忠実度の高いリアルタイム レンダリングには コストがかかります ソフトシャドウやグローバル イルミネーションや複雑なシェーディングは どれも高コストです このギャップは 一つのテクニックだけで 簡単に埋まるものではありません そのため 技術的な制限を超えず しかも ビジュアルのクオリティを 可能な限り高めるための 柔軟な戦略が必要になります これを達成するための 最適化ワークフローをご紹介します レンダリング済みの画像からスタートして シネマティックライティングのキャプチャや 豊かなディテールや ハイエンドのマテリアルに進みます 次に ジオメトリとテクスチャを ユーザーの実際の体験をベースに 最適化します 次に レンダリング済みの画像を 最適化された環境に移して ハイエンドレンダリングのルックで ベイクします 最後に Reality ComposerやUnityなどの リアルタイムエディタで 全体をまとめます これで 真のイマーシブ体験を味わえる ビジュアルが生まれます 今回は このワークフローを アセットの「最適化」と「ベイク」の 2つのパートに分けて Vision Proアプリで使用できる 魅力的な環境の作り方を 紹介します 手動でもこの作業を 実行できなくはないですが 今回ご紹介する方法より 確実に時間がかかります ここでは プロシージャツールを使って プロセスの大部分を自動化する ワークフローの構築方法を ご紹介します 3Dコンテンツの最適化方法のなかでも 特に有効なのが Houdiniという ノードベースのワークフローを採用した パワフルなアプリを使う方法です ビジュアルスクリプトシステムにより 手続き型レシピを構築して 複雑なタスクの 自動化と処理を実行します Houdiniでは 「Houdini Digital Assets (HDA)」という カスタムビルドツールも使用できます ビジュアルスクリプトと 基礎となるコードを融合させて カスタムユーザーインターフェイスを介して 主要なコントロールを 編集可能なパラメータとして表示します Appleは 14の強力なツールからなる 汎用性の高いセットを開発しました 芸術的なビジョンを最適化するよう 構築されたツールは ダウンロード可能で すべてのステップで 正確なコントロールを実現します このワークフローは 万能ではありませんが 強固な基盤を提供することにより イマーシブコンテンツの構築に伴う課題への 挑戦を可能にします
このビデオでは ケーススタディとして 月面環境を使います 一つひとつ順を追って Vision Proでリアルタイムパフォーマンスを 実現するコンテンツの作り方を紹介します Vision Pro用のアセット作成に 不慣れな方のために まず グラフィックスという観点から ざっくりとした概要と イマーシブコンテンツ構築に必要な 基礎知識を説明します 次に 最適化プロセスについて Immersive Boundaryを使用した 従来の手法を超える ジオメトリの最適化手法を 紹介します 同じ原理を UVレイアウトと テクスチャベイク技術によって テクスチャに適用する方法も お伝えします すべて最適化できたら USD用の環境を準備して リアルタイムエンジンへの準備は完了です では始めましょう 同僚のScottさんが WWDC24のビデオ 「Optimize your 3D assets for spatial computing」で言及したように Vision Proでのコンテンツの オーサリングは ひと味違います このデバイス用のコンテンツ作成では ユーザーがどのように体験するかを 理解することが重要です なぜなら 開発プロセス中の選択を 左右する要因だからです
フルイマーシブのシーンでは Vision Proで どの程度レンダリングするか検討する 重要な手がかりになります mixedイマーシブスタイルでは パススルービデオで表示内容の一部だけ レンダリングしますが フルイマーシブの場合は すべてのピクセルをレンダリングするため パフォーマンスの難易度がアップします フルイマーシブな状態では ユーザーは 固定された移動可能な空間にいます ユーザーは仮想の世界から 現実の世界に戻るまでの間に 実際に 数メートルほど 移動していることもあります これがVision Proの Immersive Boundaryです 周囲の環境から ユーザーの安全を守りながら グラフィックスの予算を 最大限に活用する切り札にもなります
動ける範囲や見える範囲を 正確に把握することにより すべてを最高品質で レンダリングする必要がなくなり 重要な部分だけを 過不足なくレンダリングできます これこそが環境最適化の 大切なポイントです 忠実度の高い環境は かなり詳細で ポリゴン数も 膨大になるからです レンダリング済みの月面のコンテンツでも 1億個を超えています 上手くいくか分かりませんが Houdiniツールでどこまでできるか この機会に 試してみましょう まずはツールパッケージを開いて シーンを設定し 最適化ワークフローのツールを 使ってみましょう
Houdiniサンプルをダウンロードしたら プロジェクトフォルダを開きます フォルダには 必要なものが すべて揃っています ルートには メインのHoudiniファイル optimize.hipが置かれています 探求に使う道具一式が ここに揃っています すぐ隣にはHDAフォルダがあり ワークフローで使用するカスタムツールが すべて格納されています これらのHDAは メインファイルで参照済みですが 任意のHoudiniプロジェクトで 再利用可能です それでは このシーンをロードした Houdiniを覗いてみましょう 全体が 3つの主要な部分に 整理されています それぞれ独自のネットワークと ノードを持っています 1つ目は「ソースネットワーク」です 高密度で忠実度の高いジオメトリを 使用した フル解像度のレイアウトです サンプルファイルでは 単純な手続き型のセットアップです ただしこのデモでは 例として 月面環境を使用します 次は「Optimized」で
このビデオで紹介する手法を使って リアルタイムパフォーマンスのために シーンが再構築されています
最後が「USD」です すべてがここに組み立てられ Reality ComposerやUnityなどの ランタイムエディタにエクスポートできます では 最初のカスタムHDA ワークフローのすべてのステップで役立つ ユーティリティを紹介します 「Boundary Camera HDA」です イマーシブコンテンツの体験を 視覚化するよう構築されています
このツールは Immersive Boundaryの端を 定義するための 参照枠を提供します 複数のカメラ設定が選択可能で 実際の視点から コンテンツを見られるようになります
調整可能なパラメータで カメラを簡単に変換できるので コンテンツを最適化しながら シーンをトラッキングできます
プロジェクトが設定できたら 最初のツールセットで ジオメトリを最適化してみましょう お話ししたように このシーンには 大量のポリゴンがあり 何百もの岩や 数キロ先まで 四方八方に広がる地平を構成しています これだけの膨大な要素の複雑さを 軽減するには どうすればよいのでしょう? 詳細レベルシステムを使用すれば 個々のアセットを簡略化できます コンテンツの種類によっては これが適切なソリューションとなります ですがここでは 普通の手法を超えて Immersive Boundaryのポテンシャルを 最大限に活用しましょう 手順をシンプルにするため 3つの手法を利用して まずは適応的ポリゴンを削減して ポリゴンの総数を減らします アセットを1つ1つ減らすのではなく すべての三角形を最適化して 可能な視点だけをもとに 削減を行います これは三角形のサイズを視覚化したもので 赤は高密度であることを示し 青は より大きく より単純化された領域を示します この設定において三角形は 必要な部分だけ複雑にするために保持され 密度のスケールアップとスケールダウンを 有機的に行うことにより 詳細度を段階的に落としています これにより 重要な細部では シャープな状態を保ち イマーシブ感を損なう低ポリゴンの アーティファクト生成を回避します これが基本コンセプトです 実際の構築方法はどうでしょう ここでいよいよ プロセス処理の 自動化用に構築された カスタムツールの出番です 属性駆動型パラメータを使用することで 保存するものと削減するものを 手続き型ロジックを通して すべて指定できるようになります Houdiniネイティブの PolyReduceツール上に構築され 複数の視点を処理します この画像では 緑色の球が 潜在的な位置を示しており シルエットの重要度を 測るために使われます HDAは Immersive Boundaryに 沿うようにして分散された 一連のサンプルポイントにより 駆動されます こうすることで ユーザーが体験できる 角度にあるジオメトリは保持されます
パイプラインのどこに該当するか 見てみましょう 高ポリゴンのソースアセットを インポートした後 コンテンツ分割すると タイプ別の取り扱いが しやすくなります ここでHoudiniに移り HDAの設定例を紹介します サンプルファイルでは Adaptive Reduce HDAだけを使用して すべての岩石を 1つのパスで削減します これはかなり重い処理になります ソースにある岩石は 三角形の数だけで 2200万個を超えているからです イテレーションを高速化するため 岩の小さなセクションを分離して HDAの設定例を より簡単に 見せられるようにしました これらの岩を手始めに Adaptive Reduce HDAのインスタンスを ドロップダウンして接続します
イマーシブカメラに切り替えて Immersive Boundaryの 内側にある視点から作業します
HDAを有効にして操作すると
ヒートマップが重ねられます これにより 削減処理後に 高密度となった箇所のフィードバックが すぐに得られます 三角形の総数は 一番上にある このパラメータで制御されます
これを調整して 望み通りの出力を 得ることができます 前述したように これらツールの多くは サンプルポイントを手がかりに 複数の視野角から 形状を評価します この「Boundary Sample」専用のHDAが Immersive Boundary内側に ポイントを生成します
新しいHDAを作成して
Adaptive Reduce HDAに割り当てます
ポイントを割り当てると ツールが 位置に基づいて削減を実行します シルエットの端沿いでは より多くの三角形が保持されますが 三角形の合計量は そのままです この処理を駆動するのが シルエットパラメータです
この値を調整することで 三角形の数を制御できます 遠くの岩に移りましょう 距離の重み付けを調整して 保持するジオメトリを減らしても シルエットはまだ十分に 保たれています
ツールの基本的な設定は こういう流れです HDAを作成し サンプルポイントを割り当て パラメータを使って結果を微調整します
このツールを地形とすべての岩に 一回使用するだけで 半径1キロメートル内のジオメトリが すべて最適化されます 地形については 距離に応じて より積極的に削減を行い 地平線に向かって 三角形の密度を 徐々に減らしていきます 岩の場合 シルエットの大部分を保持し 残りはすべて単純化することにより 削減するという方法です これで 半径1キロメートル内を 最適化します 残りの景色はどうするのか? 遠方のオブジェクトに対しては ゲーム開発でおなじみの テクニックを使います Billboardを使いましょう 遠距離の場合 知覚できる視差の奥行きには 自然と限界が生まれます 遠く離れた場所にあるオブジェクトに 完全な3Dジオメトリは必要ありません Immersive Boundaryでは 1キロメートルから3キロメートルの間で 深度キューの平坦化が始まります そのため この領域については フラットな画像に縮小可能で 奥行きが失われる感じも ほぼありません この手法では 複雑な3Dオブジェクトを Immersive Boundaryに向けられた 平坦なジオメトリにレンダリングします 大規模な環境ではこれを パノラマストリップとして設定し シーンの残りの部分と シームレスにつなぐことができます 月面の例では 1キロメートルを選択して より多くの三角形を削減したことで 近くのアセットを より詳細にすることができました
Billboardのテクニックでは しばしば透明度を利用して ジオメトリをシンプルに保ちますが このツールは 実際のジオメトリを使用して シルエットを構築します つまり 境界線は元のソースと一致し 頂点は元の頂点と一致しているため 透明な素材は必要ありません 硬い表面の岩から 有機的な葉に至るまで あらゆる種類のオブジェクトに 使用できます 個々の頂点から固定位置に向けて レイキャストする仕組みにより機能します 照射された光線は 事前に定義した距離に配置された 球や円柱などの 単純な形にぶつかります 最初は ジオメトリは大変な状態です ですが ポイントを再三角形化すると クリーンでシンプルなシルエットが得られ ユーザーの視点から見ても 違和感がありません Vista Billboard HDAは セットアップ全体を手続き的に処理します ソースレイアウトからの トレインのインポート直後に配置されます
このツールを使用すると 1キロメートルより先のジオメトリでは 数百万ポリゴンから わずか数千ポリゴンに削減できます この簡略化されたメッシュを これまでの最適化と組み合わせると 完全に最適化された 環境のビューが得られます
どれだけ削減できたでしょう 適応的なメッシュ削減手法と 遠くのジオメトリをBillboardに 変換する手法によって 三角形の数は すでに35万個まで減少しています 1億個もあったポリゴンレイアウトから 大幅に削減できています 環境は 目に見えるものすべての効果が 大幅に向上するよう最適化されています 次は オクルージョンカリングを使用して 見えていない部分を最適化します オクルージョンカリングでは 完全に隠されたジオメトリを取り除き ユーザーが見ることのないものについては レンダリングやテクスチャリングを 実行しないことで リソースを節約します ランタイムに実行して 見えていない状態のメッシュ全体を 削除するものもあります これをさらにレンダリングして 隠れた三角形をジオメトリから 直接削除し 簡略化してみましょう 次に登場するこのHDAは 何百万もの点を全方向にレイキャストして 見えているポリゴンを確認し これをもとに三角形を削除します 1本の光線が三角形のどこかに当たった場合 保持するようマークされますが それ以外の 赤で視覚化した部分は すべて削除されます このツールセットではBackface Removalと オクルージョンカリングという 2種類のカリング手法を用意しています ポリゴン削減後に 2つ連携する形で実行されます
まずはRemove Backfacesです ドット積比較を使用して Immersive Boundaryに対して常に 反対側を向いたポリゴンを検索します 高速で信頼性が高く 素晴らしいファーストパスです カリングされたポリゴンは ワイヤーフレームに表示され 三角形の削減量が 個々のHDAの直下に表示されます 月面の例では 約6万個を削除できました
次に 2番目のツール オクルージョンカリングです 各サンプル位置からのレイキャスティング によって 可視性をテストします 精度は 使用するサンプルポイントの数や キャスティングされる光線の 本数によって異なります この例では 11万個の三角形が カリングされており Backface Cullingで保存したものに 追加されます これらツールが組み合わさって 強力なコンボを形成します 残りの三角形のうち約50%が このパスで削除され その分を 青色で視覚化して 更新後のジオメトリの 境界を示しました ユーザーの視点から見ると まったく何も起こらなかったようです 最終的な数字を確認しましょう
三角形の数は わずか18万個です このレベルの複雑な環境にしては 素晴らしい成果でしょう こちらは 深度マップを比較した結果を 視覚化したものです 同じシルエットで ほぼ同じに見えますが 今は 元のジオメトリのほんの一部だけを 実行しています
この方法でワークフローを構築する 本当の価値は 数字だけにとどまりません すべてのステップが 微調整可能になるのです 品質重視で調整したり パフォーマンス重視で調整したり 手続き型のツールチェーンによって プロセスを完全に制御することができます ジオメトリが最適化できたら UVレイアウトとテクスチャについても 同じ方法で処理しましょう ぱっと見では分からないでしょうが このような不毛の風景にも ユニークなディテールが詰まっています 数十ギガバイトレベルの 忠実度の高いPBRマップが トレース済みの全サーフェスへの ライティングで レンダリングされています つまり すべての角度から見た すべてのピクセルがユニークです データ全体が 相当の手ごわさです
最適化後のジオメトリでも 細部をすべて 保持するには どうすればよいでしょう? UVから始まり ジオメトリへのテクスチャマッピングを 制御する 2Dの座標系があり 再びImmersive Boundaryを 活用して テクスチャデータのオーガナイズ方法を 再検討します まずはImmersive Boundaryから 始めましょう 手前の5メートルだけを分離します ここにあるアセットは ほぼすべての角度から見えるため すべてのサーフェスで テクセル密度の 一貫性を維持する必要があります グリッドパターンは エリアベースのUVマッピングで すべてのサーフェスが詳細な目視に耐えます 一方で 境界の外は 面白いことになっています アセットは限られた角度や距離からしか 見えないため 通常のサーフェスエリアマッピングでは 機能面で物足りません ユーザーの目には決して触れない領域の テクセルが無駄になるからです 戦略の変更が必要です エリアベースUVマッピングに替えて プロジェクションベースのマッピングで Immersive Boundary内の画面領域に テクスチャを合わせます
これをスクリーンスペースマッピングといい 実際の見え方に基づいて テクセル密度が自然にスケーリングされます 遠くのサーフェスのテクセルは少なく 近くて見えやすい領域には より高い解像度が割り当てられます スクリーンスペースマッピングを利用した こちらのツールは 「球面投影」という手法を使用します この手法は 簡単に言えば ユーザーの周囲を球面で包み その球面の表面に 環境を投影するようなイメージです テクスチャに使うには UV画像とレンダリング済みの画像を 同じベースの上で作成する必要があります そのため ソース環境を レンダリングする際は カメラにも 同じ球面投影が使われます つまり 画像がUVレイアウトと 完全に一致していることを意味します このセットアップを 最適化済みの ジオメトリに適用してみましょう
第一印象は いい感じですね ワイヤーフレームを有効にすると ジオメトリとレンダリングイメージが 完璧に縫い合わされています ですが 立ち上がって 周りを見回すとどうでしょう?
何か おかしいですね
風景の一部がテクスチャから そっくり欠落しています サーフェスは 正面にあるものを 何でも掴んでしまうため 小さな岩が大きな岩にめり込み 大きな岩が山に突き刺さっています
ここでのイマーシブ体験のように あらゆる角度からシーンをカバーするには より多くの情報が必要です ただし いくつか難関があります 1. UVオーバーラップの問題 ここでは赤で視覚化してあります 視線の角度では サーフェスはUV空間で圧縮され 折りたたまれた三角形が 互いに覆いかぶさり 背後にあるジオメトリの上に 積み重なります つまり レンダーに こうしたサーフェスがあっても データを保存する先がありません 2. テクセルスケーリングの問題 正確なのは 現在位置からの投影に限られます 移動すると テクセル密度は 瞬く間に崩れ始めます
3. レンダリング自体の問題 1回のパノラマ撮影では すべてを見ることはできません 一部のサーフェスは 詳細が不足しているか 完全に見落とされてしまいます これらの問題を解決するには 複数の角度からUVを投影し 各サーフェスにとって最適な位置を探し あらゆる視点から テクセル密度をスケーリングして 錯綜しているUVを 解きほぐす必要があります 大変な作業です それでも 少しずつアプローチしていけば 管理しやすい複数のステップに 問題を分散させることができます 複雑度を下げる必要はなく 複雑度のコントロールに適した システムがあれば足ります
まず Immersive Boundary内側の ジオメトリを分離させてから 環境の残りの部分に 焦点を当ててみましょう
このテクニックは2つのパスで行われます 1. メッシュを小さなセクションに分割して ジオメトリが単一のUV投影に 制限されないようにします これは UVアイランドを 事前定義するようなもので UVを実際に作成する前に 境界を定義します 2. セクションごとに 可視性が 最大限に高まるカスタム位置から 固有のUV投影を取得します 月面の例では 最も難易度の高い 岩に注目しましょう 単一の視点からは すべての側面を 見ることができないからです そこで活躍するのが Mesh Partition HDAです メッシュの分割を最小限に抑えて 島の数を少なくし それぞれが 少なくとも1か所から はっきり見えるようにします たとえば この大きな岩では 面を分割して UVを片側から そしてもう片側からも投影できるようにして 両方に必要な 最大レベルの解像度を提供します Multi-Partition HDAは ジオメトリ最適化の直後で このワークフローに組み込まれています パーティションが配置できたら すべてMulti-Projection HDAを使用して 一括処理できます
このツールは 先行するHDAで作成された 各パーティションで実行され 画面スペースでピースが最も大きく見える ポイントから UVを投影します
それぞれの投影の 原点に戻る線を描画して UVが作成された場所を 正確に示します 最初はいくらか混沌としているでしょうが いったん実行してしまえば 面倒な作業はすでに完了しています 結果を見てみましょう
UVアイランドはすべて 互いに折り重なっています それぞれが投影の中心に 整列していたからです 後はレイアウトして 最終的な UVアトラスにまとめるだけです
これで セットアップは完了です 岩と地形それぞれのパスを用意したら まず メッシュを手続き型で分割します 次に UVを新たに 各セクションに投影します より正確なテクセルスケーリングを使用して オーバーラップと歪みを最小限に抑えます ここでは 環境全体をわずか2つの テクスチャに収めることができます 1. サーフェスエリアでスケーリングした Immersive Boundary 2. その先全体のテクスチャ この2つです スクリーンスペースのスケーリングにより 2つとも同じようなサイズにできます かなり大規模な圧縮です 数キロメートル分の地形が 最初の数メートル分と同じ フットプリントに凝縮されます
最適化が完了したら 月面環境からレンダリング済みイメージを ベイクする準備が整いました レンダリングとベイクは それ自体が深いトピックなので ここでは全体のベイクに必要な ごく一部の主要コンセプトに的を絞ります Houdiniでは 球面レンダリングを使って ベイクできます 仕組みはこうです 一時的な球面投影マップで レンダリングをジオメトリにマップします 投影は最終的なUVレイアウトに ベイクされます ただし ここで捉えているのは あくまで一つの視点だけです データの欠落を埋めるには ビューに依存しない投影方法を 使用する方法があります
ゲーム制作の経験者なら ご存じでしょうが 高ポリゴンのディテールを 低ポリゴンのメッシュにベイクします ここでも考え方は同じで ソースジオメトリの表面から 最適化したUVアトラスに 直接投影します これにより すべてのサーフェスを 完全にカバーできます
これらの手法を組み合わせて 最適化されたジオメトリに unlitマテリアルとして適用することで 完全にテクスチャ付けされた 環境を構築できます 数十ギガバイトの 高解像度テクスチャのような 大規模な環境でも 数百メガバイト未満まで ハイエンドのビジュアルを 維持したままで 圧縮できるようになりました これで すべてをVision Proに エクスポートする準備が整いました 最後のステップは USDの設定です ただし USDデザインの醍醐味は 物事の整頓だけにとどまりません 最終的な最適化が可能となり さらなるパフォーマンス向上を実現できます 最適化が済んだ環境は 固有のメッシュとして存在しています この方法なら セクションが 完全に視界の外にある場合でも 実行時にすべての三角形が GPUに送信されます コストを軽減するには Frustum Cullingを 正しく設定する必要があります USD階層を使用してシーンを分割し 各エンティティの バウンディングボックスにもとづいて レンダラがジオメトリを 自動的に間引けるようにして カメラの視野内にある 不可視のオブジェクトを削除して パフォーマンス向上を実現できます
この仕組みを図示したものです 青いワイヤーフレームは ユーザーが 周囲を見回し シーン内を移動する際に GPUからアンロードされる エンティティを強調表示しています このワークフローでは ジオメトリがImmersive Boundaryの 内側と外側の どちらにあるかに応じて 2種類のパーティション方式を 使い分けます それぞれにカスタムHDAを作成し どちらも新しいパーティションを 個別に定義する属性を生成し USDレイアウトの基盤となります Boundary内ではジオメトリが Boundary Partition HDAにより分割され 手近にある 密なジオメトリが削除されます 境界の外側にあるものはすべて Frustum Partition HDAが引き継ぎ タイルを徐々に大きくしながら メッシュを分割し それぞれが同じくらいのサイズと 画面スペースになるよう最適化します これまで最適化はすべて サーフェスレベルで行われ 実際のオブジェクトではなく ポイントや プリミティブのテーブルを変更していました ですがUSDには 変換とメッシュプリミティブと ジオメトリのサブセットに編成された 階層構造が必要です エクスポートする前に ジオメトリをクリーンアップして USDが解釈できるものに 構造化しておく必要があります この設定では 一部の属性を 繰り越すだけで済みます name属性は USD階層における プリミティブ名になり グループの割り当ては Frustrum Cullingに 使用するサブセットを定義します 2つのパーティションHDAが これらのグループを作成済みなので 後はUSDに渡すだけです これらの属性を設定すれば 残りは簡単です ジオメトリをSolarisにインポートし サブセットグループを有効にして カスタムグループ名を宣言するだけです パーティションがジオメトリサブセット化し リアルタイムFrustrum Cullingの出番です スタートの段階では 月面環境は 密なジオメトリと 膨大なテクスチャと 複雑なシェーディングで形成されていました 最適化は これで完了です 元のシネマティックレンダリングから イマーシブコンテンツ向けの 手続き型ツールセットによって リアルタイム対応になりました 実際のインパクトを見ながら 最適化手法により 多彩なイマーシブ体験の構築を 可能にする方法をまとめましょう
月面のシーンでは 三角形の数が 1億個を超えていました それが20万個以下まで減少し 常時表示されるものも 10万個未満になりました Frustum Cullingのおかげです 動きの少ないシーンでは 数をさらに減らすことができます 考慮するべきコストは 他にもあります 複雑なシェーディングや 動きのある キャラクターや インタラクティブ要素です 三角形の数を抑えることができれば 最も重要なコンテンツに 予算をかけられます テクスチャの面では球面投影が 大きなインパクトをもたらしました 環境全体で テクスチャメモリを 250メガバイト未満に削減できました プロジェクトにもよりますが この数字は比較的一貫しています サーフェスのほとんどは 画面スペースに 合わせた大きさだからです ほかにも ソース入力の際に必要な数だけ ユニークテクスチャを使用できます 最終的にはすべて 同じテクスチャ アトラスにベイクされます
オブジェクト側では エンティティの総数は 200アセット未満に保たれます 特定のフレームでは ドローコールの数が 100未満になります すべてのアセットをマージして 一貫性のあるメッシュパーティションに ベイクすることで これが可能となり スタート時のオブジェクト数には 左右されません このビデオで使用するツールは 可能な限り堅牢に設計してあります そのため さまざまなケースで 再利用できます
ポータル体験を構築する場合は パラメータを調整すれば よく似たツールセットを流用できます たとえば Occlusion Culling HDAを変更すれば ポータルの範囲内にある 見えない三角形を削除できます 環境により 複数のImmersive Boundaryを 目指すこともあります その場合は ポジションごとにシーンを 再構築するのではなく 複数のサンプルポイントからなる セットを使用して 個々のイマーシブ体験を最適化します ほんの少しの調整で 大部分のツールは 同じように動作するはずで 両方の境界の三角形をスケーリングして それぞれが必要最小限の テクセル密度を持つようUVを投影し 両方の視点で 1つのメッシュと 1セットのテクスチャを共有できます 作業対象となる環境は それぞれ異なるでしょう 万能のワークフローは存在しません ですが ツールをある程度 揃えておけば プロジェクトごとに 最適なアプローチを選択できます たとえば 月面やジョシュアツリーのように 岩だらけの環境や マウントフッドやハレアカラなどの 雰囲気のあるシーンや 会議室や劇場のような 硬質の表面のインテリアなどです 今回紹介した手法その他を使えば そうした体験も構築できます シーンによっては シェーダがかなり複雑化して リアルタイムのパフォーマンス維持のため ジオメトリの削減が必要になります 会議室のように 効率重視で最初から 手動でモデリングする場合などは 過度に最適化しないよう 注意が必要です 新しい強化機能を詳しく確認するには サンプルプロジェクトを使うとよいでしょう このビデオと同じワークフローツールと ツールを含んでおり 自由に使用したり変更したりできます READMEファイルには すべてのツールの内訳と 今回紹介しなかったHDAを 記載してあります 最適化に関するプラットフォーム別の ガイダンスについては 「Optimize your 3D assets for spatial computing」をご覧ください 今回の主眼は「忠実度の高いコンテンツを 高コストにする必要はない」ということ かつては 開発者がすべての詳細を レンダリングできる状況になく 創造的なテクニックにより 少ない手札で より多くをまかなう必要がありました 同じ原則は 現在のワークフローの強化にも 役立ちます 重要なのは クリエイティブなプロセスと 意図をもって最適化すること 優れたツールの力で 可能性の限界を押し広げ より深いイマーシブ感と強い臨場感を もたらす環境を構築しましょう ご視聴ありがとうございました
-