WWDC24:魅力的な空間写真と空間ビデオの作成(空間ビデオの視野角が狭い理由を解説)
※本サイトは、アフィリエイト広告および広告による収益を得て運営しています。購入により売上の一部が本サイトに還元されることがあります。
Appleが、WWDC24において「魅力的な空間写真と空間ビデオの作成」を公開しています。
空間写真と空間ビデオは、ビジュアルストーリーテリングにまったく新しい次元をもたらす新しいメディアです。私たちは、このメディアを使って家族との思い出を振り返ったり、世界中のストーリーを共有したり、水中や空中に私たちを連れていったり、さまざまなことをする人たちに驚かされてきました。
そして今、機械学習によって、どんな写真も空間写真に変換することができ、まったく新しい方法で昔の思い出を追体験することができます。
さまざまなタイプのステレオビデオを見てみましょう。
Stereoscopy(3次元映像)は、Vision Pro用にビデオを拡張する素晴らしい方法で、Appleはそれをサポートするいくつかのフォーマットを提供しています。
まず、AppleTVやDisney+アプリで利用できる3D映画のような3Dビデオがあります。これらはフラットスクリーンでレンダリングされますが、コンテンツはステレオスコピックであるため奥行きがあり、ビデオの動きはスクリーンから飛び出して見えたり、スクリーンの中に引っ込んで見えたりします。
さらに、Vision ProやiPhone 15 Proで撮影できる空間ビデオもあります。これはウィンドウを通してレンダリングされ、エッジの周りにかすかな輝きとカスタム再生コントロールがあります。
これにより、奥行き感が強調され、一般的な不快感を和らげることができます。
空間ビデオは、ポイント・アンド・シュート・フォーマットとして素晴らしい働きをします。
3D映像制作のルールに精通していなくても、iPhoneのようなデバイスで、快適で説得力のあるコンテンツを撮影することができます。
ハイエンドのプロフェッショナル・コンテンツには、180度の8K解像度とSpatial Audioで撮影されたApple Immersiveビデオがあります。VisionOS 2.0では、空間ビデオと同様に、小さなフローティングウィンドウでコンテンツをレンダリングするプレビュープレゼンテーションが追加されました。
これにより、他のアプリとインタラクションしながら、ステレオでビデオを見ることができます。
まず、AVCaptureDeviceを変更します。空間ビデオは、ワイドカメラとウルトラワイドカメラを同時にストリーミングする必要があるので、builtInDualWideCameraを使います。
次に、空間ビデオをサポートするビデオフォーマットを選びます。videoDeviceのフォーマットを繰り返し、isSpatialVideoCaptureSupportedがtrueかどうかをチェックします。対応しているフォーマットが見つかったら、それをvideoDeviceのactiveFormatにします。videoDeviceのロックとアンロックを適切に行う。そして、エラー処理を追加しましょう。条件を満たす空間フォーマットが見つからなければ、false を返すようにします。
最後に、空間ビデオキャプチャがサポートされているかどうかを確認し、サポートされている場合は、isSpatialVideoCaptureEnabledをtrueに設定します。
これはiPhone 15Proでのみ機能し、他のデバイスではisSpatialVideoCaptureSupportedがfalseを返すことに注意してください。その場合は、そのエラーを適切に処理する必要があります。
最高品質のスタビライズを得るには、prefariceVideoStabilizationModeをcinematicExtendedEnhancedに設定します。これは、より長いルックヘッドウィンドウを使用し、より多くのフレームをクロップすることで、より滑らかな動画を得ることができます。スムーズなビデオは常に望ましいものですが、visionOSでは画面サイズが他のデバイスよりもはるかに大きくできるため、特に重要です。
AVCaptureVideoPreviewLayer APIを使えば、他の動画フォーマットと同じように、動画のプレビュー・フィードを得ることができます。ただし、iPhoneのディスプレイは単眼なので、空間的なプレビューはできません。そのため、デバイスの向きに関係なく、常にワイドカメラを表示します。
ここで重要なのは、空間映像に使用される2つのカメラ、ワイドとウルトラワイドは、実は異なる種類のカメラだということです!
ワイドは一般的な写真撮影に最適なiPhoneのカメラで、ウルトラワイドはドラマチックな広角ショットやクローズアップのフォーカスに最適です。この2つのカメラにはそれぞれ異なる集光能力と最短撮影距離があります。
空間撮影の場合、私たちが補正に使っているコンピュテーショナル・フォトグラフィーのテクニックのおかげで、ほとんどの場合、これらの違いはあまり目立ちません。
しかし、低照度下で空間映像を撮影する場合、各カメラのノイズレベルが異なり、Vision Proで見たときに違和感を感じることがあります。同様に、カメラの最短撮影距離よりも被写体に近づいて撮影すると、フォーカスの不一致が生じ、違和感を感じることがあります。
iPhoneのプレビューは単眼なので、後でVision Proでビデオを見るまで、これらの問題に気づかないかもしれません。そしてその時には、撮影しようとした瞬間が過ぎてしまっていて、録画し直すには遅すぎるかもしれません。
この問題に対処するため、AVCaptureDeviceに新しいspatialCaptureDiscomfortReasons変数を作成しました。アプリでKey Value Observationを使ってこれを観察し、.subjectTooCloseや.notEnoughLightの条件が検出されたときに適切なガイダンスUIをレンダリングすることができます。
これはiPhoneのカメラアプリで、被写体に近づきすぎると警告が表示され、後ろに下がると警告が消えます。あなたのアプリでも、同様のガイダンスUIを表示することをお勧めします。
さて、空間ビデオを録画したので、再生方法を見てみよう。最初のステップは、アセットが空間的であることを検出し、それをロードすることです。
PhotosPicker、PhotoKit、AVAssetPlaybackAssistantなど、いくつかの方法があります。
PhotosPicker APIは、ユーザーがフォトライブラリからアセットを選択するのに役立つビューを提供します。空間アセットのフィルタリングに対応しました。マッチングパラメータに.spatialMediaを指定すると、ユーザーのライブラリがフィルタリングされ、空間的な写真やビデオのみが表示されます。
ユーザーからの入力が不要な場合は、PhotoKitを使ってユーザーのフォトライブラリからすべての空間アセットをプログラムで取得できます。フェッチ述語を作成する際に、PHAssetMediaSubtypeとしてspatialMediaを設定するだけです。
また、空間写真のみを返すようにフェッチリクエストを変更することもできます。
あるいは、空間的なビデオだけを返すようにすることもできる。
また、動画については、AVAssetPlaybackAssistant を使用することもできます。playbackConfigurationOptionsをクエリして、ローカルアセットが空間的かどうかをチェックできます。
これは、アプリがフォトライブラリ以外のソースから動画を読み込む場合に最適なオプションです。
ファイルフォーマットレベルでは、空間ビデオは、ステレオMV-HEVCビデオに余分な空間メタデータを加えたものです。
また、空間写真とは、ステレオ HEIC で、2 つの画像をステレオグループにし、空間メタデータを付加したものです。両方のファイルフォーマットに共通する空間メタデータを詳しく見てみましょう。
空間メタデータにはいくつかのものがあります。プロジェクション。これは、世界のオブジェクトと画像内のピクセルの関係を定義するものだ。空間写真や動画は常に直行投影を使用します。
次に、ベースラインと視野があり、これらは空間資産をキャプチャするカメラの物理的特性を記述します。
そして視差調整があり、これはウィンドウ表示の3D効果をコントロールします。さらに、左右の画像をどのように作成するかのガイドラインもあります。
これらは画像の特性であり、画像内のピクセルとして保存されるため、明示的なメタデータフィールドではなく、ファイルが空間的であるかどうかをチェックする際には強制されません。しかし、最適な視聴体験のためには、これらを理解し、正しく理解することが重要です。
最初のメタデータフィールドはベースラインで、軸間距離と呼ばれることもあります。ベースラインを設定する最適な距離は、用途によって異なります。
64mm程度の値を設定すると、人間の視覚に最も近い画像が得られます。しかし、より小さな値は、特にクローズアップシーンを撮影するときに素晴らしいことができますし、本当に大きなベースラインは、ステレオ風景写真のように、遠くのオブジェクトの奥行きをキャプチャするために使用されます。
広いベースラインとのトレードオフは、誇張された奥行きによる小型化効果です。
次のメタデータである視野角は、各カメラで撮影された水平方向の角度を度単位で表したものです。
一般的に、視野角が高いほど、より多くのシーンが見えるため、没入感が増します。
しかし、固定センサーの場合、視野角が高いほど、同じピクセル数により多くのコンテンツが広がるため、角度分解能は低くなります。
さらに、私たちの投影は直線的です。視野角が90度を超えると、特にエッジ部分の角度サンプリング密度が非効率的になるため、あまりお勧めできません。
これがステレオ画像のペアで、画像の中心は光軸と一致しています。しかし画像をトリミングすると、中心画素が変わってしまいます。新しい中心画素はもはや光軸と一直線上にはないので、この切り取られたステレオペアは最適とは言えません。
同様に、画像を左右にずらすと中心画素が変わり、このガイドラインが崩れます。このような水平シフトは、3D映画制作では芸術的効果を得るためによく行われます。
しかし、空間メディアでは推奨されません。このような効果を得るために、視差調整メタデータがあります。
まず、垂直方向の視差がないことを確認しましょう。これを行う最も簡単な方法は、左右の画像を撮影し、両方の画像に共通する特徴点を特定することです。
ここでは鳥のくちばし。そして両画像の間に線を引く。この線が完全に水平であれば、画像は正しくアライメントされており、垂直方向のズレはありません。
トをレンダラーに与えるものです。コンバージェンス調整または水平画像平行移動と呼ばれることもあります。
実際には、画像幅のパーセンテージとしてエンコードされた水平オフセットを表すだけです。
負の値は、左フレームを右に、右フレームを左に押します。正の値は、それらを逆方向に押します。
画像が水平方向にシフトすると、脳が知覚する3Dシーンはz軸に沿って奥行きがシフトします。したがって、負の値を設定すると、コンテンツが視聴者に近く見え、正の値を設定すると、コンテンツが遠くに押しやられます。
この値を設定するときは注意してください!負の値を大きくしすぎると奥行きの衝突を引き起こし、正の値を大きくしすぎると、特に背景のオブジェクトに対して視線が発散してしまい、不快に感じることがあります。
このシーンでは、ハチドリが窓の正面のすぐ向こうに来るような値を選びます。数パーセントのシフトでも、画像の認識を劇的に変えるのに十分なので、視差調整の値を選ぶときは、必ずVision Proでテストしてください。
これで、水平方向の視差調整を加えることができ、空間アセットの構築に必要なインプットがすべて揃いました。あとは、このデータを適切なファイル形式にパッケージするだけだ。ビデオの場合はステレオMVHEVC、写真の場合はステレオHEICです。
最終的な作品は、Apple Vision Proで正しくレンダリングされ、ウィンドウ表示でも、完全没入型でも、驚くほど美しくなりました。