ハイライト
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 はインタラクティブなワークフローもサポートします。
- まず質問してください
detail: .preview低品質のプレビュー モデルを生成する - 同時にリクエストする
.bounds推定キャプチャ量を取得する - UIのバウンディングボックスを調整し、不要な部分(オブジェクトを支えるベースなど)を切り取ります。
- ルート変換 (ズーム、移動、回転) を調整します。
- 調整されたジオメトリパラメータを含む最終モデルをリクエストします。
このプロセスにより、メモリ使用量が最適化されながら、事後編集の必要がなくなります。
写真のベストプラクティス
(20:08)
- オブジェクトの選択: 十分なテクスチャの詳細を持つオブジェクトを選択します。透明で反射率の高い領域は避けてください。オブジェクトは硬い必要があり、反転して写真を撮ったときに変形してはなりません
- 背景: シンプルな背景に配置すると、オブジェクトが目立つようになります。
- 撮影方法: すべての角度を均一にカバーできるように、オブジェクトの周りをゆっくりと移動します。通常は 20 ~ 200 枚のクローズアップ写真で十分です
- オーバーラップ: 隣接する写真間のオーバーラップを高く維持します。
- 構図: オブジェクトが画面いっぱいになるようにし、オブジェクトのサイズに応じて水平ショットまたは垂直ショットを選択してください。
- フリップショット: 底面を再構築する必要がある場合は、オブジェクトを反転して撮影を続けます。
- 推奨ソリューション: ターンテーブル + ソフトボックス + 均一な照明。CaptureSample アプリの時限シャッターを使用してターンテーブルの回転を同期します。
Apple は、iOS で深度と重力データを含む高品質の写真を撮影する方法を示す CaptureSample アプリ (SwiftUI で書かれた) を提供しています。手動および時間指定のシャッター モード、写真の品質をすばやく確認するためのギャラリーをサポートしています。
重要ポイント
-
電子商取引商品の 3D 表示ツールを作成します。iPhone を使用して製品写真を一周撮影し、Mac にアップロードして精度を落とした USDZ を自動的に生成し、AR Quick Look を Web ページに埋め込みます。顧客は携帯電話を使用して 3D 製品を表示できます。入口API:
PhotogrammetrySession+.reduced。 -
文化遺物のデジタルアーカイブシステムを構築。この博物館は、一眼レフを使用して文化遺物を撮影し、フル精度のモデル アーカイブを生成し、オンライン展示用に中精度で出力します。入口API:
PhotogrammetrySession+ 複数の詳細レベルが同時に要求されます。 -
家具配置 AR アプリケーションを作成します。ユーザーは自分の家具の写真を撮って 3D モデルを生成し、AR を使用して新しい家の配置効果をプレビューします。iPhoneの深度データを使用して実際のサイズを自動的に復元します。入口API:
PhotogrammetrySession+ HEIC 深度データ。 -
3D フード メニュー ツールを作成します。レストランは料理の写真を撮り、数分で 3D モデルを生成します。顧客は QR コードをスキャンして、回転する 3D 料理を確認します。入口API:
PhotogrammetrySession+ARQuickLook。 -
対話型のモデル改良ツールを作成します。まずプレビュー モデルをリクエストし、ユーザーが UI でクロップ フレームと回転を調整できるようにし、確認後に完全精度の出力を生成します。外部の 3D 編集ソフトウェアは忘れてください。入口API:
PhotogrammetrySession+.preview+geometryパラメータ。
関連セッション
- AR Quick Look、Object Capture との出会い — Object Capture によって作成された USDZ モデルを AR Quick Look 表示に使用します
- USD を使用した 3D ワークフローの作成 — 後処理に Raw 出力を必要とするワークフローに適した USD 形式の詳細な説明
- RealityKit 2 の詳細 — カスタム シェーダーやダイナミック テクスチャなど、RealityKit 2 の新機能
- RealityKit 2 でシェーダーを探索する — オブジェクト キャプチャによって生成されたモデルにカスタム マテリアル エフェクトを追加します
コメント
GitHub Issues · utterances