ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
ARKit 6について
ARKit 6を使用して、強力で洗練された拡張現実Appを構築する方法をご確認ください。4K HDRでレンダリングされたARエクスペリエンスを生み出す方法や、Appのカメラ設定のカスタマイズ方法について解説します。また、ARKitセッションから高解像度の静止画をエクスポートする方法、平面推定やモーションキャプチャの活用方法、新しい地域でARロケーションアンカーを追加する方法も紹介します。
リソース
- ARKit
- Explore the ARKit Developer Forums
- Human Interface Guidelines: Augmented reality
- Tracking Geographic Locations in AR
関連ビデオ
Tech Talks
WWDC22
WWDC21
-
ダウンロード
♪ ♪ こんにちは Christianです ARKitチームのエンジニアです 「ARKit 6について」 の セッションへようこそ 拡張現実フレームワークの 最新の進化を活用する方法について ご案内します この数年間 ARKitを使って みなさんが創造してきたものを 見て 嬉しく思っています インテリアデザイン 旅行 バーチャル展示会 ゲームなど 様々な分野で 素晴らしいAppを 目にすることができます Appleのチームは みなさんからの 評価に 細心の注意を払い その多くをARKit 6に 反映させました では 見てみましょう 今までで最も高画像解像度で カメラストリームを実行する 新しい4Kビデオモードを 導入しています その後 ビデオの背景を より制御しやすくするための カメラに追加された 機能強化についてお話します また 平面アンカーの 動作に関するアップデート モーションキャプチャAPIの追加 最後に ロケーションアンカーが サポートされる新しい都市 について共有します
まず4Kビデオから始めましょう ここ数年の間に 高解像度コンテンツへの 需要が高まり 特に拡張現実を活用した 映像制作を行うAppは より多くの画素数を 渇望しています ARKitで画像がどう記録され 処理されるか説明しましょう iPhone 13 Proの カメラモジュールです これを開いてみると その設定がよくわかります 広角カメラと超広角カメラ についてお話します これらのカメラは ワールドトラッキング モーションキャプチャ 人物セグメンテーションなど 様々なコンピュータビジョンの タスクに使用できます 広角カメラは レンダリングの背景の画像を 配信するものなので 特別なものとなります レンダリングのために画像がどう 処理されるかを理解することが重要です センサーレベルに ズームインしてみましょう
ARKit用の画像を取り込む際 イメージセンサの大半を使います もっと正確に言うと 今回のモデルでは 3840×2880画素の領域です 取得後 ビンニングと呼ばれる 処理を行います 動作は以下の通りです ビンニングは 2×2画素の 領域を取り 画素値を平均化し 1画素を書き戻すものです これには2つの大きな メリットがあります まず 画像の寸法を 2分の1に縮小し この場合 1920×1440画素に 縮小します 結果 各フレームで消費するメモリ や処理能力が 削減されます これにより デバイスはカメラを 最大60フレーム/秒で動作でき レンダリングのための リソースを解放できます また 画素値を 平均化することで センサーノイズの影響を 軽減できるため 低照度環境での使用に 有利になります 最終的に 約17ミリ秒ごとに HD解像度の画像を提供する カメラストリームが 完成します 現在のフレームを様々な コンピュータビジョンタスクに 使用した後 ARKitはレンダリングのための 現在のフレームを表出します 独自のMetalレンダラを 作成している場合 ARSessionの currentFrame.capturedImage を介してアクセスできます
RealityKitを使用する場合 画像は背景に使うために 自動的にさらに処理されます 画面幅2532画素に合わせて オンデバイスで拡大縮小され ディスプレイの縦横比に 合わせて切り取られます RealityKitは この海賊船の ようなバーチャルコンテンツを フレームの上にレンダリングして 合成するタスクを実行し 最終的な結果を 画面に表示します 今回 最新のハードウェアの パワーを利用して ARKitでフル4Kビデオモードを 可能にしました Appは ビンニングの手順を 飛ばして フル4K解像度で 直接アクセスしてより高解像度の 画像を利用できます 4Kモードでは3840×2160画素 の画像領域を使用し 30フレーム/秒のビデオを 撮影できます これらの変更点を除けば 以前と同様に動作します RealityKitを使えば 拡大縮小 切り取り レンダリングが行われます
簡単な手順で新しい 4Kモードを有効にできます コードでどう見えるか 見てみましょう
'ARConfiguration' に新しい コンビニエンス関数である recommendedVideoFormatFor 4KResolution が追加され そのモードにデバイスが対応する時 4Kビデオフォーマットが返されます デバイスや設定が対応しない場合は この関数はnilを返します そして このビデオフォーマットを 構成に割り当て その構成で セッションを実行します
4Kビデオモードは iPhone 11以降と M1チップを 搭載したiPad Proで 利用できます 解像度は3840x2160画素 30フレーム/秒です 縦横比は16:9です iPadでは 全画面表示のため 画像を切り取る必要があり 最終画像は拡大表示された ように見えるかもしれません
ARKit 特に新しい4K解像度で 使用する時 最良の結果を 得るには 幾つかのベストプラクティスに 従うことが重要です ARFrameは長時間 保持しないでください これは システムのよるメモリの 解放を妨げ さらにARKitによる 新しいフレームの表出を 止めることになるかもしれません これは レンダリングの フレーム落ちとして確認できます 最終的にARカメラのトラッキングステートが "limited"にフォールバックするかもしれません コンソールのワーニングを確認し 常に多くの画像を 保持しすぎないように 注意してください 新しい4Kビデオフォーマットが 実際に適した選択かも検討してください 動画 映画製作 バーチャルプロダクションなど 高解像度ビデオの 恩恵を受けるAppが 良い候補になります 高解像度の画像を扱うと メモリ領域を追加で消費します 高いリフレッシュレートに 依存するゲームや他のAppでは 60フレーム/秒のフルHDビデオの 使用をお勧めします
新しい4Kモードに加え カメラをより自在に 操ることができる機能拡張が いくつかあります まず 高解像度バックグラウンド フォトAPIの紹介と 新しいHDRモードを 有効にする方法を紹介します さらに より細かい制御を 行うために 基盤となる AVCaptureDeviceに アクセスする方法を示し ARKitでEXIFタグを読み取る 方法を紹介します では 高解像度バックグラウンド フォトAPIを確認してみましょう
ARSessionの実行中も 通常通り ビデオストリームに アクセスできます さらにARKitでは ビデオストリームが 中断されることなく 実行されている間に バックグラウンドで オンデマンドに単一の写真の 取り込みをリクエストできます この単一の写真フレームはカメラの センサをフル活用したもので iPhone 13では 広角カメラの 1200万画素をフルに使えます WWDCの準備中 ARKitチームで 新しいAPIで何が作れるかを 表現する写真Appの 楽しいアイデアを 思いつきました 今回の例では 有名な海賊旗が Apple Infinite Loop Campus の上に掲げられていた 2016年4月1日に 遡ってみましょう 撮影者のTommyに 6年前の写真をどこで 撮ったのか聞いてみました
座標をもとに 2016年4月に Tommyが立っていた場所と 全く同じ 大きな青い点で 示された場所に案内する ロケーションアンカーが 作成できました その場所に到達すると フォーカスのための四角形を表示し 完璧な写真に仕上げられます 最後に 画面をタップして 写真を撮ることができます その写真は 現在の ARKitセッションの実行中に 別のAVCaptureセッションを スピンアップすることなく 固有のカメラ解像度で 撮影できます ARと写真の能力を 結合した どのような アイデアがあるのか 楽しみですね また APIが大きな効果を 発揮する使用事例として Object Captureを用いた 3Dモデルの作成があります Object Captureは このスニーカーのような 現実の物体の写真を取り込み 最新のフォトグラメトリ アルゴリズムを使って AR Appに配置できる 3Dモデルに変換します ARKitの使用で 物理的対象の 上に3D UIを重ね合わせる ことができ より良い キャプチャガイダンスを提供します また 新たに高解像度 バックグラウンドフォトAPIが追加され 対象物をより高解像度で 撮影し よりリアルな 3Dモデルを作成できるように なりました 私はフォトグラメトリの 大ファンなので 今年の "自分の世界を拡張現実に" のセッションはぜひ 見ていただきたいですね コードで高解像度の画像を 取り込む方法を紹介します まずhiResCaptureに対応した ビデオフォーマットかを確認します そのためにコンビニエンス関数 recommendedVideoFormat ForHighResolutionFrameCapturing を使用できます フォーマットが対応している ことを確認したら 新しいビデオフォーマットを設定し セッションを実行できます さらに 高解像度の画像を 取り込む時の指示が必要です 先ほどの例では 画面をタップすると 撮影が始まります 独自のAppでは高解像度の フレーム取り込みのトリガとなる 様々なイベントに対処 させたい場合があります それは本当にみなさんの 使用事例によります captureHighResolutionFrame という新しい関数あります この関数を呼び出すと 高解像度の画像の アウトオブバンドでの 取り込みが開始されます 高解像度の画像と 他のすべてのフレーム属性を含む ARFrameへのアクセスを 得ることができます フレーム取り込みが成功したか 確認してから その内容にアクセスします この例では フレームを ディスクに保存しています 特に これらの画像は イメージセンサの解像度を フルに使っているため 先ほど述べた 画像の保持のベストプラクティスも 覚えておいてください 次は HDRについてです ハイダイナミックレンジは より広範囲の色を取り込み ディスプレイに展開します これは コントラストが高い環境で 最も顕著に現れます 私の裏庭の良い例です このシーンでは 木のフェンスなど非常に 暗い部分と 空の雲など 非常に明るい部分の 両方があります 右のように HDRモードをオンにすると 雲のふわふわ感など このあたりの詳細が HDRでよりよく 保存されています HDRをオンにする方法を コードで見てみましょう HDRの対応をしているか どうかは ビデオフォーマットの isVideoHDRSupported プロパティで確認できます 現在 HDRに対応しているのは ビンニングのないフォーマットのみです HDRに対応している場合は 設定のvideoHDRAllowedを trueにし その設定で セッションを実行します HDRをオンにすると 動作に影響が出るので 必要な時のみ使用しましょう 露出やホワイトバランス などの設定を 手動で行いたい場合 AVCaptureDeviceに 直接アクセスし 設定を変更することが できるようになりました このコード例では 設定の configurableCaptureDeviceFor PrimaryCameraを呼び出して 基盤となるAVCaptureDeviceに アクセスできるようにします この機能を利用し Appの カスタムルックを作成します 画像はレンダリングの背景の使用だけ でなく ARKitがシーンの分析 のために積極的に利用する ことを念頭に置いてください なので 強い露出過度の様な 変更は ARKitの出力品質に 弊害がある可能性があります フォーカスイベントのトリガ など 高度な操作も可能です AVCaptureSessionsの 設定方法は developer.apple.comのAVCaptureの ドキュメントを参照ください 最後に ARKitはEXIFタグを Appに対し公開します すべてのARFrameで 使用可能です EXIFタグには ホワイトバランスや露出など ポストプロセスに役立つ 設定情報が含まれています 画像取り込みパイプラインの アップデートはここまでです では 平面アンカーの変更 について見てみましょう
平面アンカーは ARKitの 初版から人気のある機能です 多くの方に 平面アンカーと その下の平面ジオメトリをきれいに 分離する必要があるとの ご意見をいただきました そのため 平面アンカーの 挙動や平面ジオメトリに関する アップデートをお伝えします これはiOS 15の典型的な 平面アンカーの例です ARセッションの冒頭で テーブルの上にあるこの質感の良い ノートに水準を 適合させるのです セッションを実行すると テーブルの新しい部分の構成が 見えてくるため 水準は徐々に更新されます 平面ジオメトリが更新されるたびに アンカーの回転も更新され 平面の新しい方向が 反映されます iOS 16では 平面アンカーと その平面ジオメトリを より明確に 分離するようになりました
平面アンカーとジオメトリの更新が 完全に切り離されました テーブルの全てが見えるようになると 平面は拡張して ジオメトリを更新していきますが アンカーの回転自体は 一定に保たれます
左側の旧来の動作と 比較すると iOS 16の平面アンカーは ARセッション全体を通して ノートに沿った 同じ向きのままであることが わかります
平面ジオメトリに関する すべての情報は ARPlaneExtentというクラスに 含まれるようになりました 更新は 平面アンカー自体の 回転を通して表現されません 代わりに ARPlaneExtentには 回転角度を表す新しい プロパティ rotationOnYAxis が含まれています 新しいプロパティに加えて 平面は幅と高さ 更には PlaneAnchorの中心座標で 十分に定義されています この平面のビジュアライズをコードで 作成する方法を紹介します
まず 指定された 幅と高さに従って 平面メッシュをベースに 実体を生成します 次に y軸の回転に従って エンティティの変換を設定し さらに中心プロパティの値で オフセットしています 平面の更新ごとに 幅 高さ 中心座標と新しいrotation OnYAxisが変わる恐れが ある事を考慮すべきです 新しい動作を利用するには Xcodeの設定でdeployment targetを iOS 16に設定してください 次のアップデートは モーションキャプチャです 機械学習の立案者たちは さらなる改良に励みました 2Dスケルトンと 3Dジョイントの 両方について 一連のアップデートがあります 2Dスケルトンでは 左耳と右耳という2つの 新しいジョイントを トラッキングします また 全体の姿勢検出も 改善しました iPhone 12以降 および M1チップを搭載した 最新モデルのiPad Proや iPad Airでは 赤色で示す様な3Dスケルトンが 改善されました 微小変動を減らし 全体的に 時間に対する一貫性が高くなります 人物の一部が隠れている時や カメラの近くを歩く時にも より安定したトラッキングが可能です 改善されたモーションキャプチャを 利用するにはXcodeの設定で deployment targetをiOS 16に 設定してください 次に ロケーションアンカーに 対応する新しい都市や国に ついてもお知らせします Appleマップは ロケーション アンカーAPIを利用して 歩行時のインストラクションを表示 していることをご存知ですか この例では ロケーションアンカーの 力を借りて ロンドンの街を 案内していることが わかります ロケーションアンカーは すでに 米国の都市や英国ロンドンで 利用可能なところが 増えています 本日より カナダの バンクーバー トロント モントリオールの3都市で 利用可能です シンガポールでも利用可能で 日本では東京を含む7つの 都市圏で利用可能です オーストラリアのメルボルン シドニーでも同様です 年内に ニュージーランドの オークランド イスラエルのテルアビブ フランスのパリでも 利用可能にする予定です 特定の座標でロケーション アンカーが対応しているかを 知りたい場合は ARGeoTrackingConfigurationの checkAvailabilityメソッドを 使用すればOKです 以上がARKit 6における すべてのアップデートです 要約すると 新4Kビデオフォーマットで ARKitを実行する方法の紹介 上級者向けには HDRを有効にする方法や AVCaptureDeviceを手動で 制御する方法を紹介しました さらに画素数を必要とする Appのために ARKitの セッションから高解像度の写真 の取得方法を実演しました 平面アンカーの 新しい動作について話をし モーションキャプチャの 新しい耳のジョイントや その他の改良点について 発表しました ロケーションアンカーが年内に どの国で利用可能になるかも お知らせしました
ご視聴 ありがとうございました WWDC 2022を お楽しみください
-
-
5:00 - HighRes Capturing
if let hiResCaptureVideoFormat = ARWorldTrackingConfiguration.recommendedVideoFormatForHighResolutionFrameCapturing { // Assign the video format that supports hi-res capturing. config.videoFormat = hiResCaptureVideoFormat } // Run the session. session.run(config)
-
10:55 - highRes background photos
session.captureHighResolutionFrame { (frame, error) in if let frame = frame { saveHiResImage(frame.capturedImage) } }
-
12:00 - HDR support
if (config.videoFormat.isVideoHDRSupported) { config.videoHDRAllowed = true } session.run(config)
-
12:35 - AVCapture Session
if let device = ARWorldTrackingConfiguration.configurableCaptureDeviceForPrimaryCamera { do { try device.lockForConfiguration() // configure AVCaptureDevice settings … device.unlockForConfiguration() } catch { // error handling … } }
-
16:00 - plane anchors
// 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
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。