WWDC Quick Look 💓 By SwiftGGTeam
Create 3D models with Object Capture

Create 3D models with Object Capture

元の動画を見る

ハイライト

macOS の場合PhotogrammetrySessionAPI を使用すると、数十枚の写真からマテリアル マップを含む USDZ 3D モデルを数分で生成できます。 Reduced から Raw までの 4 つの精度レベルをサポートし、Apple Silicon 上の Neural Engine によって高速化されます。

主な内容

3D モデルが必要です。従来のアプローチ: プロのモデラーを雇い、参照図面に基づいて形状をピンチアウトし、テクスチャを描画するのに数時間、場合によっては数日を費やします。コストも高いしサイクルも長い。

Object Capture は別の方法を提供します。写真を撮って Mac に転送し、コードを実行して、モデルが出力されるまで数分間待ちます。

この技術は写真測量と呼ばれます。この原理は新しいものではありません。コンピューター ビジョンを使用して、複数の 2D 写真から 3D 構造を復元します。新しいのは、Apple がこれを 1 行のコードで呼び出せる macOS API にし、Apple Silicon 用の Neural Engine アクセラレーションを作成したことです。

現実のシナリオ: あなたはピザ店を開き、顧客が携帯電話で 3D ピザ モデルを表示できるようにする AR メニューを作成したいと考えています。以前は、外注のモデリングを探す必要がありました。ここで、自分で写真を撮り、オブジェクト キャプチャを使用してモデルを生成し、それを AR Quick Look に直接投入します。

##詳細

PhotogrammetrySession を作成する

06:56

API は RealityKit フレームワークに含まれています。最も基本的な使用法: 写真が含まれるフォルダーを指定してセッションを作成します。

import RealityKit

let inputFolderUrl = URL(fileURLWithPath: "/tmp/Sneakers/", isDirectory: true)
let session = try! PhotogrammetrySession(
    input: inputFolderUrl,
    configuration: PhotogrammetrySession.Configuration()
)

キーポイント:

  • iPhone、iPad、DSLR、さらにはドローンでも写真を撮影できます
  • iPhone 12 Pro などの深度センシングをサポートするデバイスで HEIC 形式で写真を撮影した場合、API は深度データを自動的に抽出して、実際のサイズと重力方向を復元します。
  • 写真を1枚ずつインポートする高度な使い方もサポートPhotogrammetrySample、各画像には深度マップ、重力ベクトル、またはカスタム セグメンテーション マスクを含めることができます。

非同期出力ストリームを処理する

09:26

セッションの作成後、出力ストリームに接続して進行状況と結果を受信する必要があります。Swift用StoreKit 2AsyncSequence成し遂げる:

Task {
    do {
        for try await output in session.outputs {
            switch output {
            case .requestProgress(let request, let fraction):
                print("Request progress: \(fraction)")
            case .requestComplete(let request, let result):
                if case .modelFile(let url) = result {
                    print("Request result output at \(url).")
                }
            case .requestError(let request, let error):
                print("Error: \(request) error=\(error)")
            case .processingComplete:
                print("Completed!")
                handleComplete()
            default:
                break
            }
        }
    } catch {
        print("Fatal session error! \(error)")
    }
}

キーポイント:

  • for try awaitセッションが解放されるか致命的なエラーが発生するまで、ループはメッセージを受信し続けます。
  • .requestProgressプログレスバーを駆動するために使用できます
  • .requestCompleteモデルファイルのURLを返す
  • .processingCompleteキューに入れられたすべてのリクエストが処理されたことを示します

複数の精度レベルのモデルを同時に生成

13:44

1 回の呼び出しで複数の出力を同時にリクエストでき、エンジンが計算を共有するため、連続したリクエストよりも高速になります。

try! session.process(requests: [
    .modelFile("/tmp/Outputs/model-reduced.usdz", detail: .reduced),
    .modelFile("/tmp/Outputs/model-medium.usdz", detail: .medium)
])

キーポイント:

  • 中間計算結果を再利用するために、同時に複数の詳細レベルをリクエストします
  • 4 つのレベルすべてを一度にリクエストすることもできます
  • process()すぐに返され、結果は出力ストリームを通じて非同期的に配信されます。

4種類の出力精度

23:51

