Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@SAyanada9

ARKit3のCollaborative Sessionという機能

More than 1 year has passed since last update.

これはUnity Advent Calender 2019の21日目の記事です

ARKit3で追加された新しいARの共有のサンプルの解説です

https://github.com/Unity-Technologies/arfoundation-samples
のARCollaborationDataのサンプルを実行した動画がこちら

所感

割と早く位置合わせされてるしそこそこ実用的な気がする
一つ懸念があるとすればあまり特徴点がないところだと認識が遅くなりそうというところ
使える要件はiOS13以上のみなのでA12プロセッサが必要というわけではないです

Appleのドキュメント

Building Collaborative AR Experiences
Creating a Collaborative Session
collaborationEnabled
これによると最大4人が最適と書いてあります
ネットワーク的に最適なのかそれとも処理的に4人ぐらいが限界なのかはわからないです(ちなみにサンプルではBluetoothでP2P通信をしていた)

(大雑把な)仕組み

Collaborative SessionというARKit3で追加された機能でARCollaborationDataというデータを共有している

ARCollaborationDataとは

点群情報を保持し続けるオブジェクト
そのオブジェクトが他の人の点群情報をマージしたり出力したるする機能が付随している様なイメージ

少し詳しい仕組み

点群情報(便宜上点群情報というが、この情報の塊に正確には点群、自分の位置(点群等からの相対距離だと思われる)ReferencePoints(点群に紐つく位置、又の名をアンカー)が入っていると思われる)をp2p的に送信して、受信した時に自分が持ってる点群情報にマージ、重ね合わせをして複数端末の位置を共有するような感じ05AWqSTDJZk8GPL71bbV1576689551-1576689607.gif

ARWorldMapとの違い

ARWorldMapの方は

  • 空間ごと一度保存してからそれを送信(受信)する
  • アンカーに加えて平面の情報なども保存(共有)する
  • 単体の機能では端末の位置は共有しない(端末の位置はARWorldMapには保存されない)
  • 一度ある程度空間を認識してから送信する必要がある
  • あくまでStaticなものの共有(変わらない空間、場所)に向いている
  • 端末同士の座標形は一致する(複数端末上で現実空間の同じ場所に原点がある)

に対して

ARCollaborationDataの方は

  • 都度都度空間情報を送信する
  • 平面の情報などは共有せず、他端末の位置、アンカーのみ共有する
  • 単体の機能で端末の位置を共有することができる(p2p的に送受信するSDKは別に必要(Photon等))
  • 主に動的に変わるものだけを共有することに特化(自分の位置や、増える物)
  • 端末同士の座標形は一致しない(複数端末上で現実空間の同じ場所に原点がない)

端末の座標形の話

Collaborative Sessionの 端末同士の座標形は一致していない
理由は点群(複数端末で共通な位置情報)を共有しその点群からの相対座標にある端末の位置を共有しているので下の図のように現実世界上の位置は一致しているがUnityでの座標は一致していない状態になるため座標系は一致していないことになります
プレゼンテーション1.png

位置を共有したARのゲーム等を作るにあたって

複数端末の位置(相対位置)が共有されてても座標形が一致(原点が現実世界上の座標の同じところにあるということ)してないとUnity上の同じ座標に物を生成してもARで通して見ると違うところにあるといったように場所が狂ってしまいます

なので現実世界上での共通の場所をそれぞれの端末の原点とする(すべてのオブジェクトをその共通の座標からの相対座標に設定する)と座標系が一致します

ここでARCollaborationDataのアンカー(ReferencePoints)を共有するという機能を使います
アンカーは現実世界上の取得した特徴点の上に設定することができるのでそのアンカーを共有することによって複数端末上で現実世界上の同じ位置のUnity上の座標が取れる様になります
その後、その場所をUnityでの原点にするような処理を行えば複数端末の座標形が一致します

原点の合わせ方については以前書いたこの記事が参考になります https://qiita.com/SAyanada9/items/806f202ccfc1ba55619a

まとめ

ARkit2のARWorldMapよりは位置を共有するのは楽にはなった(それでも少々使い辛い)ので使ってみるのも良いかもしれませんね

6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
SAyanada9
xRエンジニアだけど最近疲れからかVR開発してるとめちゃくちゃ酔うからARばかりやってる系エンジニア ARKitとかUnityとかでお仕事をしている

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?