Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ARKit+Vuforia+UNETでマルチプレイAR

 ARKit+Vuforia+UNETでマルチプレイAR

FUKUOKA Engineers Day 2018の発表資料です

Keizo Nagamine

February 10, 2018
Tweet

More Decks by Keizo Nagamine

Other Decks in Programming

Transcript

  1. ARKit+Vuforia+UNET
    でマルチプレイAR

    View Slide

  2. 株式会社Jollystics所属
    だいたいUnity ときどきXamarin(≒C#er)
    アプリ、インタラクティブ、XR
    今年から「ゆにくえ福岡」という
    初心者向けのUnity相談会を毎週やってます
    最近やってるゲーム
    ディヴィニティ:オリジナル・シン エンハンスド・エディション
    自己紹介
    長峰慶三 @KzoNag

    View Slide

  3. はじめに
    ▪ Unityで作ってます
    ▪ デモしたい!!

    View Slide

  4. マルチプレイAR
    って何ですか?

    View Slide

  5. AR
    Augumented Reality
    拡張現実

    View Slide

  6. Augmeted Reality, 拡張現実
    現実環境をコンピュータで認識し、
    情報を付与するなどして拡張する技術
    現実環境の認識手法として、
    ・マーカー認識
    ・カメラ・センサーによる
     自己位置推定・環境測定
    ・GPSからの位置情報
    などがある

    View Slide

  7. マルチプレイ
    複数人で遊ぶやつ

    View Slide

  8. マルチプレイ
    コンピューターゲームにおいて、複数人
    のプレイヤーが一緒にプレイすること
    以下のようなパターンがある
    ・インターネット経由で別端末と通信
    ・オフラインで別端末と通信
    ・1端末で画面分割

    View Slide

  9. マルチプレイAR
    複数人が一緒に体験できるAR

    View Slide

  10. マルチプレイAR
    複数人が一緒に体験できるAR
    どのプレイヤーから見ても同じ時間
    ・場所に同じ情報が付加される
    お互いの位置情報を共有している
    プレイヤーによるインタラクションが
    他プレイヤーに反映される
    (例:イスを回転する)
    ※HoloLensのシェアリングの機能はコレ

    View Slide

  11. Place your screenshot here
    Share World Demo
    壁の文字からワールドにログイン
    ログインすると空間に存在するオブ
    ジェクトを視認可能に
    複数のプレイヤーが同じワールドに
    ログイン
    プレイヤーはオブジェクトを発射す
    ることができる
    発射されたオブジェクトはワールド
    上に存在するため他プレイヤーも視
    認可能

    View Slide

  12. Vuforia
    ARKit UNET
    3つの要素

    View Slide

  13. Vuforia
    ARKit UNET
    3つの要素

    View Slide

  14. iOS11で導入されたフレームワーク
    主にできること↓
    ▪ 自己位置推定
    ▪ 平面検出(水平,垂直)※垂直面はiOS11.3から
    ▪ 照明光推定
    ▪ 前面カメラでの顔・表情の認識 ※iPhoneXのみ
    Unityで使うプラグインが公開されている
    ARKit

    View Slide

  15. ARKitによる自己位置推定
    (Visual Inertial Odometry、VIO、視覚慣性オドメトリ)
    カメラとジャイロや加速度などのセンサーを組み
    合わせて、デバイスの移動・回転をトラッキング
    分かるのは開始地点からの相対位置
    現実環境における絶対位置が分かるわけではない

    View Slide

  16. ARKitによる自己位置推定
    (Visual Inertial Odometry、VIO、視覚慣性オドメトリ)
    トラッキング開始
    開始地点からの位置・姿勢
    Pos(1,2,3)
    Rot(30, 10, 20)
    移動

    View Slide

  17. Vuforia
    ARKit UNET
    3つの要素

    View Slide

  18. Vuforia
    AR開発プラットフォーム
    iOS,Android,UWP(HoloLens)
    カメラ画像ベースのトラッキング
    様々な認識ターゲット
    ▪ 平面画像
    ▪ 直方体や円柱といった立体
    ▪ CADなどの3Dデータ
    Unity2017.2からVuforiaが統合された
    Vuforia7からは平面検出もできるように

    View Slide

  19. 画像を検出すると画像との相対位置が分かる
    Vuforiaでの画像ターゲットによるトラッキング
    画像からの位置・姿勢
    Pos(1,2,3)
    Rot(30, 10, 20)

    View Slide

  20. Vuforia
    ARKit UNET
    3つの要素

    View Slide

  21. UNET
    Unityに用意されたネットワークシステム
    高レベルAPIと低レベルAPIがある
    高レベルAPIはマルチプレイに必要とされる
    ほとんどの共通要件をカバーする(らしい)

    View Slide

  22. UNETの高レベルAPIの特徴(あんまり分かってない)
    ▪ サーバー処理もUnityで実装
    ▪ サーバー/クライアント方式
    ▪ サーバー兼クライアントのホストにもなれる
    ▪ 汎用データシリアライズ
    ▪ ネットワークメッセージ送受信
    ▪ クライアントからサーバーにコマンド送信
    ▪ サーバーからクライアントにRPC
    ▪ サーバーからクライアントにイベント送信

    View Slide

  23. サーバーとクライアントがいる
    サーバー
    クライアントA クライアントB クライアントC

    View Slide

  24. サーバーを介して変数を同期する
    val = 5
    val = 5 val = 5 val = 5

    View Slide

  25. クライアントからサーバーに関数を実行させる(コマンド)
    SetPos(5)を
    実行して

    View Slide

  26. サーバーからクライアントに関数を実行させる(RPC)
    ShowResult()
    を実行して

    View Slide

  27. クライアントの1つがサーバーを兼ねることも可能
    クライアントA
    クライアントB クライアントC
    サーバー
    ホスト

    View Slide

  28. やってること

    View Slide

  29. View Slide

  30. 各クライアントと専用のサーバーマシンを用意
    (今回は同一LAN内で)
    クライアント クライアント
    サーバー

    View Slide

  31. それぞれの位置・姿勢情報を
    クライアント間で同期
    Pos(-1,2,3)
    Rot(30,10,5)
    Pos(2,1,5)
    Rot(20,15,0)
    ARKit
    +
    Vuforia

    View Slide

  32. クライアントからサーバーにアクションを通知
    画面をタップしたよ

    View Slide

  33. サーバーからクライアントに
    オブジェクト生成を通知
    オブジェクト生成 オブジェクト生成

    View Slide

  34. オブジェクトの状態はサーバーが管理して
    各クライアントと同期
    Pos(-1,2,3)
    Rot(30,10,5)
    Pos(-1,2,3)
    Rot(30,10,5)

    View Slide

  35. 位置・姿勢の同期

    View Slide

  36. ARKitの自己位置推定を使いたいけど・・・
    Pos(-5,6,1)
    Rot(60,5,10)
    Pos(1,4,6)
    Rot(0,15,30)
    クライアントB
    クライアントA

    View Slide

  37. 固有の座標系での値なので
    Pos(-5,6,1)
    Rot(60,5,10)
    Pos(1,4,6)
    Rot(0,15,30)
    座標系A
    座標系B
    クライアントB
    クライアントA
    <座標系A> <座標系B>
    この値をそのまま
    Aに送ると、、、

    View Slide

  38. 位置が合わない
    座標系A
    クライアントB
    クライアントA
    Pos(1,4,6)
    Rot(0,15,30)
    クライアントB?
    <座標系A>

    View Slide

  39. Vuforiaの画像ターゲットを配置
    座標系A
    座標系B

    View Slide

  40. 認識するとターゲットとの位置関係が分かる
    = ターゲットを基準とした共通の座標系
    座標系A 座標系B
    Pos(-1,2,3)
    Rot(30,10,5)
    Pos(2,1,5)
    Rot(20,15,0)
    <座標系V> <座標系V>
    座標系V

    View Slide

  41. 各座標系でのターゲット位置を逆算できる
    = 座標変換が可能
    座標系A 座標系B
    Pos(-4,4,-2)
    Rot(30,-5,5)
    <座標系A>
    Pos(-1,3,1)
    Rot(-20,0,30)
    <座標系B>
    Pos(-1,2,3)
    Rot(30,10,5)
    Pos(2,1,5)
    Rot(20,15,0)
    <座標系V> <座標系V>
    座標系V
    この値をAに送る

    View Slide

  42. 位置が合った!
    座標系A
    Pos(-4,4,-2)
    Rot(30,-5,5)
    <座標系A>
    Pos(2,1,5)
    Rot(20,15,0)
    <座標系V>
    座標系V <座標系A>
    Pos(-2,5,3)
    Rot(50,10,5)

    View Slide

  43. 位置・姿勢の同期
    ▪ 画像ターゲットで共通の座標系を用意
    ▪ ARKitで自己位置を取得
    ▪ 共通の座標系に変換
    ▪ UNETで送信
    ▪ 受け取った座標を固有の座標系に変換
    ▪ 実際はプレイヤーオブジェクトを
    画像ターゲットの子にすることで簡素化

    View Slide

  44. 困ったところ
    ❖ ARKitとVuforiaを同時に有効にできない
    ➢ はじめにVuforiaで認識、認識したらVuforiaを
    切ってARKitをオンにすることで対処
    ➢ 切り替え時にカメラ画像がチラつくので演出で目立
    たないように

    View Slide

  45. DEMO

    View Slide

  46. まとめ
    ▪ ARKitで自分の位置をトラッキング
    ▪ Vuforiaで座標系を合わせる
    ▪ UNETで情報を同期する
    でマルチプレイARができました!

    View Slide

  47. 次のステップ
    ▪ 精度の向上・内容を充実
    ▫ ちょっとズレるのをなんとかしたい
    ▫ 撃ち合いとかゲームっぽくしたい
    ▪ マルチプラットフォーム
    ▫ AndroidやHoloLensも入れるはず
    ▫ なんならポジショントラッキングできなくても
    Vuforiaの画像が見えてれば入れるのでは
    ▪ いろんな情報を共有
    ▫ HoloLensの環境マップとか
    ▫ 各種センサーを置いてサーバー側から送るとか

    View Slide

  48. ありがとうございました!
    休憩時間に体験できます!

    View Slide

  49. CREDITS
    Special thanks to all the people who made and released
    these awesome resources for free:
    ▪ Presentation template by SlidesCarnival
    ▪ Photographs by Unsplash

    View Slide