レベル目的材料が含まれています
プレビューインタラクティブなプレビュー、品質は最低ですが生成は最速-
縮小ウェブ/モバイル AR、低ポリゴン数ディフューズ、ノーマル、AO
単一モデルの高精細ディスプレイディフューズ、ノーマル、AO
フルゲーム/ポストプロダクション、最高のジオメトリの詳細拡散、法線、AO、ラフネス、ディスプレイスメント
プロフェッショナルなワークフロー、最大数の面 + オリジナルのテクスチャ最大拡散テクスチャのみ、マテリアルを自分で処理する必要があります

キーポイント:

  • Reduced/Medium は圧縮および最適化されており、AR Quick Look で直接使用できます
  • ほとんどのレンダリング シナリオに適した完全にベイクされた PBR マテリアル
  • Raw は独自のパイプラインを持つスタジオ向けであり、面とテクスチャの詳細の数が最も多くなりますが、後処理が必要です

インタラクティブなワークフロー

15:28

最終モデルを直接生成することに加えて、API はインタラクティブなワークフローもサポートします。

  1. まず質問してくださいdetail: .preview低品質のプレビュー モデルを生成する
  2. 同時にリクエストする.bounds推定キャプチャ量を取得する
  3. UIのバウンディングボックスを調整し、不要な部分(オブジェクトを支えるベースなど)を切り取ります。
  4. ルート変換 (ズーム、移動、回転) を調整します。
  5. 調整されたジオメトリパラメータを含む最終モデルをリクエストします。

このプロセスにより、メモリ使用量が最適化されながら、事後編集の必要がなくなります。

写真のベストプラクティス

20:08

  • オブジェクトの選択: 十分なテクスチャの詳細を持つオブジェクトを選択します。透明で反射率の高い領域は避けてください。オブジェクトは硬い必要があり、反転して写真を撮ったときに変形してはなりません
  • 背景: シンプルな背景に配置すると、オブジェクトが目立つようになります。
  • 撮影方法: すべての角度を均一にカバーできるように、オブジェクトの周りをゆっくりと移動します。通常は 20 ~ 200 枚のクローズアップ写真で十分です
  • オーバーラップ: 隣接する写真間のオーバーラップを高く維持します。
  • 構図: オブジェクトが画面いっぱいになるようにし、オブジェクトのサイズに応じて水平ショットまたは垂直ショットを選択してください。
  • フリップショット: 底面を再構築する必要がある場合は、オブジェクトを反転して撮影を続けます。
  • 推奨ソリューション: ターンテーブル + ソフトボックス + 均一な照明。CaptureSample アプリの時限シャッターを使用してターンテーブルの回転を同期します。

Apple は、iOS で深度と重力データを含む高品質の写真を撮影する方法を示す CaptureSample アプリ (SwiftUI で書かれた) を提供しています。手動および時間指定のシャッター モード、写真の品質をすばやく確認するためのギャラリーをサポートしています。

重要ポイント

  1. 電子商取引商品の 3D 表示ツールを作成します。iPhone を使用して製品写真を一周撮影し、Mac にアップロードして精度を落とした USDZ を自動的に生成し、AR Quick Look を Web ページに埋め込みます。顧客は携帯電話を使用して 3D 製品を表示できます。入口API:PhotogrammetrySession + .reduced

  2. 文化遺物のデジタルアーカイブシステムを構築。この博物館は、一眼レフを使用して文化遺物を撮影し、フル精度のモデル アーカイブを生成し、オンライン展示用に中精度で出力します。入口API:PhotogrammetrySession+ 複数の詳細レベルが同時に要求されます。

  3. 家具配置 AR アプリケーションを作成します。ユーザーは自分の家具の写真を撮って 3D モデルを生成し、AR を使用して新しい家の配置効果をプレビューします。iPhoneの深度データを使用して実際のサイズを自動的に復元します。入口API:PhotogrammetrySession+ HEIC 深度データ。

  4. 3D フード メニュー ツールを作成します。レストランは料理の写真を撮り、数分で 3D モデルを生成します。顧客は QR コードをスキャンして、回転する 3D 料理を確認します。入口API:PhotogrammetrySession + ARQuickLook

  5. 対話型のモデル改良ツールを作成します。まずプレビュー モデルをリクエストし、ユーザーが UI でクロップ フレームと回転を調整できるようにし、確認後に完全精度の出力を生成します。外部の 3D 編集ソフトウェアは忘れてください。入口API:PhotogrammetrySession + .preview + geometryパラメータ。

関連セッション

コメント

GitHub Issues · utterances