Unity+ARKitで作る、
新しいAR体験
ユニティ・テクノロジーズ・ジャパン
岩井雅幸
#dotfes
自己紹介
岩井雅幸
ユニティ・テクノロジーズ・ジャパン
モバイル・アプリケーション・エンジニア
Unity Meetupの開発
Webデザイン・開発、Flashコンテンツ制作
、iOSアプリ、ゲーム制作など
著書に「uGUIではじめる Unity UIデザイン
の教科書」
https://assetstore.unity.com
http://unity-chan.com
Unity+ARKit
Showcase
https://www.youtube.com/watch?v=gjyongsJMWw
https://www.youtube.com/watch?v=-xxOvsyNseY
https://www.youtube.com/watch?v=ZBdRAdSosv4
http://arkit.r-u.co.jp
ARKitExamples
AR
Augmented Reality
https://x.company/glass/
https://www.microsoft.com/ja-jp/hololens
Google Glass
Microsoft HoloLens
https://www.youtube.com/watch?v=oxnKOQkWwF8
https://itunes.apple.com/jp/app/id648137866
https://itunes.apple.com/jp/app/id1279244498
ロケーションベース: セカイカメラ
マーカーベース: 教科書AR マーカーレス: IKEA Place
近年のARの動向
• スマートフォンによる精度の高いマーカーレスAR
• SDKの充実によって整った開発環境
• 急速に広がるモバイルAR市場
https://www.digi-capital.com/news/2017/01/after-mixed-year-mobile-ar-to-drive-108-billion-vrar-market-by-2021/#.WgpPwLbAPMU
https://www.digi-capital.com/news/2017/01/after-mixed-year-mobile-ar-to-drive-108-billion-vrar-market-by-2021/#.WgpPwLbAPMU
さまざまなARライブラリ
for スマートフォン
ARKit
• Apple
• iOS
• マーカーレスで平面を認識
https://developer.apple.com/arkit/
ARCore
• Google
• Android
• マーカーレスで平面を認識
https://developers.google.com/ar/
Tango
• Google
• Android
• カメラ+深度センサーで、物体の立
体構造を認識
https://developers.google.com/tango/
Vuforia
• 米PTC
• iOS、Android
• マーカーベース、次期バージョンで
マーカーレス平面認識をサポート
https://www.vuforia.com
https://www.kudan.eu/kudan-sdk-features/http://www.cybernet.co.jp/ar-vr/products/smartar/
https://artoolkit.org
ARKit
ARKit
• 「モバイルARプラットフォーム」
• Apple A9以降のプロセッサー
• iOS 11以降
https://developer.apple.com/arkit/
ARKit対応デバイス
• iPhone 6s以降(SE含む)
• iPad第5世代(2017)以降
• すべてのiPad Pro
https://data.apteligent.com/ios/devices/
iPhone 6s
14.9%
iPhone 7
13.4%
iPhone 7
Plus
7.4%
iPhone 6s
Plus
4.5%
iPhone SE
4.3%0%
その他
51.8%
iOS 11の普及状況
• iOS 11は現在52%
• 通例、新バージョンリリース後1年で
約9割のユーザーがアップデート
https://developer.apple.com/support/app-store/
Inside ARKit
https://developer.apple.com/videos/play/wwdc2017/602/
3つのレイヤー
• トラッキング
• シーンの把握(Scene Understanding)
• レンダリング
1. トラッキング
• ARKitのコア機能
• 空間中のデバイスの相対位置をリアルタイムで取得
• Visual-Inertial Odometry
Visual-Inertial Odometry
(VIO)
VIOのしくみ
VIOのしくみ
VIOのしくみ
ARKitのVIOを支える技術
• 画像のキャプチャー - AVFoundation
• ジャイロと加速度センサー - Core Motion
https://www.cultofmac.com/308585/steve-jobs-gave-iphone-grand-unveiling-8-years-ago-today/
VIOの弱点
• テクスチャーのある表面でないと特徴点が検出できない
• デバイスに動きがないと検出できない
2. シーンの把握
• 平面の検出(Plane Detection)
• 当たり判定(Hit-Testing)
• 照明の推定(Light Estimation)
2. シーンの把握
• 平面の検出(Plane Detection)
• 当たり判定(Hit-Testing)
• 照明の推定(Light Estimation)
2. シーンの把握
• 平面の検出(Plane Detection)
• 当たり判定(Hit-Testing)
• 照明の推定(Light Estimation)
2. シーンの把握
• 平面の検出
• 当たり判定(Hit-Testing)
• 照明の推定(Light Estimation)
3. レンダリング
💡
SceneKit
SpriteKit
Custom
https://www.apple.com/newsroom/2017/11/iphone-x-arriving-in-stores-around-the-world/
https://www.apple.com/newsroom/2017/11/iphone-x-arriving-in-stores-around-the-world/
https://k-tai.watch.impress.co.jp/img/ktw/docs/1089/783/html/omo02_o.jpg.html
https://www.businessinsider.jp/post-106771
フェイス・トラッキング
https://developer.apple.com/videos/play/fall2017/601/
フェイス・トラッキング
• 高精度な顔の検出とトラッキング
• リアルタイムな表情のトラッキング
• 深度イメージ
• 照明の推定
https://www.apple.com/apple-events/september-2017/
1. 顔の検出とトラッキング
https://www.apple.com/apple-events/september-2017/
1. 顔の検出とトラッキング
https://www.apple.com/apple-events/september-2017/
1. 顔の検出とトラッキング
https://www.apple.com/apple-events/september-2017/
1. 顔の検出とトラッキング
2. リアルタイムな表情のトラッキング
3. 深度イメージ
4. 照明の推定
ARKit
Unity+ARKit?
Unity ARKit Plugin
Unity ARKit Plugin
• ARKitのAPIやクラスをラップした
ライブラリ
• 豊富なサンプルシーン
• Asset Storeから無料で
ダウンロード
https://www.assetstore.unity3d.com/en/#!/content/92515
https://bitbucket.org/Unity-Technologies/unity-arkit-plugin
Unity ARKit Pluginの
サンプルシーン
How Unity and ARKit work
https://developer.apple.com/videos/play/wwdc2017/602/
ARKit
トラッキングの対象を指定
カメラやセンサーから情報を得てトラッキング
トラッキングの結果
ARConfiguration
• ARWorldTrackingConfiguration
• ARFaceTrackingConfiguration
Unity ARKit Plugin
ARConfiguration
ARKit
Unity
Unity ARKit Plugin
ARConfiguration
ARKit
UnityARSession (Objective-C)
UnityARSessionNativeInterface (C#)
Unity
Unity ARKit Plugin
ARConfiguration
ARKit
UnityARSession (Objective-C)
UnityARSessionNativeInterface (C#)
Unity
RunWithConfig
Unity ARKit Plugin
ARConfiguration
ARKit
UnityARSession (Objective-C)
UnityARSessionNativeInterface (C#)
Unity
特徴点
照明情報
位置・向き
カメラ画像
Unity ARKit Plugin
ARConfiguration
ARKit
UnityARSession (Objective-C)
UnityARSessionNativeInterface (C#)
Unity
カメラ画像
特徴点
照明情報
位置・向き
Unity ARKit Plugin
ARConfiguration
ARKit
UnityARSession (Objective-C)
UnityARSessionNativeInterface (C#)
Unity
カメラ画像
特徴点
照明情報
位置・向き
Unity ARKit Plugin
ARConfiguration
ARKit
UnityARSession (Objective-C)
UnityARSessionNativeInterface (C#)
Unity
カメラ画像
特徴点
照明情報
位置・向き
ARFrameUpdatedEvent
Unity ARKit Plugin
ARConfiguration
ARKit
UnityARSession (Objective-C)
UnityARSessionNativeInterface (C#)
Unity
カメラ画像
特徴点
照明情報
位置・向き
UnityARVideo.OnPreRender
GetARVideoTextureHandles
Unity ARKit Plugin
ARConfiguration
ARKit
UnityARSession (Objective-C)
UnityARSessionNativeInterface (C#)
Unity
ARAnchorAddedEvent
ARAnchorUpdatedEvent
etc…
フェイストラッキングの
サンプルシーン
フェイス・トラッキングのイベント
• ARFaceAddedEvent - 顔が検出されたときに呼ばれる
• ARFaceUpdatedEvent - 顔の位置、向き、表情が更新されたとき呼ばれる
ARFaceAnchor
• transform - 顔の位置と向き
• faceGeometry - 頂点の配列、三角形のインデックス、テクスチャーUV
• blendShapes - 顔のパーツの変化を示すデータ
Blend Shapes
左目
eyeBlinkLeft eyeLookDownLeft eyeLookInLeft
eyeLookOutLeft eyeLookUpLeft eyeSquintLeft
eyeWideLeft
右目
eyeBlinkRight eyeLookDownRight eyeLookInRight
eyeLookOutRight eyeLookUpRight eyeSquintRight
eyeWideRight
眉、頬、鼻
browDownLeft browDownRight browInnerUp
browOuterUpLeft browOuterUpRight cheekPuff
cheekSquintLeft cheekSquintRight noseSneerLeft
noseSneerRight
https://developer.apple.com/documentation/arkit/arfaceanchor.blendshapelocation
Blend Shapes
口とあご
jawForward jawLeft jawRight jawOpen mouthClose
mouthFunnel mouthPucker mouthLeft mouthRight
mouthSmileLeft mouthSmileRight mouthFrownLeft
mouthFrownRight mouthDimpleLeft mouthDimpleRight
mouthStretchLeft mouthStretchRight mouthRollLower
mouthRollUpper mouthShrugLower mouthShrugUpper
mouthPressLeft mouthPressRight
mouthLowerDownLeft mouthLowerDownRight
mouthUpperUpLeft mouthUpperUpRight
https://developer.apple.com/documentation/arkit/arfaceanchor.blendshapelocation
https://www.youtube.com/watch?v=cFVQ5G9x7c4
Unity ARKit Remote
Unity ARKit Remote
• Unity ARKit Pluginに含まれる
デバッグツール
• デバイスのARKitをUnity Editor上の
シーンとミックスして動作を確認で
きる
https://blogs.unity3d.com/jp/2017/08/03/introducing-the-unity-arkit-remote/
https://forum.unity.com/threads/arkit-support-for-ios-via-unity-arkit-plugin.474385/page-13#post-3153415
Demo
まとめ
まとめ
• Unity ARKit Pluginを使うと、UnityからARKitの機能を利用できる
• Unity+ARKitで、Unityのシーンやアセットを利用して簡単に制作できる
• ARKitについて理解する必要はある

Unity+ARKitで作る、新しいAR体験

Editor's Notes

  • #5 一言で表すと「統合ゲーム開発環境アプリケーション」。 リアルタイムに動作を確認しながら開発・デバッグ可能な高性能エディター。 近年はVR/ARコンテンツ制作や映像制作などゲーム以外の分野でも使われる。
  • #6 スマートフォン、デスクトップ、コンソールゲーム機からWebまで幅広いマルチプラットフォーム対応
  • #7 コアゲームエンジンのすべての機能を無料で使えるPersonal。 エラーを収集してパフォーマンスを最適化するPerformance Reportingやプレイヤーの行動解析が可能なAnalyticsといった高度なサービスを利用可能なPlusやPro。
  • #8 Unityを使用して制作されたコンテンツを紹介する取り組み。
  • #9 アセットストア - Unityで使える小道具を売っているストア。 エディターの拡張機能から3Dモデル、サウンドまで、有料、無料を問わず多様なコンテンツ。 アセットを利用することで開発をより簡単に、より早く。
  • #10 ユニティちゃんライセンスの下で自由に利用可能なキャラクター。 3Dモデルデータや2Dキャラクター、シェーダー、ボイスデータなどを配布。
  • #11 ARKitはどのような仕組みなのか、UnityとARKitを組み合わせて何が作れるのか、解説。 ARコンテンツ制作のヒント。帰ってからちょっと作ってみたいなと思ってもらう。 技術的につっこんだ話になるがついてきてほしい。
  • #12 Unity+ARKitでどんなものが作れるのか。
  • #13 ARKit Augmented Reality Basketball Unity - xcode wwdc 2017 review apple ar ios 11 beta 1 二人の男性がバスケットボールをするデモ。 スケールも合っているのでかなり現実感がある。
  • #14 IKEA Place IKEA’s new AR app — superimposes furniture into a room, allowing the user to visualize what a new purchase may look like in a user’s home カタログから家具を選んで購入前に部屋に置いくとどんな感じか見ることができるアプリ。
  • #15 a-haの80年代の代表曲「Take On Me」のPVを、シカゴのTrixi StudiosというグループがUnity+ARKitで再現したデモ。 現実世界からコミックの世界に入っていく基のPVのコンセプトをARで再現。
  • #16 大西拓人さん(る株式会社代表)がUnity+ARKitで面白いデモを色々作っている。 本日2階で「コマあにめ」の展示もされている。 目の前に配置されたスイカをデコピンで割る。 手がスイカより手前に来るように、画像から肌色を検出して手前に重ねて表示している。 走っている自分の目の前に自由な速度で走る仮想のランナーを表示するデモ。 ジョギングのペースメーカーなどに使える。 掃除機をかけた床が塗られていくデモ。 実用性がある。
  • #18 AR=Augmented Reality=拡張現実。 現実の世界に付加情報を重ねて見せる技術。
  • #19 ハードウェア製品としては、Google GlassやMicrosoft HoloLens。 それぞれアプローチは異なる。
  • #20 スマートフォンはカメラとディスプレイを搭載しているのでARに最適なデバイス。 ロケーションベース - GPSによる位置情報に基づくAR。例: セカイカメラ マーカーベース- ターゲットとして登録された特定の画像を認識するAR。 マーカーは以前はQRコードのようなものだったが、最近は雑誌やカタログの1ページなど任意の画像が可能。 マーカーレス - あらかじめターゲット画像を登録する必要なしに空間を認識するAR=どこでも使えるAR。
  • #21 スマートフォンが高性能化して普及。 ARKitを含めSDKやライブラリが充実してきたため開発者にとっても開発しやすい。
  • #22 Digi-Capitalによる予測。 これから3〜4年でモバイルARの市場は数十倍と急速に拡大していく。 緑の線がトータルでの最も良い予測、赤い線が最も悪い予測。
  • #23 レベニューの予測。 ARが普及し、ちゃんと商売になる。
  • #24 スマートフォン向けのARライブラリを紹介。
  • #25 WWDC 2017で発表、iOS 11から利用可能。 既存のiPhoneやiPadでも利用可能。
  • #26 ARKitと同等の機能。 2017年8月末に発表、11月現在Preview Release。 Google PixelシリーズとSamsung Galaxy S8シリーズで利用可能。 Unity 2017.2から統合。
  • #27 カメラの他に深度センサーを使用して、平面だけでなく物体の立体構造を認識可能。 Lenovo Phab2 Pro、Asus ZenFone ARで利用可能。 Googleは特別なハードウェアが不要でより汎用的なARCoreに注力する模様。
  • #28 旧QCAR。 Qualcommが開発、その後PTCが買収。 任意の画像をマーカーにできることで注目。 Unity 2017.2から統合。
  • #29 OSSのARToolKit。 Sony製SmartAR SDK。 英Kudan社製Kudan。
  • #31 Appleは「モバイルARプラットフォーム」と表現。 シンプルなインターフェイスのハイレベルAPIフレームワーク。
  • #32 A9以降のプロセッサーを搭載しているデバイス。 対応しているデバイスはどれくらいあるのか。 Apteligentによる2017年11月時点のデータ。 右側の色つき部分が対応デバイス。細い部分は1%以下で、iPhone 8やiPad。 iOSデバイスの約半分がARKit対応。 ARKit非対応機種で最も多いのはiPhone 5sで7.2%。
  • #33 Appleによる11月時点のデータ。 少なくとも今後1年でおよそ半分のiOSデバイスユーザーがARKitによるARコンテンツを体験可能な状態になる。
  • #34 WWDCのセッション「Introducing ARKit」から紹介。
  • #36 ARKit第1のレイヤー。 聞き慣れないVisual-Inertial Odometryという技術。
  • #37 Visual-Inertial Odometryとは。 カメラの画像解析(Visual)とジャイロ、加速度計(Inertial)によって位置・方向を測定する技術。
  • #38 1つのカメラから画像をキャプチャー、その画像を解析して特徴点(画像の中で際立っている点)を検出。 並行してジャイロと加速度センサーでデバイスの3軸の回転と3軸の移動を検出。 これを連続したフレーム間(1秒間に60回)でおこなう。
  • #40 前後のフレーム間で特徴点とデバイスの位置・向きの変化を測定することにより空間を認識。 我々が2つの目で見ることで空間を認識するのと同じ仕組み。 カメラ、ジャイロ、加速度センサーとすでにスマートフォンに入っているものでできる。 特別な装置が不要で既存のデバイスでも利用可能。
  • #41 iOSにおけるVisual-Inertial Odometryの足回り。 既存の技術(いずれもiOS 4〜)を組み合わせて新しい機能を高いクオリティで実現。
  • #42 iPodやiPhoneの発明に通じるAppleのお家芸。
  • #43 この方式の弱点。 真っ黒な床や真っ白な床は検出できない。 デバイスを動かして視点を変えると認識精度が高まる(特に水平方向にゆっくり)。
  • #44 ARKit第2のレイヤー。 トラッキングで得た情報を基に、周辺環境が具体的にどうなっているかを把握する。 3つの機能がある。
  • #45 最初の機能。 地面に水平な平面を検出。 平面は四角形で検出され、その大きさも取得可能。これを利用して現実世界の物の大きさを測ることが可能。 複数の平面を同時に検出可能。 広い床などは最初見えている一部分しか検出されないが、同じ床の上で視点が変わって別の平面が検出されると、それらは自動的に大きな一つの平面にマージされる。
  • #46 2番目の機能。 デバイスのカメラからの直線(レイ)と検出した平面の交差するポイントを検出。 画面上でタップした場所が、現実世界だとどの場所になるのかを検出。
  • #47 最後の機能。 環境光の強さと色温度を取得可能。 これによって描画するオブジェクトをより自然に現実空間になじませることが可能。
  • #48 ARKit第3のレイヤー。 ARKitはカメラの画像、トラッキング情報(デバイスの位置・向き)、シーン情報(平面や照明)を提供。 これを基に、任意の方法でレンダリングが可能。 SceneKit、SpriteKitといったiOSのフレームワーク、またはグラフィックスAPIのMetalを使った独自の描画。
  • #55 iPhone Xでしかできないもの。Face Tracking。
  • #56 iPhone XのFace TrackingもARKitに対応。 開発者向けのビデオセッションから紹介。
  • #57 フェイス・トラッキングの4つの機能。
  • #58 最初の機能。 iPhone Xが発表されたApple Special Eventのキーノート。 iPhone Xのフロント側上部に、赤外線カメラ、フラッド・イルミネーター、フロント・カメラ、ドットプロジェクター。
  • #59 顔検出のしくみ。 フラッド・イルミネーター - 目に見えない赤外線を照射。
  • #60 ドット・プロジェクター - 30,000個の赤外線のドットを照射。
  • #61 赤外線カメラでドットを読み取り、顔の形状をリアルタイムに検出。 一番大きく近い顔を検出。
  • #62 フェイス・トラッキング2番目の機能。 顔の位置と向きだけでなく顔にフィットする3Dのメッシュをリアルタイムで取得可能。
  • #63 3番目の機能。 深度を表すグレースケール画像。 1秒間に15回キャプチャーされる。
  • #64 最後の機能。 顔をライトプローブとして扱うことで、Directional Light(どの方向からどれくらいの照明が当たっているか、ベクトルと光の強さ)を取得可能。 これによって描画するオブジェクトをより自然に顔になじませることが可能。
  • #65 ここまでARKit。
  • #66 UnityとARKitをどう使うか。
  • #67 そこで必要なのがUnity ARKit Plugin。
  • #68 Unityが提供しているARKitのAPIやクラスをラップしたライブラリ。 Unityのプロジェクトに組み込んで使用。 サンプルシーンが付属しているので、それをベースにコンテンツ制作可能。 Asset Storeのほか、オープンソースとしてBitBucket(最新版)でも公開。 Unity 5.6.1p1以降。
  • #70 最もシンプルなサンプルのUnityARKitScene。 このシーンでは、特定の位置に固定されたキューブ、特徴点や平面の検出、当たり判定、照明の推定まで試すことができる。
  • #71 サンプルシーンを実際に動かしてみる。
  • #72 Unity ARKit Pluginの詳細な動作。
  • #73 ARKitの動作の概要。 WWDCのセッションから引用。 iOS 11正式版では変更がある。ARSessionConfiguration → ARConfiguration ARConfiguration - 何をトラッキングするかを指定。 ARWorldTrackingConfiguration - リアカメラで空間をトラッキング。 ARFaceTrackingConfiguration - フロントカメラで顔をトラッキング。 セッションを開始。 トラッキングの結果はARFrameとして取得可能。
  • #75 UnityARSessionNativeInterfaceとUnityARSessionを通してARKitを扱う。 Unity側からはUnityARSessionNativeInterfaceを通して使う。
  • #76 ARSessionを開始するには、NativeInterfaceのRunWithConfigメソッドにConfigurationを指定して呼ぶ。
  • #77 フレームが更新されるとUnityARSessionのデリゲートメソッドが呼ばれる。 そこではARFrameからカメラ画像、位置・向き、照明などの情報が取り出される。
  • #78 位置・向きや照明などの情報はデリゲートメソッドを通じてNativeInterfaceへ。 ARFrameUpdateEventが発行され、Unity側に通知される。
  • #79 位置・向きや照明などの情報はデリゲートメソッドを通じてNativeInterfaceへ。 ARFrameUpdateEventが発行され、Unity側に通知される。
  • #80 位置・向きや照明などの情報はデリゲートメソッドを通じてNativeInterfaceへ。 ARFrameUpdateEventが発行され、Unity側に通知される。
  • #81 カメラ画像はネイティブ側に保持される。 Unity側のカメラにアタッチされたUnityARVideoのOnPreRenderの中で、レンダリング前にテクスチャーにコピーされる。
  • #82 平面が検出されたり、更新されたときなども、同様にNativeInterfaceを通じてARAnchorAddedEventやARAnchorUpdatedEventが発行されUnity側に通知される。 40:00
  • #83 サンプルシーンをいくつか紹介。 UnityARBallz。 検出された平面上にボールを置くことができる。
  • #84 ParticlePainter。 色をピックしてデバイスを動かすと、空間中にパーティクルで絵が描ける。
  • #86 実際に動かしてみる。
  • #87 いずれのイベントでもARFaceAnchorというデータを受け取れる。
  • #88 transformとfaceGeometryを使って顔のメッシュを描画。
  • #89 顔のパーツの変化を0〜1の数値で取得可能。自然な状態が0。 片目だけでも7種類。全部で50種類以上。 iPhone XのAnimojiはこれを利用。 AppleのARKitのドキュメントに画像入りで掲載。
  • #90 顔のパーツの変化を0〜1の数値で取得可能。自然な状態が0。 片目だけでも7種類。全部で50種類以上。 iPhone XのAnimojiはこれを利用。 AppleのARKitのドキュメントに画像入りで掲載。
  • #91 Playing Roll-a-ball with iPhone X Face Tracking UnityのRoll-a-ballチュートリアルをBlend Shapesを使って遊べるようにしてみた。
  • #93 現在iPhone XのFace Trackingは未対応。
  • #96 Unity+ARKitで、Unityのシーンやアセットを利用して、ARKitに対応したコンテンツが簡単に制作できる。 ARKitについて、どのようなイベントが発生するのか、どのようなデータが受け取れるかは理解する必要がある。 Apple DeveloperサイトのARKitのドキュメントに目を通しておくと良い。