WWDC Quick Look 💓 By SwiftGGTeam
Discover ARKit 6

Discover ARKit 6

元の動画を見る

ハイライト

ARKit 6 では、4K 30fps ビデオ、高解像度写真の実行、HDR、低レベルの AVCaptureDevice 構成、安定したプレーン アンカー、モーション キャプチャの改善などのロケーション アンカーのサポートが追加され、AR アプリがより高い画質とより詳細なカメラ制御の両方を取得できるようになります。


主要内容

AR アプリでは、常に画質、トラッキング、パフォーマンスの間でトレードオフを行う必要があります。映画やテレビのプレビュー、バーチャル プロダクション、写真測量にはより多くのピクセルが必要です。ゲームやインタラクティブなエクスペリエンスには、より高いフレーム レートが必要です。スキャンと後処理では、カメラの元の情報を取得することも期待されます。

ARKit 6 のアップデートは、このトレードオフに重点を置いています。高解像度シーン用の 4K ビデオと高解像度のシングル フレーム写真、高コントラスト シーン用の HDR を提供し、画像スタイルをカスタマイズする必要があるアプリを公開します。AVCaptureDevice、平面アンカー、ボディトラッキング、および地理的アンカーを進歩させ続けます。

この話は API だけに関するものではありません。まず、ARKit がビニング (ピクセル結合) を使用して、60 fps とメモリ使用量の削減と引き換えにカメラ画像を HD にダウングレードする方法について説明します。次に、ARKit 6 が新しいハードウェアでこの手順をスキップし、アプリが 4K 画像を直接使用できるようにする方法について説明します。 (02:25)

開発者にとって、重要な判断は非常に現実的です。アプリが映画やテレビ、仮想制作、オブジェクトのキャプチャまたは写真に使用される場合は、新しい画質機能を優先する必要があります。アプリが高リフレッシュ レートに依存するゲームまたはインタラクティブ エクスペリエンスの場合は、HD 60fps の方が適している可能性があります。 (06:26)


詳細

4K ビデオ モード: ピクセルを大量に使用するシーンに備える

(04:10) ARKit 6 はビニングをスキップし、3840×2160 の画像領域を直接使用して 30fps で 4K ビデオを出力できます。 RealityKit は引き続きスケーリング、トリミング、レンダリングを処理します。独自の Metal レンダラーを作成するアプリは引き続き使用できますARSession.currentFrame.capturedImage画面を取得します。

講演では、4K を有効にするには、まず構成が 4K ビデオ形式をサポートしているかどうかを照会し、それを構成に割り当ててセッションを実行する必要があると述べました。 (04:49) 以下は、逐語的なドラフトの API 名に従って整理された最小限の呼び出しメソッドです。

let config = ARWorldTrackingConfiguration()

if let format = ARWorldTrackingConfiguration.recommendedVideoFormatFor4KResolution {
    config.videoFormat = format
}

session.run(config)

キーポイント:

  • ARWorldTrackingConfiguration()ワールドトラッキング構成を作成します。 -recommendedVideoFormatFor4KResolutionデバイスと構成が 4K をサポートしている場合は、4K ビデオ形式を返します。 -if let4K をサポートしていないデバイスを処理します。講義ノートがサポートされていない場合は返却されますnil
  • config.videoFormat = formatセッションを 4K ビデオ形式に切り替えます。 -session.run(config)更新された構成で AR セッションを開始します。

4K モードは、iPhone 11 以降と M1 チップを搭載した iPad Pro で利用できます。出力は3840×2160、30fpsです。 iPad が全画面表示されると、16:9 フレームの両側が切り取られるため、最終的なレンダリングがより拡大されて見えることがあります。 (05:25)

