LiDARとは、対象物までの距離を測定できるセンサーのことで、レーザー光を照射し、物体に当たって跳ね返ってくるまでの時間を計測し、物体までの距離や方向を測定できます。なんと、iPhone12 Pro / ProMaxに、LiDARセンサーが搭載されました。
これにより、AR表現の幅がグッと広がったので、その実装方法を含めご紹介します。
LiDARにより可能になったAR Foundationの機能「Meshing」とは?
LiDARが搭載されたことにより、UnityにおけるAR実装プラットフォームのAR Foundationに「Meshing」という機能が追加されました。
これは、LiDARセンサーで測定した距離を元に、周りの環境をリアルタイムにメッシュ化するものです。言葉で説明してもわからないと思うので、AR FoundationのMeshingのサンプルシーンを実行してみましょう。
AR Foundationの「Meshing」サンプルシーン
GithubからAR Foundation SampleのUnityプロジェクトをダウンロードし開くと、Meshingというシーンがあります。
これを開き、ビルド、LiDARが搭載されているAppleデバイスで実行してみましょう。すると、画面をタップすると赤いボールが発射されるシーンが実行されます。よく見ると、地面や壁だけでなく細かいくぼみにも球が溜まっているのが分かります。これは従来の平面認識ではなし得なかったことです。
「Meshing」機能の設定方法
Meshigの機能を使うための設定方法は非常に簡単です。
以下の画像のように、AR Session Originの子要素として、空のオブジェクトを用意します。参考画像ではMeshingというオブジェクトがそれに当たります。そのオブジェクトに、AR Mesh Managerのコンポーネントをアタッチします。
InspectorのAR Mesh ManagerにあるMesh Prefabが、LiDARによりスキャンされた空間がメッシュ化される時の受け皿になるプレファブです。このプレファブは、必ず、Mesh Filterのコンポーネントを持っていることが必要になります。なので、この条件を満たすプレファブを作成してやり、ここにアタッチします。ここでは、Mesh Componentというプレファブを作ってアタッチしています。以下参考画像です。
例えば、このプレファブにデフォルトのマテリアルを与えてやると、スキャンした場所に白色のメッシュがかぶって表示されます。
なので、このメッシュにSurfaceタイプがTransparentのマテリアルを与えてやると、周りの環境にオーバーレイするような表現が可能になるわけです。
AR FoundationでLiDARを使用したMeshing機能の演出一例
ここでは、簡単な演出例を一つ紹介しましょう。相性がいいのは、ワールドポジションを利用したスキャンラインの演出などでしょう。綺麗に周りの空間がスキャンされてメッシュ化しているのが分かります。
ここでは、解説を割愛しますが、以下Shader Graphで作成した簡単なスキャンラインのグラフを載せておきます。
このマテリアルをMesh Prefabにアタッチして、シーンを実行した様子が以下の画像になります。
まだまだ色々な演出が可能だと思いますので、試してみてはいかがでしょうか?