Unityでeasyar megaを使用したオクルージョンの実現
オクルージョン(occlusion)はARの没入感を高めるための重要な技術です。本稿ではUnityでeasyar megaを使用してオクルージョンを実現する方法を説明します。
開始前に
- easyar mega unityサンプルクイックスタートを完了していること。
- 実世界と位置合わせされたコンテンツの作成が可能であること。
オクルージョンの実装方法
オフラインモデリング:Block座標系で現実世界の構造物(壁、柱、大型設備など)に完全一致するジオメトリを作成する。またはBlock高密度モデルをトリミング・ポリゴン削減して最適化したモデルを使用する。
ランタイム位置合わせ:クラウドローカライゼーションによりBlock座標系と現実空間を位置合わせし、対応するジオメトリをロードする。
マテリアル適用:これらのジオメトリに特殊なオクルージョンマテリアルを割り当てる。
視覚効果:GPUが他の仮想オブジェクトをレンダリングする際、深度テストに失敗したピクセルは自動的に除外され、仮想オブジェクトが現実物理空間のオクルージョンロジックに従うようになる。
ジオメトリをオクルージョンとして使用する方法
以下の手順でシーンにオクルージョン用ジオメトリを追加し効果を検証できます。
オクルージョンジオメトリの配置
mega blockの高密度モデルを基に、組み込みジオメトリまたは自作ジオメトリをBlock座標系の正しい位置に配置します。

[オプション]パノラマ画像に基づく位置微調整

オクルージョンマテリアルの適用
ジオメトリのマテリアルをオクルージョン用に変更します。Unity標準のSpatialMappingOcculusionが使用可能です。

eifデータでのシミュレーションまたは実機実行
実行結果に基づきオクルージョンモデルの配置を微調整できます。
トリミング・ポリゴン削減した高密度モデルをオクルージョンとして使用する方法
以下の手順でエクスポートしたmega block高密度モデルをトリミング・ポリゴン削減し、オクルージョン用白モデルとしてシーンにインポートします。
mega blocksでのエクスポート
inspectorパネルのmega blocksツールでエクスポートを選択

エクスポートオプションの変更
エクスポート時にオプションを変更します。

図中1はLODレベル。レベルが低いほどモデルは簡素化されポリゴン数が減少します。最高精度が必要な場合は2、精度低下を許容してポリゴン数を減らす場合は1または0を選択します。
図中2はテクスチャエクスポートオプション。オクルージョン用白モデルにはテクスチャが不要です。
モデルのトリミングとポリゴン削減
エクスポートしたモデルをblenderなどのデジタルコンテンツ作成ソフトでトリミング・ポリゴン削減し、glb形式で保存します。
ヒント
例ではblenderのdecimate modifierを使用しています。

トリミング・ポリゴン削減後:

オクルージョンモデルのunityへのインポートとblockノードへの配置

transformの変更
モデルのtransformを変更し、position、rotationをすべて0に設定します。
オクルージョン用白モデルは高密度モデルと一致するはずです。これはデジタルコンテンツ作成ソフトでの操作がblock座標系定義を変更していないためです。

オクルージョンマテリアルの適用
モデルマテリアルをオクルージョン用に変更します。Unity標準のSpatialMappingOcculusionが使用可能です。

eifデータでのシミュレーションまたは実機実行
eifデータを使用したシミュレーションまたは実機実行で効果を確認します。
オクルージョンの効果予測
オクルージョンの効果は以下に影響されます:
- ローカライゼーション自体の精度
- モデル配置の正確さ
- モデル自体の精度(単純なジオメトリでない場合)
ローカライゼーションのドリフト時に数センチのずれが発生するのは正常です。
オクルージョン用モデルのポリゴン数が多いとパフォーマンスに影響するため、必要な領域のみで使用し、可能な限り単純なジオメトリを使用することを推奨します。