3Dビデオを撮影するためのiOSアプリの構築方法(ケーススタディ)
公開: 2022-03-10私たちのチームも3D撮影に魅了されました。 人間の視覚装置の特徴と立体写真の技術的詳細を徹底的に研究しました。 そこで、3D動画を撮影してYouTubeにアップロードするiOSアプリを開発することにしました。 このアプリの背後にあるアイデアは、2台のiPhoneを特別なフレームに取り付けることで、3Dビデオの撮影を容易にすることでした。 それがステレオビデオレコーダーアプリの登場です。
Smashing Magazineの読者と、3Dビデオの作成に関する調査を共有することにしました。 また、アプリケーション作成の技術的特徴について説明し、iPhoneのマウントに使用されるフレームワークの詳細な図面を提供します。
すべてが始まった経緯
3Dビデオ機能の研究では、仮想現実の実験から始めました。 段ボールのフレームを作り、3DフォーマットのiPhone2台で世界を見渡した。 私たちの研究の詳細は私たちのブログで見つけることができます。 ここでさらに進みます。
この調査を続けて、アプリケーションの別のプロトタイプを作成することにしました。これにより、立体3Dビデオを録画してYouTubeにアップロードできるようになります。
立体視は、フラットな画像に奥行きのある錯覚を作り出す方法です。 ステレオ録音は19世紀から知られています。 立体3Dビデオを作成する際に、両眼視をシミュレートします。 瞳孔間の距離により、人間の脳は周囲の空間の体積、つまり物体までの距離を分析するのがはるかに簡単になります。 双眼立体視は、映画業界で広く使用されています。 ステレオフォーマットを使わないハリウッドの傑作に出会うことはほとんどありません。
私たちのアプリのプロトタイプの目的は、2つの異なるiPhoneカメラで同時にビデオを撮影し、結果のビデオファイルを1つにマージして、Google Cardboard、バーチャルリアリティヘルメット、3DTVなどの3Dメガネを使用して表示することでした。
ステレオ画像と3D画像の認識
ステレオ画像と3D画像の認識について詳しく説明します。 実際、ステレオグラフィーは、時間の経過とともに進化した私たちの目のように機能します。 両眼の間に距離があるため、左眼と右眼の網膜に投影される画像は少し異なります。 この違いは視差と呼ばれます(2つの異なる位置から見たときにオブジェクトの位置が異なるように見える効果)。 ただし、観察者には2つの別々の画像は表示されません。 視覚装置は、単一の空間画像の知覚を形成し、ボリューム、距離などを感知できます。視覚装置は、特定のポイントで空間に配置された空間画像とオブジェクトを検出、処理、および投影することを理解することが重要です。
人間の視覚装置がどのように機能するかを理解することで、視聴者が完全な3D画像を感じることができるように、視覚資料をどのように準備して再現する必要があるかを徹底的に調査できます。
すべてを順番に見ていきましょう。
物理法則の下で動作する他のデバイスと同様に、人間の視覚装置には独自の機能と制限があります。
まず、視覚プロセスの観点から、視点(POV)と呼ばれる単一の点のみに視線を集中させることを理解する必要があります。 実際、POVは、目が焦点を合わせ、左右の視線が通過するポイントです。 POVまでの距離に応じて、左目と右目の視線間の角度が異なります。 線がPOVに収束するように目が向けられます。 これらの線は、人が遠くを見たとき、つまり無限大を見たときに平行になります。
目の変位が小さいため、網膜に投影される画像はわずかに異なります。 これは通常、人が見ている画像の変位の形で現れます—左目は左に、右目は右に。 すでに述べたように、この現象は視差と呼ばれます。
ただし、視覚装置は特定の視差値でのみボリュームを認識できます。 オブジェクトまでの距離に応じて、視差は近くのオブジェクトと遠くのオブジェクトで異なります。 視差が限界値を超えている可能性があり、人には3Dオブジェクトではなく、分岐した画像が表示されます。 近くのオブジェクトから遠くのオブジェクトへのビューの切り替えを含む実験は、これの詳細のより良い理解を提供する可能性があります。
図からわかるように、前景にビューを固定すると、背景オブジェクトが分岐し始めます。 背景にビューを固定すると、前景の画像が二股になります。 この視覚装置の特徴は、3D撮影やステレオ画像の再生の特徴において重要な役割を果たします。
普段の生活では、1つの物体だけを追跡することに慣れているため、この効果に気付くことはありません。視界を変えると、視力は新しい条件にすばやく適応します。 しかし、あらかじめ決められた視差のある2枚の画像を使って体積画像を人工的に投影しようとすると、視覚装置は通常ほど速く適応できなくなります。 視覚装置が通常モードで動作するためには、3Dビデオ機器を視聴者の目に合わせて調整し、観測点がどこにあるかを分析する必要があります。 この機器は、必要な視差を備えたステレオ画像も作成する必要があります。
ただし、これを実装することは技術的に非常に困難です。 通常、幾何学的および技術的な撮影パラメータが固定された単純なスキームが使用されます。 これらのパラメータは、クローズアップビューと遠景ビューでは異なります。 幾何学的および技術的パラメータとは、カメラの視野、中心からのカメラの水平変位、カメラの回転角、およびカメラの収束点を意味します。
したがって、1セットの撮影機材(2台のカメラと1台のフレーム)しかない場合、同じように近くにあるものと遠くにあるものを撮影することはできません。 より正確には、撮影することはできますが、たとえば、機器を遠景に調整してクローズアップを撮影する、またはその逆のステレオ効果のあるビデオを見るのは非常に不快です。バックグラウンドで弱く表現されています。
アイデアから実践へ:iPhoneをマウントする方法
私たちの考えに戻りましょう。 ステレオ3Dビデオを録画できるモバイルアプリのプロトタイプを開発することにしました。 上記のすべてを考慮して、以下を評価する必要がありました。
- 2台のiPhoneを使用してステレオ画像を撮影する基本的な可能性。
- カメラを使用する通常の条件を考慮に入れて、高品質で快適なステレオ知覚を保証する有効距離範囲。
プロトタイプの作成に非常に近づいたとき、私たちが最初にしたことは、私たちのタスクに対するiPhoneカメラの可能性を評価することでした。 iPhoneがクローズアップショットに許容できる画角を提供することを発見して、私たちはうれしく驚きました。 すでに述べたように、2台のカメラを並べて配置するだけでは、優れたステレオ効果を得るのに十分ではありません。 通常、射撃を計算するためのアルゴリズムは、計画のパラメータ、つまり、最も近いオブジェクトと最も遠いオブジェクトまでの距離、およびフレームの平面内のオブジェクト間の距離を設定することから始まります。 次に、これらのデータに基づいてインストールパラメータが選択されます。
カメラ間の距離の簡単な計算は、次の式に基づいて行うことができます。
-
Parallax<sub>fore</sub>
は、ステレオペアフレームが互いにオーバーラップするときの前景画像の最大変位を設定します。 -
L<sub>fore</sub>
=前景オブジェクトまでの距離 f
=レンズの焦点距離L
=レンズの焦点までの距離M
=フレームズーム
私たちの場合、標準のカメラを使用していたため、アルゴリズムを少し変更する必要がありました。したがって、レンズの焦点距離は厳密に設定されています。 私たちの仕事は、快適なステレオ効果と、撮影対象物までの許容範囲の距離を取得することでした。 そのため、両方のカメラを相互に配置して、それらの中心間の必要な距離(カメラの中心間の距離)と収束角度を見つけるために、いくつかの実験を実行する必要がありました。
プロトタイピングプロセスのタスクを簡素化するために、特定のポイントで収束を達成するためにカメラを回転させるのではなく、無限遠での収束を使用することにしました。 最良の結果を得るには、カメラの収束角度を正確に調整する必要があることがわかりました。 そして、iPhoneの取り付けに使用する段ボールのフレームを作ることを計画したという事実を考慮すると、カメラの収束角度を調整することは事実上不可能になります。 そこで、何度も実験を重ねた結果、カメラ間の距離を最適なバランスで撮影し、近距離での撮影と優れたステレオ効果を実現するという妥協点にたどり着きました。
私たちの目的は、iPhone用の最もシンプルなフレームを開発することでした。これは、製造が簡単で、操作が簡単で、必要な撮影パラメーターを提供し、必要な剛性を備えているものです。 そこで、フライス盤または3D印刷によって、プラスチックまたは発泡材(この場合はポリスチレン)で作成できる3Dモデルを選択しました。 もちろん、将来的には、段ボール製のデバイスなど、より簡単に作成できるデバイスを開発したいと考えています。
現時点での唯一のハードウェアの制限は、まったく同じカメラで同じデバイスを使用する必要があることです。
以下は、画面サイズが4.0、4.7、5.5インチのさまざまなバージョンのデバイスのフレームの詳細図です。iPhone6+と6S +、6、6Sと7、および5と5Sに適しています。
立体3Dビデオ撮影用アプリ
アプリは2つのデバイスで同時に実行されますが、撮影は1つのデバイスからのみ制御されるため、特別な方法で撮影プロセスを制御する必要はありません。
簡略化した形式では、アプリケーションの標準的な使用シナリオは、次の一連のアクションで構成されます。
- 2台のiPhoneをフレームに取り付けます。
- 2つのデバイスでアプリを実行します。
- どのデバイスがマスターとして機能し、どのデバイスがスレーブとして機能するかを決定します。 マスターデバイスから記録を開始します。 (2番目のデバイスで追加のアクションを実行しないでください。)
- 録画後、録画されたフラグメントの同期と、YouTubeにアップロードする準備ができたビデオのレンダリングを待ちます。
- 同期後はいつでも動画をYouTubeにアップロードし、3DTVまたはバーチャルリアリティグラスで視聴できます。
主な作業は、iPhoneの1つであるマスターデバイスでのみ行われることに注意してください。 私たちが撮影を開始するのはこのiPhoneです。 ビデオは処理され、マスターデバイスでもYouTubeにアップロードされます。 YouTubeにアップロードするためのビデオの準備には時間がかかります。 これは、使用するデバイスのパフォーマンスと、マスターデバイスとスレーブデバイス間の接続の品質によって異なります。
スレーブとして機能する2番目のiPhoneは、2番目のカメラとしてのみ使用されます。 撮影が終了すると、ビデオフラグメントがマスターデバイスに送信されます。
撮影した動画のギャラリーを表示したアプリのメイン画面のスクリーンショットを以下に示します。 ビデオは、埋め込みプレーヤーとYouTubeの両方で表示できます。 ここでは、さらに射撃の役割(マスターとスレーブ)がデバイスにどのように割り当てられているかを確認することもできます。
テクニカルハードル
非同期化
ビデオフラグメントによるすべての操作は、強力なフレームワークAVFoundationの助けを借りて、可能であればハードウェアアクセラレーションを使用して実行されます。
YouTubeにアップロードするには、ビデオの断片をフレームごとに並べて接着します。 明らかに、すべての左フレームは時間によって右フレームと一致する必要があります。 ソースの1つのフレームにわずかな遅延があると、ステレオ効果が失われたり歪んだりし(特にダイナミックシーンで)、画像が2倍になります。
この問題を解決するために、同時にデバイスでのビデオの録画を開始しました。 実際、記録は開始ボタンを押した直後ではなく、特定のアルゴリズムがアクティブになる短い遅延の後に開始されます。これは、高精度時間プロトコル(PTP)がクロックスキューを測定する方法と非常によく似ています。 したがって、30〜50ミリ秒の発散でビデオ録画を開始することができました。これは、最悪の場合、約1つの非同期フレームに相当します。
iOSマルチピア接続のバグ
ネイティブiOSライブラリのMultipeerConnectivityを使用して、2つのデバイス間の通信を確立しました。 このライブラリは、同じWi-Fiネットワーク上のデバイス間、およびBluetooth経由で、またはiPhoneのWi-FiDirectに類似したものを使用して直接接続を確立します。 したがって、ワイヤレスまたはモバイルインターネットネットワークがなくても、オープンフィールドでもビデオフラグメントを撮影および同期できます。 ただし、マスターデバイスからYouTubeにビデオを送信するには、インターネット接続が必要です。
このライブラリを使用することにした主な理由は、同じネットワークに接続されていないときに2つのデバイス間の通信を確立するためです。 明らかに、劣悪なステレオ3D撮影条件では、期待できるのは3G接続です。 3Dビデオを撮影するには、同期のためにデータパケットを最小の遅延で送信できることが重要です。 また、インターネットに接続していないと撮影できません。 したがって、MultipeerConnectivityライブラリはライフラインになりました。 その上、それはアップルプラットフォームのためのネイティブソリューションです。
ただし、すべてが期待どおりに進んだわけではないことに注意してください。 Multipeer Connectivityとの統合中に、多くのバグが検出され、ライブラリ全体の動作が非常に不安定になりました。 宣言された機能のほとんどは、理論上のみ存在していました。 デバイスが同じネットワークセグメント内で動作する場合、MultipeerConnectivityはより効果的に動作します。 接続は許容可能な期間確立されます。 メッセージ配信時間の許容可能な分散が達成されます。
ただし、比較的ステレオ3Dの撮影条件が悪い場合や、1か所に多数のモバイル機器がある場合は、接続の確立は宝くじのようになります。 Appleライブラリはまだ完全には開発されておらず、まだかなり未加工であると感じる人もいます。
デバイスのリンク
プロトタイプの初期バージョンでは、自動リンクプロトコルを実装しました。 プロトコル自体は、初期の時点で、過半数に基づいてピアデバイスからコーディネーターを選択するための一連のルールで構成されています。
次に、コーディネーターは、スレーブデバイス間の円内に特別なマーカーを渡すことにより、各デバイスからテレメトリ統計を定期的に収集します。 これらのテレメトリデータに基づいて、フレームに取り付けられたデバイスのペアが比較されます。 ペアが識別されると、マスターとスレーブがペアに割り当てられ、それらの間の直接接続が確立されます。 この段階で、リンクは完了です。
自動および独立した検索
必要に応じて、前のセッションに参加したデバイスの自動で独立した検索(一意の識別子に基づく)が同期のために実行されました(記録時にデータがマスターデバイスにロードされなかった場合に記録されたビデオトラックを取得します)。 加速度計の読み取り値は、主に、ペアに対応するデバイスを識別するために使用されました。 コーディネーターは、潜在的なペア間の相関を計算しました。 相関が特定のしきい値を超えた場合、デバイスは潜在的なペアと見なされ、その後、二次機能がテストされました。
上記のマルチピア接続の問題を完全に克服できなかったため、自動リンクを一時的に中止することにしました。これは、平均的なユーザーに非常に悪影響を及ぼし、ユーザーエクスペリエンスを損なう可能性があるためです。
私たちが最終的に得たもの
最終的に、非常に興味深く高品質なアプリを実現しました。 このアプリで録画したビデオを見ると、劇場で3D映画を見るのと同じ感覚が得られます。
もちろん、人間の目は少し違った働きをします。その線は空間の特定の点で収束し、焦点に依存します。 私たちの場合、目は常に平行に見えます。 ただし、この事実があっても、ステレオ効果は非常に顕著です。空間のボリュームは、画面とほぼ同じように、前景、中景、および背景で感じられます。
このビデオを正しく視聴するには、VRメガネまたは3Dテレビが必要です。
そのため、ステレオビデオレコーダーアプリを使用して、ビジネスニーズや楽しみのために3Dステレオビデオを自分で撮影できるようになりました。
バグと将来の計画に取り組んでいます
私たちの目標は達成されました。3Dビデオを作成するための基準を研究し、すべてのユーザーがステレオビデオを作成できるアプリを作成しました。 しかし、それは思ったほど簡単ではありません。 私たちはいくつかのことに取り組む必要があります。 MultipeerConnectivityライブラリで多くの問題が発生しました。 アプリが限られたインターネットアクセスでうまく機能するように、それを置き換えるか、回避策を見つけたいと考えています。
また、次のことも必要です。
- 2つのデバイスに同期フォーカシングと露出メータリングを実装し、ステレオオーディオトラックの録音を実装します。
- デバイス用のより実用的なフレームを開発します。
- 自動デバイスペアリングメカニズムを統合します。
- さまざまなデバイスオプションのサポートを提供し、さまざまなビデオ解像度を処理できるようにします(現時点では、同じiPhoneバージョンでのみビデオを撮影できます。たとえば、iPhone5Sは別のiPhone5Sとのみペアリングできます)。
- アプリのAndroidバージョンを作成します。
私たちのステレオビデオレコーダーアプリはすでにAppStoreにあります。 これを使用して3Dビデオを作成できます。 この技術は今後も発展し続け、最終的には立体視ビデオを作成するためのソリューションがさらに増えると確信しています。 時代に合わせて頑張ります。
このアプリの使用についてのコメントやアイデアを残してください。 ご意見・ご感想をお待ちしております。
SmashingMagの詳細:
- モバイルアプリケーションを構築する4つの方法、パート1:ネイティブiOS
- スケッチを使用したiOSおよびAndroidアプリのプロトタイピング(景品付き)
- Webデザインにおけるビデオの未来
- アプリ、ゲーム、モバイルWebのテスト自動化の基本