UnityでEasyAR Megaを使用してオクルージョンを実現する
オクルージョン(Occlusion)は、ARの仮想と現実の融合における没入感を向上させる重要な技術です。この記事では、UnityでEasyAR Megaを使用してオクルージョン効果を実現する方法を紹介します。
開始する前に
- EasyAR Mega Unityサンプルを使用したクイックスタートを完了してください。
- 実景とアライメントされたコンテンツを作成することができるようになってください。
オクルージョンの実現方法
オフラインモデリング:Block座標系で、現実世界の実体(壁、柱、大型設備など)に1:1で一致するジオメトリを作成するか、Blockの稠密モデルをクリッピングして面数を削減し、最適化されたモデルを取得します。
ランタイムアライメント:ランタイムで、クラウドローカライゼーションによってBlock座標系を現実空間にアライメントし、対応するジオメトリをロードします。
マテリアル置換:これらのジオメトリに特殊なオクルージョンマテリアルを割り当てます。
視覚効果:GPUが他の仮想物体をレンダリングするとき、深度テストに合格しないため、自動的に遮蔽された部分のピクセルが削除され、仮想物体が現実の物理空間の遮蔽ロジックに従います。
ジオメトリをオクルージョンとして使用する
以下の手順に従って、シーンにオクルージョンとして使用するジオメトリを追加し、効果を検証することができます。
オクルージョンジオメトリを配置する
Mega Blockの稠密モデルに基づいて、組み込みジオメトリまたは自作ジオメトリをオクルージョンとしてBlock座標系の正しい位置に配置します。

[オプション]パノラマ画像に基づいてジオメトリの位置を微調整する

ジオメトリにオクルージョンマテリアルを割り当てる
ジオメトリのマテリアルをオクルージョンマテリアルに変更します。Unityに付属の SpatialMappingOcculusion を使用することができます。

EIFデータを使用してシミュレーション実行または実機で実行する
実行結果に基づいて、オクルージョンモデルの配置を微調整することができます。
クリッピングと面削減した稠密モデルをオクルージョンとして使用する
以下の手順に従って、エクスポートしたMega Blockの稠密モデルをクリッピングして面数を削減し、オクルージョン用の白モデルを作成し、シーンにインポートしてオクルージョンとして使用します。
Mega Blocks でエクスポートする
Mesh の右側にある Export ボタンをクリックして、稠密モデルをエクスポートします。

エクスポートオプションを変更する
エクスポート時に、エクスポートオプションを変更することに注意してください。
図中の1はLODレベルで、レベルが低いほどモデルが単純で面数が少なくなります。最高の精度が必要な場合は、最高レベルを選択してください。
図中の2はエクスポートするテクスチャのオプションです。ここではオクルージョン用の白モデルが必要なだけなので、テクスチャは不要です。
モデルをクリッピングして面数を削減する
エクスポートしたモデルをデジタルコンテンツ作成ソフトウェア(例:Blender)でクリッピングし、面数を削減して、Glb 形式で保存します。
ヒント
例では、BlenderのDecimate Modifierを使用しています。

クリッピングと面削減後:

オクルージョンモデルをUnityにインポートし、シーンのBlockノードの下にアタッチする

モデルのTransformを変更する
モデルの Transform を変更して、Position と Rotation をすべて 0 にします。
このとき、オクルージョン用の白モデルは稠密モデルに一致するはずです。これは、デジタルコンテンツ作成ソフトウェアでクリッピングと面削減を行っても、Block座標系の定義が変わらないためです。

モデルにオクルージョンマテリアルを割り当てる
モデルのマテリアルをオクルージョンマテリアルに変更します。Unityに付属の SpatialMappingOcculusion を使用することができます。

EIFデータを使用してシミュレーション実行または実機で実行する
EIFデータを使用してシミュレーション実行または実機で実行し、効果を確認します。
オクルージョンの効果予想
オクルージョンの効果は、主に以下の要素に影響されます。
- ローカライゼーショントラッキング自体の精度
- モデルの配置の正確さ
- モデル自体の精度(単純なジオメトリでない場合)
ローカライゼーションのドリフト時に数センチの未アライメントが発生することは正常です。
オクルージョン用のモデルの面数が多すぎるとパフォーマンスに影響を与えやすいため、必要な領域でのみ使用し、できるだけ単純なジオメトリをオクルージョンとして使用することをお勧めします。


