Holo2について公式ドキュメントを読んで勉強するシリーズ第2弾
今回はデバイスと環境
前回のデザインはめちゃくちゃ勉強になった。
長くなりすぎたのであとで記事分ける。
- 空間マッピング
- 物理空間とマップ情報
- HoloLens の環境に関する考慮事項
- QR Code Tracking
- 複数デバイスでの空間共有について
- 空間アンカー
- 目の調整
- 音声入力
- トラブルシューティング
空間マッピング
概要
実世界のオブジェクトに基づいて、ホログラムを隠す(オクルージョンを利かす)とリアル。
3Dofみたいに自分についてきたり、オクルージョンが効いてない状態で空中に浮いていてもリアルじゃない。
Spatial Surface ObservertとSpatial Surfaceの2つでできている?
空間情報は通りの二つ取得方法がある。
・Spatial Mapping API
キャッシュしている限られた範囲。自動更新
・Scene understanding SDK
無制限の範囲。自分で更新
配置
・方向ではなく距離を使う。
例えばユーザーからレイを飛ばして何かを選択するとき、一番近いものを選択するなど?
・レイを飛ばすときは複数飛ばしたほうがいい。一つだと自動生成されたメッシュの小さい穴を通過してしまうことがある。
・椅子の脚のような細く突き出しているポリゴンがあるものを置くとき、足一本一本の幅にコライダーを付けるのではなく、もっと広い範囲でコライダーを付けないとガタガタな配置になってしまう。
・アプリ側でホログラムを空間に自動配置したとき、ユーザーの手に届かないところに配置されたらイライラする。(たとえユーザーが修正できるとしても)
最初からユーザーが自分で配置するようにしたほうがいいかも。
・空間データを使用できるかは、ユーザーがちゃんと空間をスキャンしているかに依存する。アプリ側で、ユーザーに促す必要がある
・ホログラムが壁で止まるとき、そのフィードバックを表示することが大事。ホログラムを近づけたときに壁を赤くするなど。
オクルージョン
ユーザーが操作するホログラムが、壁の後ろに隠れてしまったとき、そこにあるということを見えるようにする必要がある。
(でもHolo2で写真撮った時のプレビューウィンドウは、壁の後ろに隠れたら一生見えないけど)
物理
きちんと物理的動作をするためには、メッシュにできた穴を埋めたり平らにするなどのメッシュ処理が必要。
アプリに応じてメッシュを再生するか考えたほうがいい。
ユーザーがドアを可動式バリケードとして使うときはメッシュを更新したほうがいいが、犬がフィールドに入ってきたときは、犬のメッシュは作られないほうがいい。
ナビゲーション
・キャラクターが案内してくれるとその場所になれていない人間なら助かる。
・机の上を歩かないようにするなどの技術的課題がある。
・unityのNavmeshはspatial mapping surfacesでは使えない。
・ユーザーから遠く離れた場所の空間情報は取得できないので、広大なマップを使いたいときはあらかじめスキャンして覚えておく必要がある。
スキャンできるのは3.1mの範囲
可視化
空間メッシュは非表示にしておいたほうが、ユーザーの視覚的混乱が最小限になる。
代わりにホログラムから床などに影を落とすといい。
Holo2はメッシュをいい感じにしてくれる
空間メッシュ
生成ギミックなどが書いてあった。長いので飛ばす。
パフォーマンスについて
・空間メッシュをレンダリングするとき、最低限の密度の三角形メッシュをリクエストする。
・遠くのメッシュの密度を下げる
・視界に入っていないメッシュを非表示にする
スキャン
・スキャンするときはフィードバックを与える。
・初心者には、自然な動きでスキャンできるようにデザインする。
・広い空間が必要な場合は、そのことを視覚的フィードバックで伝えて、その範囲にある邪魔なものを強調表示する。
・スキャンできていない場所も強調する。距離ベースのフォグが使えるらしい(意味が分からなかった)
・スナップショット:一時的なスキャン?
メッシュ加工
・穴埋め
窓などの実際の穴と、失敗でできた穴の区別は難しい
・空中の幻覚
反射、明るい光、動いている物体は、空中に浮遊する小さな「幻覚」を残す可能性がある。
・平滑化
凸凹な表面をどうにかする。
・実際にメッシュの頂点を平らにすると、現実から遠ざかることがあるので注意
・見た目だけ変えればいいなら、法線を滑らかにしたり、シェーダーやライティングやテクスチャなどで軽減できる。
(フォトグラメトリも、Unlitにしたら表面がきれいに見える)
・平面領域の検出
平面検出ができる。
実際に人が歩く可能性のある床の領域を特定することでバーチャルキャラが現実世界を内ゲートするのを助けることができる。
ツール
Hololensエミュレーター
空間メッシュ使ってシミュレーションできる
DevicePortal
DevicePortalの3Dビューで生成されたメッシュが見れる。
これによりHoloでメッシュ表示していないアプリでも、確認できる。
DevicePortalのつなぎ方は下の記事に書いた。
Hololens2での写真撮影とPCへの映像共有 - トマシープが学ぶ
公式はここ
現実でのテスト
・いつもの環境だけでなく、位置、形状、サイズ、材質が異なるさまざまな表面でテストせよ
・記録データは役に立つけど、少数のテストデータに依存しすぎないで。いろいろなデータで試そう
・Holoに慣れてない人でテストする。「人々の行動、知識、仮定がどれほど分岐しているのか驚くかもしれません!」
トラブルシューティング
・サーフェスメッシュを正しく配置するには、各GameObjectをアクティブにしてから、SurfaceObserverに送信してメッシュを構築する必要があります。
そうしないと、メッシュが空間に表示されますが、奇妙な角度で回転します。
・SurfaceObserverと通信するスクリプトを実行するGameObjectは、原点に設定する必要があります。
それ以外の場合、メッシュを作成するために作成してSurfaceObserverに送信するすべてのGameObjectは、親ゲームオブジェクトのオフセットと等しいオフセットを持ちます。これにより、メッシュが数メートル離れて表示される可能性があり、何が起こっているのかをデバッグするのが非常に難しくなります。
物理空間とマップ情報
良い物理空間
⭕ 十分なライトと十分なスペースがあるルームがいい。
❌ 暗い、光沢、半透明のサーフェス (たとえば、ミラーやレースカーテン) が多い暗いスペースはダメ
Hololensは室内用に最適化されている
良いマッピング動作
領域内でゆっくりと移動して、1.5m~2.4mごとに停止して、周囲の周りを見ていきます
領域を 2 ~ 3 回試してみてください。
HoloLens が完全にマップされ、目的に合わせて調整されるまでに、15 ~ 20 分かかることがあります。 HoloLens を頻繁に使用することを計画しているスペースがある場合は、この時間を空けてスペースをマップすることで、後で問題が発生するのを防ぐことができます。
Wifiデータと紐づいてるよ
マップデータとWi-Fiのデータは紐づいている。ユーザーはアクセスできない。
wi-fiのが有効になってたら、その情報からマップを検索する。
無効になってるときは、空間データベース内のマップデータから検索するので時間がかかる。
HoloLens の環境に関する考慮事項
ユーザーの位置追跡を行うのにいい環境、悪い環境
照明
ユーザーの位置追跡には可視光を使っている。
・⭕ 明るすぎず暗すぎず、均一で明るい環境
・❌ 暗い領域に明るい光の点があるはダメ
・屋外も安定しない。太陽が変化するから。
・500 ~ 1000 ルクスから始めてみよう!
・照明が50Hzの地域はフレームを取得したときに暗くなる可能性がある。(Holoのカメラは30fpsで変化を感知しているから)アメリカは60Hzなので大丈夫。
日本は西と東で別れてる。
引用:教えて!周波数
空間内の特徴点
⭕ ポスター、壁に貼られたシンボル、植物、固有の物体、乱雑なデスクは目印になる
❌ 壁上で同じポスターが複数回繰り返されると混乱する
⭕ マスキング テープの線を使用して、空間の壁と床に沿って固有の繰り返されないパターンを作成する
特徴点もっと欲しい感じ。Oculus Questがトラッキング失う事が結構多かった。
— GOROman (@GOROman) 2019年7月11日
一番右はOculus Connectの時の様子。#MAZARIA pic.twitter.com/r3No0PZWts
❌ ワームホールも混乱する!(同じように見える領域のこと)
似たようなオフィスとか。特徴点付けよう!
❌ 環境が常に変化しているとき。人が行き来するときなど。基本的にはHoloは対応できるけど、たまにしか見ない場所だとダメ。
❌ 近すぎるもの。カメラは、物体から 15cm 以上離さないと感知できません。
❌ 光沢物質
❌ Wi-Fi信号が大幅に変化すると別の空間にいるとみなす。
QR Code Tracking
別記事にまとめた
複数デバイスでの空間共有について
別記事にまとめた
空間アンカー
多分下のxyz軸の棒のことだと思う
VR
VRだと直径5メートル以内のルームスケールの時は空間アンカーの代わりに「Stage frame of reference」を使える。でももっと広いときは空間アンカーが必要。
移動するホログラム
歩き回るキャラクターや壁を沿って移動するUIをレンダリングするときは、ローカルな空間アンカーをスキップして、静止した参照フレームによって提供される座標系で直接ホログラムをレンダリングするのが最適
Unity では、WorldAnchor を使用せずにワールド座標系に直接ホログラムを配置する
静止した参照フレーム(the stationary frame of reference)とは??
静止した参照フレームによって提供される座標系は、ユーザの頭の位置の変化を尊重しながら、ユーザの近くにある物体の位置を世界に対して可能な限り安定したものに保つように機能する。
って書いてある。頭の位置を基準に自分の場所を把握するの??????
ユーザーが配置する場所にアンカーを作る
視線と空間まっぽんくのメッシュを交差させて、ホログラムを配置する。そこにアンカーを作る。
基本的にユーザーが配置するホログラムごとにアンカーを作る
アンカーから3m以内
アンカーに近いほど安定する
アンカーから3m以上離れたホログラムをレンダリングすると位置誤差が発生する。
不要になったローカル空間アンカーをReleaseする
ローカル空間アンカーがアクティブな間は、システムはそのアンカーの近くにあるセンサーデータを優先的に保持します。空間アンカーを使用しなくなった場合は、その空間アンカーの座標系へのアクセスを停止する。これにより、必要に応じて、その下にあるセンサデータを削除することができます。
将来のセッションで再び見つける必要のあるローカルアンカーだけを永続化し、ユーザーにとって意味のないものになったらストアから削除します
目の調整
Holo2ではキャリブレーションしてね。手動で開始できるよ。
新しいユーザーがかぶったら自動でキャリブレーション始まるよ。(この設定はオフにできる)
キャリブレーショントラブルシューティング
- デバイスバイザーの掃除
- メガネの掃除
- デバイスバイザーをできるだけ目の近くに押し込む
- バイザー内のオブジェクト(髪の毛など)を邪魔にならないように移動する
- 部屋の照明をオンにするか、直射日光を避けてください
Holo1
IPDでホログラム表示を調整する。
Holo2は「目の位置はシステムによって計算されるため、IPDの設定はHololens 2には適用されません」
音声入力
デザイン記事のほうでも一応見たのでほぼ割愛
通話音声、スピーチエンジン、環境音の録音の3つは、ハードウェアで高速化されているため、同じ処理をHoloLensのCPU上で行う場合に比べて、消費電力が大幅に少なくなる。
なのでCPUで行わず、内蔵された、オフロードされたオーディオ入力処理を活用してください。
トラブルシューティング
HoloLens がフリーズまたは応答しなくなった
→5本の Led がすべてオフになるまで、または Led が反応しない場合は10秒間、電源ボタンを押して、HoloLens をオフにします。
ホログラムが不安定
- HoloLens の前面にあるデバイスのバイザーとセンサーバーをクリーニング
- 室内を明るくする
- HoloLens でより完全にスキャンされるように、お客様の環境を調査して見ていきましょう。
- お客様のニーズに応じた HoloLens の調整。 [設定 > システム > ユーティリティ] に移動します。 [調整] で、[調整を開く] を選択
ホログラムを配置できない、以前に配置したホログラムが表示されない
・明るく
・Wi-fiに接続してるか?
・適切な領域がアクティブであるか、または手動でスペースを読み込むかを確認するには、[設定 > システム > スペース] に移動します。
・適切な領域が読み込まれても問題が解決しない場合は、領域が破損している可能性があります。 この問題を解決するには、領域を選択し、[削除] を選択します。 この領域を削除すると、HoloLens で環境のマッピングが開始され、新しいスペースが作成されます。
([設定 > システム > スペース]ってどこのことだ?設定 > システム > ホログラムはあるけどスペースなんてない・・・)