4K を使用する場合は、もう 1 つのメモリ規則があります。それは、長時間保持しないことです。ARFrame。 4K フレームはより多くのメモリを消費し、長時間保持するとシステムが画像を解放できなくなり、レンダリング フレームが低下し、最終的にはレンダリング フレームが低下する可能性があります。ARCamera追跡状態の戻り値は制限されています。保持されている画像が多すぎるかどうかは、コンソールの警告で確認できます。 (05:53)

高解像度の背景写真: ARSession を中断せずに 1 枚の写真を撮影します。

(07:30) ARKit 6 を使用すると、アプリは ARSession の実行中にオンデマンドで高解像度の写真をリクエストできます。ビデオ ストリームは中断されず、別のストリームを開始する必要はありません。AVCaptureSession。 iPhone 13 では、この写真は 1,200 万ピクセルのワイドカメラをフルに使用しています。

オブジェクト キャプチャの場合、これは簡単です。このアプリは AR を使用して実際のオブジェクトに撮影ガイドを重ね合わせ、適切な角度で高解像度の写真をトリガーして、写真測量アルゴリズムへの入力を向上させることができます。 (09:06)

まず、高解像度キャプチャをサポートするビデオ形式を選択します。

if let hiResCaptureVideoFormat = ARWorldTrackingConfiguration.recommendedVideoFormatForHighResolutionFrameCapturing {
    // Assign the video format that supports hi-res capturing.
    config.videoFormat = hiResCaptureVideoFormat
}
// Run the session.
session.run(config)

キーポイント:

  • recommendedVideoFormatForHighResolutionFrameCapturing高解像度の背景写真をサポートするビデオ形式を照会します。 -if letこの機能をサポートしていないデバイスに構成を強制することは避けてください。 -config.videoFormat = hiResCaptureVideoFormat現在の構成で高解像度キャプチャをサポートする形式を使用してください。 -session.run(config)この形式を有効にするには、セッションを開始または再起動してください。

ユーザーが画面をタップしたり、ターゲット角度にスキャンしたり、アプリ内のその他のイベントが発生したりすると、単一フレーム キャプチャがトリガーされます。

session.captureHighResolutionFrame { (frame, error) in
   if let frame = frame {
      saveHiResImage(frame.capturedImage)
   }
}

キーポイント:

  • captureHighResolutionFrame帯域外の高解像度画像キャプチャをトリガーします。
  • 完了ハンドラーは非同期で戻りますARFrameそしてerror
  • if let frame = frameイメージにアクセスする前に、キャプチャが成功したことを確認してください。 -frame.capturedImage後続の処理のために保存または送信される高解像度の画像です。 -saveHiResImageアプリ独自の保存ロジックを表します。実際のプロジェクトでは、大きな画像を長時間保持しないように、できるだけ早く書き込みまたは処理する必要があります。

HDR: ハイコントラスト環境でより多くのディテールを保持できるようにします

(11:22) HDR (ハイ ダイナミック レンジ) は、より広い色範囲をキャプチャし、ディスプレイ デバイスにマッピングします。スピーチに使用される裏庭のシーンの比較説明: HDR をオンにすると、暗い場所の木のフェンスと明るい場所の雲の詳細がより多く保持されます。

HDR を有効にする 現在のビデオ形式がサポートされているかどうかを確認するには、次の手順を実行します。

if (config.videoFormat.isVideoHDRSupported) {
    config.videoHDRAllowed = true
}
session.run(config)

キーポイント:

  • config.videoFormat.isVideoHDRSupported現在のビデオ形式が HDR をサポートしているかどうかを問い合わせます。
  • 講演では、現在 HDR をサポートしているのはビニングされていないビデオ形式のみであると述べられています。 -config.videoHDRAllowed = trueARKit が HDR を使用できるようにします。 -session.run(config)HDR 設定を使用してセッションを実行します。

HDR にはパフォーマンスのオーバーヘッドが伴います。これは、屋外の建築プレビュー、映画やテレビの絵コンテ、空や影の詳細を保持する必要がある AR 撮影アプリなど、高コントラストの環境、または画質要件が明確な場合にのみオンにしてください。 (12:22)

