WWDC Quick Look 💓 By SwiftGGTeam
Optimize your 3D assets for spatial computing

Optimize your 3D assets for spatial computing

元の動画を見る

ハイライト

Apple Vision Pro では GPU は App が実際に描画するピクセルのみを担当し、パススルー映像は別管線です。GPU 負荷は App が視野に占める面積に比例——没入シーンは毎フレーム数百万ピクセルを追加描画し、共有空間の App ははるかに高速です。


主要内容

Apple Vision Pro 向け 3D シーン:Blender でモデリング、USD エクスポート、Reality Composer Pro にドラッグ——アセットが回転、マテリアル消失、テクスチャ未圧縮。こうした「小さな問題」がすべて反復を遅くし、Vision Pro の性能予算は従来プラットフォームより厳しい。

Apple の答えはエンドツーエンド最適化フロー:モデリング段階のポリゴン制御、エクスポート時の座標系処理、テクスチャパックとマテリアル選択、sky dome と IBL 設定。各ステップに数値目標——没入シーン 50 万三角形以下、共有空間 25 万以下、同時可視 10 万前後で十分な余裕。

核心ロジック:Vision Pro の GPU は App 自身のピクセルのみ描画。パススルーは別管線。視野占有率が GPU 負荷を直接決定。没入 App は全画面で毎フレーム数百万ピクセル。共有空間の小ウィンドウは負荷がはるかに低い。この理解が、空間コンピューティングで三角形予算・テクスチャ圧縮・マテリアル選択を特に重要にします。

詳細

ポリゴン予算とシーン分割

Apple は 3 段階の指標:没入 50 万、共有空間 25 万、同時可視 10 万。大物体(地形など)はチャンク分割し、画面外ではエンジンがブロック単位でカリング。実用テクニック:1.5 m カメラを置きユーザー視点のスケール感を確認(03:44)。

USD 形式と座標系

USD は 3 形式:USDA(テキスト、協業・版管理向け)、USDC(バイナリ、ジオメトリ保存向け)、USDZ(パッケージ、配布向け)。RealityKit は Y-up、-Z-forward。Blender は Z-up、Y-forward——エクスポート時 X 軸 -90° 回転(05:38)。RealityKit はメートル単位。他ツールの単位不一致はスケール問題の原因。

カラースペース:伝達関数 vs 色域

Reality Composer Pro では sRGB - Display P3 のように 2 語表示。第 1 は伝達関数:sRGB は知覚テクスチャ(ベースカラー、エミッシブ)、Linear はデータ/HDR。第 2 は色域:Vision Pro は Display P3 ネイティブ。他色域は Xcode ビルド時に自動変換(07:05)。

テクスチャパッキング

グレースケール(roughness、metallic、ambient occlusion)を単独使用すると圧縮されず App サイズ増。3 枚を RGB の R/G/B チャンネルにパック。パック後 RGB テクスチャが圧縮され PBR アセット全体が最大 40% 削減(09:02)。

Shader Graph ではパックテクスチャのノード型を vector3 に——シェーダーがデータテクスチャと認識しカラースペース変換をスキップ。Separate3 で RGB を分割:

// Shader Graph node wiring (not code—describes connections)
PackedTexture(vector3) -> Separate3
  .r -> Roughness
  .g -> Metallic
  .b -> Ambient Occlusion
  • vector3 型でカラースペース変換を回避
  • Separate3 が RGB を独立 float 出力に分割
  • 各チャンネルを PBR マテリアル入力へ接続

法線マップの形式とレンジ

RealityKit は OpenGL 形式。DirectX は G チャンネル反転。画像は 0–1 保存、マテリアルは -1–1 期待——value * 2 - 1 でマップ。Shader Graph の Normal Map Decode が一括変換(10:58)。NormalMap ノードはレンジ変換なし——Blender 同名ノードと挙動が異なる。

Material Instances による再利用

Shader Graph で Promote to Input 後、マテリアルを右クリック Create Instance。インスタンスはテクスチャ差し替え可、shader graph は共有。重複シェーダー読み込み回避で時間と性能を節約(11:24)。

Unlit + ベイク vs 動的光照

RealityKit ではリアルタイム光源にコスト。Apple はベイク推奨。サンプルは全 Unlit、各アセット 1 枚のベイクテクスチャ。解像度は距離でスケール——半分以上がユーザー周囲 5–10 m に配分(13:54)。

透明マテリアルのコスト

透明は overdraw 誘発——同一ピクセルを GPU が複数回計算。透明テクスチャよりジオメトリ:草は実ジオメトリ、低木は不透明コア+少量透明カード。三角形を増やして透明ピクセルを減らすのは予算内ならほぼ常に得(15:03)。

Sky Dome と IBL 設定

Sky dome:大きな LDR テクスチャ(水平 8K 推奨)+ Unlit、見えない部分をクロップ。IBL:小さな HDR(Lat/Long)、鏡面反射なしなら 512px 十分。IBL 有効化には Image Based LightImage Based Light Receiver を追加し参照を接続(16:29)。

EnvironmentRadiance ノード

Unlit と PBR の中間:EnvironmentRadiance で Unlit 内に IBL スペキュラー——フル PBR より軽く、純 Unlit より視点依存の金属反射あり(18:42)。

重要ポイント

  1. テクスチャパッキングツール:プロジェクト内グレースケールを自動スキャン、R/G/B パック、Shader Graph ノード設定生成。なぜ価値があるか:手動パックはチャンネルずれ・色空間ミスが多い。自動化で PBR アセット最大 40% 削減。始め方:Reality Composer Pro テクスチャをスクリプト走査、同名アセットの roughness/metallic/ao 三つ組を ImageMagick で合成、vector3 パックテクスチャ出力。

  2. シーンポリゴン予算ダッシュボード:Statistics Panel ベースで三角形占有率をリアルタイム表示、10 万可視閾値で警告。なぜ価値があるか:Apple は予算を示すが自動監視なし。多くのチームは性能問題後に最適化。始め方:USDA を解析、entity ごとに三角形数とバウンディングボックス、可視三角形推定、HTML レポート。

  3. 法線マップ自動修正パイプライン:OpenGL/DirectX 判定と G 反転、0–1 レンジ検出と Normal Map Decode 挿入。なぜ価値があるか:形式・レンジ問題は最多の視覚バグの一つ。始め方:インポート時スクリプトで G 方向とピクセルレンジ分析、修正要否をマーク。

関連セッション

コメント

GitHub Issues · utterances