事の始まり
AR FoundationにAR Occlusion Managerってあるなぁ
でもAR CoreとAR Kitでオクルージョンの処理は別ものなのにどうやって共通化しているんだろ?
実機で見たときにどんな動作の違いが出るんだろうか??
検証しました!
環境
Unity 2019.4.29f1
AR Foundation 4.1.7
Device:
- Android
- SONY Xperia 1 III (Depth API対応機種)
- Huawei P20 Pro(Depth API非対応機種)
- iOS
- iPhone 13 Pro Max (LiDAR搭載機種)
- iPhone 11 (LiDAR非搭載機種)
やったこと
ARアプリを作成、AR Occlusion Managerを以下のように設定
Environment Depth Mode: Best
Human Segmentation Stencil Mode: Best
Human Segmentation Depth Mode: Best
シーン再生中に、AR Occlusion Managerの
currentEnvironmentDepthMode
currentHumanDepthMode
currentHumanStencilMode
↑の状態を表示する
結果
見やすくまとめるとこんな感じ
SONY Xperia 1 III (Depth API 対応機種) |
Huawei P20 Pro (Depth API 非対応機種) |
iPhone 13 Pro Max (LiDAR搭載機種) |
iPhone 11 (LiDAR非搭載機種) |
|
---|---|---|---|---|
Environment Depth Mode | ◯ | × | ◯ | × |
Human Segmentation Stencil Mode | × | × | ◯ | ◯ |
Human Segmentation Depth Mode | × | × | ◯ | ◯ |
◯:Best
×:Disabled
Human Segmentation はAR Kitの機能なのでAndroid(AR Core)で出来ないのは納得です
LiDARの有無によってEnvironment Depthができないんですねー
確かにAppleのサイトにこんな記述があります
Depth API
LiDARスキャナに内蔵された高度なシーン認識機能により、周囲の環境についての深度情報がピクセル単位で利用可能になります。
この深度情報を、シーンジオメトリによって生成された3Dメッシュデータと合成することで、バーチャルオブジェクトを瞬時に配置して、
周囲の物理的な環境とシームレスに溶け込ませることで、よりリアルなバーチャルオブジェクトオクルージョンを実現できます。
これにより、さらに精密な測定をしたり、ユーザーの環境にエフェクトを適用するといった、新しい機能をAppに搭載できるようになります。
まとめ
- Android (Depth API対応)
- 机、壁などのみオクルージョンできる
- Android (Depth API非対応)
- オクルージョンできない
- iPhone (LiDAR非搭載)
- 人間の全身、人体の一部のみオクルージョン出来る
- iPhone (LiDAR搭載)
- 机、壁などに加えて人間の全身、人体の一部もオクルージョンできる