AVCaptureDevice: 露出、ホワイト バランス、フォーカスを制御します

(12:29) 一部の AR アプリでは、露出、ホワイト バランス、フォーカス イベントのトリガーなどのカメラ設定を手動で制御する必要があります。 ARKit 6 を使用すると、プライマリ カメラに対応する下層のレイヤーにアクセスするための設定が可能になりますAVCaptureDevice

if let device = ARWorldTrackingConfiguration.configurableCaptureDeviceForPrimaryCamera {
   do {
      try device.lockForConfiguration()
      // configure AVCaptureDevice settings

      device.unlockForConfiguration()
   } catch {
      // error handling

   }
}

キーポイント:

  • configurableCaptureDeviceForPrimaryCamera構成可能な基になるものを返しますAVCaptureDevice
  • if let deviceデバイスまたは構成がカメラへの直接アクセスをサポートしていない状況に対処します。 -try device.lockForConfiguration()カメラ設定を変更する前にロックしてください。
  • アノテーションの位置は、露出やホワイトバランスなどで設定できます。AVCaptureDevice設定。 -device.unlockForConfiguration()変更が完了したら、構成ロックを解除します。 -catch処理ロックまたは構成エラー。

ここは自制してください。 ARKit のカメラ映像は、レンダリングの背景とシーン分析の入力の両方です。強い露出オーバーなどの設定は、ARKit のシーン分析に影響を与え、出力品質を低下させる可能性があります。 (12:58)

ARKit 6 はあらゆる環境でも動作します。ARFrameEXIFタグを公開します。ホワイトバランスや露出などの情報が含まれており、後処理や撮影条件の記録に使用できます。 (13:29)

プレーン アンカー: アンカー ポイントの方向がより安定し、幾何学的な変化が ARPlaneExtent に入ります。

(13:53) iOS 15 では、平面ジオメトリが更新されると、それに応じて平面アンカーの回転も更新されます。これにより、アンカーにアタッチされたビジュアル コンテンツがそれに応じて回転します。

iOS 16 では、プレーン アンカーとプレーン ジオメトリの更新は分離されています。平面は展開を続けてジオメトリを更新できますが、アンカーの回転は変更されません。すべての平面形状情報が入力されますARPlaneExtent、でrotationOnYAxisY 軸上のジオメトリの回転を表します。 (14:39)

講演で述べられた RealityKit 視覚化コードは次のとおりです。

// Create a model entity sized to the plane's extent.
let planeEntity = ModelEntity(
    mesh: .generatePlane (
        width: planeExtent.width, 
        depth: planeExtent.height),
    materials: [material])

// Orient the entity.
planeEntity.transform = Transform(
    pitch: 0, 
    yaw: planeExtent.rotationOnYAxis, 
    roll: 0)

// Center the entity on the plane.
planeEntity.transform.translation = planeAnchor.center

キーポイント:

  • ModelEntity平面を表示するソリッド ボディを作成します。 -.generatePlane(width:depth:)によるとplaneExtent.widthそしてplaneExtent.height平面メッシュを生成します。 -materials: [material]この平面にマテリアルを割り当てます。 -Transform(pitch:yaw:roll:)エンティティの方向を設定します。 -yaw: planeExtent.rotationOnYAxisアンカーの回転の変更に依存するのではなく、ジオメトリ独自の Y 軸回転を使用します。 -planeEntity.transform.translation = planeAnchor.centerエンティティを平面アンカーの中心座標に移動します。

平面が更新されるたびに、幅、高さ、中心、rotationOnYAxis。この新しい動作を有効にするには、プロジェクトのデプロイメント ターゲットを iOS 16 に設定する必要があります。 (16:16)

モーション キャプチャとロケーション アンカー: トラッキングは拡大し続けます

