拡張現実はまったく新しいテクノロジーではありません。現実をコンピューター生成の画像と組み合わせることができる最初のレンズは 1968 年に作成されましたが、ボーイングのエンジニアが現実世界に仮想要素を配置し、その要素を同期させる概念として「拡張現実」という用語を作り出したのは 1990 年になってからでした。両方が一つの世界であるかのように見える動き。これらすべてを、両方の世界を統合したスクリーンを通して見ることができます。ゲーム Pokémon Goの成功とMicrosoft Hololens レンズのテクノロジーシーンでのプレゼンテーションにより、このテクノロジーが最前線に浮上し、誰もが予想していなかった昨年、Apple はこのテクノロジー用の独自のライブラリである ARKitで私たちを驚かせました。
今日、拡張現実は、スマートフォンそのものと同様に、仮想現実よりもさらに大きな可能性を秘めた新興テクノロジーとしてすでに受け入れられています。初代 iPhone がそうであったように、デバイスを操作する最良の方法としてタッチ インターフェイスを普及させたように、私たちのテクノロジーとの関わり方を再定義できるものです。拡張現実は次のステップとなる可能性があります。
なぜそれを拡張現実と呼ぶのか、それが Apple のソリューションでどのように機能するのか、そして ARKit 2 が提供する可能性について検討していきます。しかし、いつものように、皆さんがすでに知っていることについては説明しません。テクノロジーが内部でどのように機能するかを知っています。
ARKit
2017 年 6 月、Apple は、iOS 11 で 9 月にリリースされる独自の拡張現実ライブラリ (ARKit) を発表し、開発者を驚かせました。 Apple デバイスによって生成された世界がカメラ画像の上に配置され、実際にそこにあるかのように見える方法。しかし、この魔法はどのように機能するのでしょうか?すべてのものに視覚的な一貫性を持たせるにはどうすればよいでしょうか?
それはすべて、視覚慣性オドメトリと呼ばれるテクノロジーに基づいています。これは、カメラが捉えた画像と、カメラが捉えたさまざまな要素に光がどのように反射するかを解釈して、環境の 3D マップを取得し、カメラ自体とデバイスの位置からさまざまなオブジェクト間の距離を計算することができます。 。
慣性視覚オドメトリは、カメラで捉えた画像と、光がさまざまな要素でどのように反射されるかを解釈して、環境の 3D マップを取得し、距離を計算します。
ARKit の魔法は、拡張現実セッションを開始した瞬間に始まり、デバイスが座標 0、0、0 となる仮想環境を作成します。3 軸ですか?もちろん、X 軸 (水平)、Y 軸 (垂直)、Z 軸 (奥行き) です。私たちは三次元の世界にいます。さらに、視覚慣性オドメトリには 4 番目のパラメータ、W または回転軸が必要です。デバイスのデジタル コンパスを使用して計算された、デバイス自体の軸からの 360 度の回転を表す重要な軸。その瞬間から、デバイスの加速度センサーは、3D 環境内での X、Y、Z 軸の移動 (動き) と、W 軸のコンパスをシステムに通知します。は、あたかも鏡であるかのように、仮想世界を反映し、すべてが一貫していることを確認するために必要な情報を持っています。
デバイスの加速度センサーは、3D 環境内での変換 (動き) をシステムに通知し、必要な各情報を、まるで鏡であるかのように伝え、仮想世界を反映し、すべてを一貫性のあるものにします。
仮想椅子が点 X が 0.8、Y が 0.1、Z が 1.0 に配置されている場合、カメラを左に -0.1 移動すると、現実世界の位置が維持されます。デバイスを軸を中心に 90 度から 91 度まで回転させると、椅子自体の軸が回転します。その瞬間、動きを補正して椅子が回転していると思わせるために、その軸は 90 度から 89 度になる可能性があります。実際に現実世界に配置されます。それはとても簡単です。距離はメートル法に従って測定され、1.0 は現実の 1 メートルを表す浮動小数点値です。
これらすべては、Apple がシーン理解と呼ぶもの、つまり光の測定 (強度と色温度)、特徴点、および平面検出 (垂直および水平) の統合によって実現されます。視覚慣性オドメトリは、カメラの画像内でデバイスからの距離を計算できるものを見つけると、そこに点を置き、3D 空間での座標と回転を設定します。このようにして、これらの点を使用して、その上に仮想オブジェクトを配置できます。となることによって?なぜなら、デバイスがそれがどこにあり、どのような回転をしているかを認識している場合、その上に仮想オブジェクトを配置すると、その位置と回転がリアルタイムで同期されるからです。それらは機能ポイントによって異なります。
視覚慣性オドメトリは、カメラの画像内でデバイスからの距離を計算できるものを見つけると、そこに点を置き、3D 空間での座標と回転を設定します。
いくつかの関数点の結合が幾何学的にどのように表現されるかによって、多くの関数点が水平または垂直の表面を与える場合、平面を検出したと言います。そして、それを作成すると、表面 (厚さ 0 のガラステーブルのように見えますが、仮想世界にあります) に目に見えない要素が配置され、その上にデバイスによって生成された任意のオブジェクトを配置できるようになります。実際のテーブルを想像してください。それを検出し、それに一致する仮想面を配置します。これで、仮想要素をその平面上に配置できるようになり、カメラを移動すると、それらが実際のテーブル上に配置されたように見えます。
仮想要素を関数点または平面上に配置すると、アンカー ポイントを作成したと言います。そして、このポイントは、デバイスの動きに応じて位置と回転をリアルタイムで変更するポイントになります。変化を補正するためにミラーを移動します。拡張現実にオブジェクトを配置するには、2 つのオプションがあります。座標を確立してアンカー ポイント (そこに何があるかに関係なく) を作成して、オブジェクトを希望の場所に配置するか、ファンクション ポイントをアンカー ポイントに変換するか、アンカー ポイントを作成することもできます。平面でのアンカリング。
後者では、レイキャストと呼ばれる 3D デザインやゲームで使用されるテクノロジーを使用します。これは、ある点から発射され、コウモリのように、通過した場所の情報を持って原点に戻る目に見えない光線です。したがって、平面上でレイキャストを撮影すると、その平面上に仮想要素を配置できる実空間内の場所が返されます。または、任意の場所に対して射撃した場合、関数ポイント (または複数) に触れるとその位置が返され、それをアンカー ポイントに変換してそこに要素を配置できます。これは、ヒット テストまたはクラッシュ テストと呼ばれるものです。 3D ゲームで画面に触れることによって要素に触れていることを検出するために使用されるのと同じテクノロジー。
最後に、光検出により、カメラによって検出された強度と色温度を、使用している 3D 世界に配置した仮想ライトと同期させることができます。このようにして、仮想世界で照明されるオブジェクトは、実際のシーンの値と同じ強度と色温度で照明され、全体のより多くの部分として表示されます。実際、照明をオンまたはオフにすると、オブジェクトが照明の変化にどのように反応するかがリアルタイムでわかります。
これらすべてを実現する秘訣は、2 つの異なるテクノロジを組み合わせることです。1つはデバイスによって収集された情報を提供するテクノロジ、もう 1 つはその情報に基づいてシーンをレンダリングするテクノロジです。デバイスは、カメラのキャプチャ ライブラリを使用して 1 秒あたり 60 枚の画像を収集し (ビデオであるかのように)、各画像とともに、キャプチャされた画像とデバイスの相対位置を ARFrame オブジェクト (または拡張現実フレーム) に提供します。セッションが開始されたポイント 0,0,0 に移動します。この情報を使用して、レンダラ(Xcode でネイティブ プログラミングを使用する場合は 3D ゲーム用の SceneKit ライブラリ) は、シーン内の各要素の位置と回転がどのように変化するかを計算し、カメラ画像上に仮想要素をペイントします。キャプチャーした画像の上。 SceneKit はオブジェクトのみを描画し、残りは描画されない黒色であるため、現実と仮想の両方の世界の結合が得られます。しかし、私たちが見ているのはリアルタイムで生成されたビデオのようなものであり、カメラセンサーが直接キャプチャしたものではありません…
ARKit は、iPad Pro シリーズ、2017 年および 2018 年モデル、および 6s 以降の iPhone を含む A9 以降の CPU でのみ動作します。
ご想像のとおり、1 秒あたり 60 フレームで必要な処理量は非常に多くなります。そのため、ARKit は A9 以降の CPU でのみ動作します。これには、iPad Pro シリーズ、 2017 年および 2018 年モデル、および 6s 以降の iPhone が含まれます。
ARKitの歴史(概要)
ARKit の最初のバージョンでは、前述したように現実世界と仮想世界が同期され、ライト管理が可能になりました。そして、水平面(垂直面ではない)を検出することができました。さらに、検出された平面は規則的であり、長方形の平面であったに違いありません。
今年の 3 月に、 Apple は iOS 11.3 をリリースし、ARKit 1.5 を組み込みました。これにより、垂直面と不規則な表面の検出が可能になり、長方形の平面である必要はなくなりました。また、コンピュータ ビジョン テクノロジーを組み合わせて 2D 画像検出を組み込みました。このようにして、あらゆる種類の 2D 画像を含めることができ、それらが検出されると、画像が検出された場所に一致する平面を作成するために必要な情報が送信されます。
さて、2018 年 6 月、Apple は、2D 画像の検出と追跡、共有エクスペリエンス、参照マップの記録、反射率といった新機能を備えた ARKit 2.0 をiOS 12 とともに導入しました。さらに、慣性ビジュアル オドメトリ アルゴリズムが大幅に改善され、現実世界と仮想世界の間の同期精度がさらに向上しました。
ARKit 2、共有エクスペリエンスとシーン マップ
最初の素晴らしいニュースは Apple によって発表されませんでした。それは、これが ARKit の本質的な部分であり、したがって、一部の「より良い」部分を除いて、これに重点が置かれていなかったためです。しかし、それは言及する価値があります。私たちは精度について言及しています。最初のバージョンの ARKit はあまり安定しておらず、シーンを理解して解決するには非常に優れた光の状況が必要でした。ただし、 ARKit 2 では慣性視覚オドメトリ アルゴリズムが大幅に改善され、拡張現実がよりリアルに見えるようになりました。非常に信じられないほどの精度とリアルさで、デバイスの動きを通じて現実世界と仮想世界が同期している感覚を与え、以前のバージョンよりもはるかに優れています。
ARKit 2 は慣性視覚オドメトリ アルゴリズムを大幅に改善し、拡張現実がよりリアルに見えるようになりました。
しかし、これとは別に、Apple はいくつかの非常に興味深い改善を取り入れていますが、その中でも最も重要なのはエクスペリエンスの共有です。ただし、この機能は ARKit にそのまま組み込まれた機能ではなく、デバイス間でどこにいてもデバイス間で暗号化されたポイントツーポイント接続を作成する機能など、iOS にすでに存在する他のテクノロジを利用するため、注意が必要です。接続の種類 (AirDrop を使用するものと同じ)。このテクノロジーの使用には、Google のような他のソリューションに比べて、インターネット接続を必要としないという驚くべき利点があります。 Bluetooth を使用するだけで、どこでも複数のデバイス間で共有エクスペリエンスを作成できます。完全なプライバシーと、より実用的な機能。共有エクスペリエンスを機能させるためにデータがクラウドに送信されることはなく、インターネット接続も必要ありません。
経験を共有する秘訣は何かご存知ですか?これは、ARKit 2 のもう 1 つの新機能である、シーン マップを記録およびロードする機能に基づいています。ARKit は、カメラとシーン内のさまざまな点の間の距離を測定できるようにする特徴点を検索することを以前に説明しました。これらのポイントは、静止している場合に限定されるものではなく、デバイスを動かしながらシーンをマッピングする方法として追加されます。実際、平面を検出したが、その全体が画像内に表示されていない場合 (たとえば、テーブルの目に見える部分のみであるが、カメラに表示されている平面よりも大きい平面が検出された場合)、カメラを移動すると、平面が更新され、同じ平面内で検出されたすべてのエリアをカバーするように拡張されます。
これらのマップは、アプリを終了すると失われますが、デバイスのストレージに保存できるようになりました。このシステムは、スキャンされたシーン認識を参照として取得し、そのマップをディスクに保存します。これにより、記録した場所が「再検出」されたときに、特定の場所で開始したエクスペリエンスを復元できるようになります。たとえば、IKEA の家具を置くためにリビング ルームを作成した場合、(今のように) 部屋に入るたびにリビング ルームを最初から作成する必要はなくなります。シーン内のすべての要素のマップと位置を記録し、後でエクスペリエンスを復元することができます。
ARKit 2 でマップを記録すると、デバイスはすでにマップした場所を認識できるため、異なるセッションまたは日の間でエクスペリエンスを回復できます。
どうすればいいでしょうか?シーンが最初に検出され始めた(ほぼ)同じ点、または以前にマッピングされているためシステムによって認識できる点に携帯電話を置くだけです。私たちが多かれ少なかれ同じ場所に自分自身を置くと (正確である必要はないと私は主張します)、システムはシーンを検出したときに「すでにそれを知っていた」と認識し、そのためすべてをその場所に再配置することができます。アプリを終了する前でした。数日後でも。
これが経験を共有するためのコツです。このマップは他のデバイスと共有できるためです。 Apple が ARKit 2 のすべての新機能を実際に使用できるように開発者と共有した SwiftShot ゲームのようなアプリがある場合、そのゲームにはすでにすべての 3D 要素、図、要素が読み込まれています…しかし、私はゲームを作成し、シーンのマップを作成し、それを記録し、ポイントツーポイント接続を介して他のデバイスに渡します。したがって、それを受け取ったら、相手がいたのと(ほぼ)同じ場所に自分を置く必要があり、そうすれば同じものが見えるでしょう。このようにして、2 台のデバイス (または必要な数) を同時に接続して同じエクスペリエンスを得ることができます。
ただし、そのような共有経験はまだ存在しないことに注意してください。それは、私たち全員が同じものを見ているからですが、シーンでインタラクションが許可されている場合 (SwiftShot ゲームのように、ボールを投げて、配置されている木製の人形を倒す)、デバイス上に要素を投げるときに、残りの要素には何も表示されません。 。なぜなら?なぜなら、世界中に数千人が参加するマルチプレイヤー ネットワーク ゲーム (Fortnite など) で行うのと同じように、インタラクションを共有する必要があるからです。
マルチプレイヤー ゲームがどのように機能するか考えたことがありますか?そうですね、私たちは友達とはゲームをしません。それはすべてデマです。ゲームが行うことは、接続されているデバイスの数だけゲームをプレイすることです。私が 100 人のプレイヤーの間でフォートナイトをプレイしている場合、実際には全員がプレイするゲームはありません。それぞれのデバイス上で一度に 100 のゲームが存在します。それでは魔法はどこにあるのでしょうか?他の 99 人が自分の動きやアクションを私に送信し、私のゲームがそれらを再現するので、100 回のゲームでも同じことが起こります。つまり、同じイベントに対して 100 試合すべてでゲームが同じように反応するようになります。
私が 100 人のプレイヤーの間でフォートナイトをプレイしている場合、実際には全員がプレイするゲームは 1 つもありません。それぞれのデバイス上で一度に 100 のゲームが存在します。
したがって、(ポイントツーポイント接続を使用して)各プレイヤーが行うことを残りのプレイヤーに送信し、同じ結果を得るために各ゲームでそれを再現する必要があるのは私です。そして私は何を発信するのでしょうか?通常、キーストローク、マウスの動き、画面タッチ、コントローラーの動き、押されたボタンなど、プレーヤーが周辺機器を介して行う入力は、プレーヤーを動かすためにゲームが受け取るすべてのものです。これらのイベントを他のゲームに送信すると、その動きを他のゲームで複製して、複数のプレイヤーが同じゲームをプレイするという「フィクション」を作成できますが、これは技術的には誤りです。マルチプレイヤーの魔法。
環境内でのユーザーの行動が全員の目に影響を与えるようにするには、これと同じ前提を拡張現実ゲームやアプリにも適用する必要があります。それはとても簡単です。
画像とオブジェクトの検出と追跡
ARKit 1.5 では、以前に提供していた 2D 画像を検出できるようになったと以前に述べました。必要なだけ 2D 画像をロードし、現実世界の表現における画像の物理的なサイズを伝えることができ、システムがそれを検出すると、画像アンカーを作成します。ただし、注意してください。画像は検出されましたが、追跡できませんでした。 (たとえば) オブジェクトをその画像に貼り付けて、画像と一緒に移動させることはできません。または、その上に 3D オブジェクトを配置します。今まで。
ARKit 2 には画像検出モードが組み込まれており、画像を検出して追跡できるようになりました。これにより、参照画像上に作成された平面を更新し、その画像上でオブジェクトを移動したり、画像を置き換えるビデオを配置したりできるようになります。ハリー・ポッターのフレームや、私たちが考えられるあらゆるもののように。複数の画像を同時に検出でき、それぞれのコンテンツが同じシーン内で結合されているため、非常に興味深いものであることは間違いありません。そして、それがカメラに再侵入し、その物体が付着したときに再検出されるとのこと。 ARKit 2 は、機械学習アルゴリズムを使用して画像を再構築し、指を置いて画像の一部を覆ったり、画像の一部が面から外れたりした場合でも、画像の検出を続けます。
しかし、2D 画像を検出できるのは ARKit 2 だけではありません。また、3D オブジェクトを検出し、それを参照点として使用して体験を記録することもできます。 Appleが後に開発者に提供するソフトウェアを介して、フィギュアや基調講演で使用されたレゴハウスなど、あらゆる種類の実際のオブジェクトを3Dスキャンできるようになります。このスキャンは何をするのでしょうか?また、シーン認識を使用し、サーフェス上に関数ポイントを配置して、後で再検出できるようにします。
このようにして、HomePod をさまざまな機能を組み合わせてスキャンし、その表面の画像としてポイントをキャプチャして、デジタル的に 3D 表現を取得すると想像してください。そして、HomePod から花が植木鉢のように出てくると想像してください。システムが HomePod の形状を検出するたびに、空間内のその位置が返され、記録されたシーンを再生し、検出された HomePod に基づいて同じ相対的な場所に花を配置できます。私たちは希望した花を置きました。HomePod がどこにあるかは関係ありません。アプリがそれを認識するとすぐに花を置きます。これは、マップがすでに取得されているサイトを偵察する以外に、セッションを維持するもう 1 つの方法です。
だからこそ、レゴの家があり、それが 3D でスキャンされた場合、再検出されたときにはすでにマップが作成されており、その中に無限の 3D 要素を完全な精度で配置できるのです。おもちゃ自体 (車、家など) が拡張現実体験の開始点になる可能性を備えたおもちゃアプリについて考えてみましょう。それはレゴ車を検出し、キャラクターが対話するワークショップとその周りの生活を作成しました。間違いなく、非常に興味深い能力です。
現実世界の反映
ARKit 2 のもう 1 つの機能は、現実世界の 3D オブジェクトの屈折を使用できることです。拡張現実に配置された反射する 3D オブジェクトについて考えてみましょう。ゲームでは、それに近いものはすべて反映されると思います(ただしゲーム内で)。 ARKit 2 では、映っているものを現実世界にすることができると言ったらどうなるでしょうか?まあそういうことです。 ARKit 2 は、機械学習を通じて、反射面の反射フィールド内にある表面をキャプチャし、反射効果を作成して、よりリアルなものにします。私たちが見る仮想オブジェクトの環境のビジョンが増えるほど、それ自体が向上する効果。
このように、前回のWWDC 2018でARKit 2の新機能を伝えるセッションのデモンストレーションでも見られたように、仮想の金属製フルーツボウルをテーブルの上に置き、その横に本物のバナナを置くと、本物のようにフルーツボウルに反映されました。ご想像のとおり、本物のバナナを動かすと、反射がリアルタイムで変化します。
ARKit 2、新たなステップ
Apple が明確な目的を持った拡張現実エクスペリエンスを開発する方法を学ぶために開発者をトレーニングしていることは明らかです。どれの? Hololens や Magic Leap (まだ商用製品を販売していない) などの最も直接的な競合他社に対して競争上の優位性を獲得したり、Google の ARCore テクノロジーと比較して違いを明確にしたりするだけではありません。ティム・クック自身も奇妙なインタビューの中で間接的に言及した将来の拡張現実レンズに向けて開発者を訓練し、それは私たちがテクノロジーと対話する方法における新たな一歩となるでしょう。
ちなみに、もう少し詳しく説明すると、ARKit はハイポリまたはハイポリゴンと呼ばれるテクノロジーです。システムが拡張現実なしで生成できるグラフィックスも、拡張現実用に生成できます。 Microsoft Hololens や将来の Magic Leaps のように、高品質です。しかし、Google の ARCore はそうではありません。グラフィックス エンジンの制限とハードウェアを直接操作できないため、一部のミッドレンジまたはハイエンドのデバイスに非常に限られているだけでなく、その品質はローポリゴンまたはローポリゴンです。低品質のグラフィック ライブラリを使用する必要があるため、その能力が同じではないため、視覚的な品質が低くなります。
したがって、拡張現実について話すとき、Apple でのグラフィック品質が Google よりも飛躍的に高くなるゲームやエクスペリエンスが登場することになります。そして、これは意見ではなく、あらゆるデバイス上で実行できなければならない Android のようなオペレーティング システムの制限による技術的な事実であると私は主張します。
ARCore (Google) のクロスエクスペリエンスは iOS で ARKit を使用するため、Apple でのエクスペリエンスのグラフィック品質が Android でのエクスペリエンスよりも視覚的にはるかに優れている可能性があります。
もう 1 つの興味深い点は、ARCore が iOS にも存在することはご存知でしょう。これは、Google が前回の Google I/O で ARCore を発表した方法だからです。 Android の拡張現実での共有エクスペリエンス (クラウドに依存し、必須のインターネット接続が必要です) は iOS でも機能します。方法を知っていますか? ARKitを使用する。 Google は、ARKit を使用し、Firebase (これらのエクスペリエンスを同期するために使用するクラウド サービス) を統合してエクスペリエンスのための互換性レイヤーを作成したため、(開発者がそうする場合には) 同じエクスペリエンスが iOS と Android システム間で交差する場合さえあるかもしれません。 Google よりも Apple の方がグラフィック品質が優れています。興味深いですね。
拡張現実に関するこのレビューを気に入っていただき、拡張現実がどのように機能するかをもう少しよく理解していただけたことを願っています。非常に簡単なレビューを行いました。このトピックについてさらに詳しく知りたい場合は、このテクノロジについて何度か話したApple コーディング ポッドキャストを必ず聞いてください。