(16:34) モーション キャプチャにより、左右の耳のジョイントが 2D スケルトンに追加され、全体的なポーズ検出が向上します。 iPhone 12 以降のモデル、最新の iPad Pro および M1 iPad Air では、3D スケルトンのジッターが少なく、時間的一貫性が向上しています。人が遮られている場合やカメラに近づいている場合でも、追跡はより安定します。これらの改善点を利用するには、展開ターゲットを iOS 16 に設定する必要があります。

(17:29) ロケーション アンカーによりさらに多くのリージョンが追加されました。演説で新たに挙げられた地域には、カナダのバンクーバー、トロント、モントリオール、シンガポール、東京を含む日本の7大都市圏、オーストラリアのメルボルンとシドニーが含まれる。オークランド、テルアビブ、パリも今後サポートされる予定です。

そのまま記載されたユーザビリティ チェック エントリは次のとおりです。ARGeoTrackingConfiguration.checkAvailability

ARGeoTrackingConfiguration.checkAvailability(at: coordinate) { available, error in
    if available {
        // Create ARGeoAnchor-based content at this coordinate.
    }
}

キーポイント:

  • checkAvailability(at:)座標がロケーション アンカーをサポートしているかどうかを確認するために使用されます。 -coordinateアプリが geo-AR コンテンツを配置または検証する場所です。
  • 完了ハンドラーは、この座標の利用可能性を返します。 -availabletrue の場合、新しいものを作成しますARGeoAnchorARコンテンツのこと。
  • この段落は、逐語的な説明に基づいて整理された通話例です。特定のエラー処理とアンカー ポイントの作成は、プロジェクトの要件に従って完了する必要があります。

重要ポイント

  • AR フレーミングおよび再撮影ツールを作成: ユーザーが歴史的な写真の撮影場所に行き、AR を使用して構図をガイドできるようにします。 ARKit 6 の高解像度の背景写真は、セッションを停止せずに高解像度の写真を保存できます。入り口はcaptureHighResolutionFrame

  • オブジェクト キャプチャ ウィザード: 実際のオブジェクトの周囲の角度、距離、ミス ショットのヒントを表示します。 ARKit は 3D UI のオーバーレイを担当し、高解像度の写真は写真測量のためのより良い入力を提供し、結果を RealityKit またはオブジェクト キャプチャ プロセスに渡します。

  • バーチャル プロダクション プレビューアー: 4K AR 背景を使用して、現場で仮想プロップやシーンを合成します。まず 4K ビデオ形式をクエリし、デバイスのパフォーマンスに基づいて 4K 30fps または HD 60fps のどちらを使用するかを決定します。

  • 制御可能な画像スタイルを備えた AR カメラの作成: 合格configurableCaptureDeviceForPrimaryCamera露出、ホワイトバランス、またはフォーカスイベントを調整します。ブランドフィルター、展示会、または均一なトーンを必要とする映画やテレビの AR アプリに適しています。

  • 安定した平面アノテーション ツール: iOS 16 を使用ARPlaneExtent平面が展開されたときにデスクトップ、壁、または床の注釈がアンカーの回転によって回転されないように、サイズと回転を更新します。


関連セッション

  • RoomPlan でパラメトリック 3D ルーム スキャンを作成 — RoomPlan は、ARKit と機械学習を使用して部屋のパラメトリック 3D スキャンを生成します。これは、空間スキャン ワークフローを理解し続けるのに最適です。
  • あなたの世界を拡張現実に — この講演では、Object Capture、RealityKit、ARKit を使用して現実のオブジェクトをインタラクティブな AR コンテンツに変える方法を説明します。
  • USD の基礎を理解する - AR アセットとスキャン結果は USD または USDZ パイプラインに送られることが多く、このトークは 3D シーン記述の基礎を補完します。
  • 優れた AR エクスペリエンスの品質 - ARKit 6 は、基礎となる機能を解決します。この講演では、これらの機能を明確な AR エクスペリエンスに設計する方法について説明します。

コメント

GitHub Issues · utterances