ARKitの実践入門書「実践ARKit」のサンプルコードです。
一部サンプルはモデルファイルのダウンロードが必要です。mlmodels/readme.md
を参照してください。
作りながら学ぶネイティブARKitアプリケーション開発の実践入門書です。はじめの一歩として3行で書ける最小実装のARから始めて、平面を検出する方法、その平面に仮想オブジェクトを設置する方法、そしてその仮想オブジェクトとインタラクションできるようにする方法・・・と、読み進めるにつれて「作りながら」引き出しが増えていき、最終的にはARKitを用いたメジャーや、空間に絵や文字を描くといった、ARKitならではのアプリケーションの実装ができるよう構成しています。
本文146ページ。iOS 17, Swift 5, Xcode 15対応。
第1章 入門編その1 - 最小実装で体験してみる
- 1.1 手順1:プロジェクトの準備
- 1.2 手順2:ViewControllerの実装
- 1.3 基本クラスの解説
第2章 入門編その2 - 水平面を検出する
- 2.1 水平面を検出するためのコンフィギュレーション
- 2.2 平面検出に関するイベントをフックする - ARSessionDelegate
- 2.3 平面検出に関するイベントをフックする - ARSCNViewDelegate
- 2.4 検出した平面を可視化する
第3章 入門編その3 - 検出した水平面に仮想オブジェクトを置く
- 3.1 3Dモデルを読み込む
- 3.2 仮想オブジェクトとして検出した平面に置く
第4章 ARKit 開発に必須の機能
- 4.1 トラッキング状態を監視する
- 4.2 デバッグオプションを利用する
- 4.3 トラッキング状態をリセットする / 検出済みアンカーを削除する
第5章 平面検出の基礎
- 5.1 垂直平面の検出
- 5.2 検出した平面のアラインメントを判別する
- 5.3 平面ジオメトリの取得
- ARPlaneGeometry と ARSCNPlaneGeometry
第6章 画像検出と画像トラッキング
- 6.1 画像検出
- 6.2 画像トラッキング
- 6.3 画像検出と画像トラッキングのの違い
第7章 3D物体検出と3D物体スキャン
- 7.1 3D物体検出
- 7.2 3D物体スキャン
第8章 AR空間におけるインタラクションを実現する
- 8.1 ヒットテスト(当たり判定)を行う
- 8.2 デバイスの移動に対するインタラクション
第9章 AR体験の永続化と共有
- 9.1 ARWorldMap
- 9.2 ワールドマップを取得する
- 9.3 ワールドマップを永続化・共有する
- 9.4 ワールドマップからセッションを復元する
- 9.5 ワールドマップ取得タイミング
第10章 フェイストラッキング
- 10.1 フェイストラッキングを開始する - ARFaceTrackingConfiguration
- 10.2 検出した顔のアンカーを取得する - ARFaceAnchor
- 10.3 顔の動きを可視化する
- ブレンドシェイプでアニ文字風3Dアバター
第11章 特徴点を利用する
- 11.1 特徴点を可視化する
- 11.2 フレームに含まれる特徴点群データ
- 11.3 ワールドマップに含まれる特徴点群データ
第12章 デプスを利用する
- 12.1 フェイストラッキング利用時のデプスデータ
- 12.2 People Occlusion利用時のデプスデータ
- 12.3 LiDAR 由来のデプスデータ: シーンデプス (Scene Depth)
第13章 オクルージョン
- 13.1 People Occlusionの実装方法
- 13.2 personSegmentationとpersonSegmentationWithDepthの違い
- 13.3 利用可能なコンフィギュレーション
- 13.4 segmentationBufferとestimatedDepthData
第14章 モーションキャプチャ
- 14.1 2D Body Detection
- 14.2 3D Body Tracking
第15章 ビデオフォーマット
- 15.1 ARConfiguration.VideoFormat
- 15.2 ビデオフォーマットを指定する
- 15.3 使用可能なビデオフォーマット
- 現行デバイスで使用可能なビデオフォーマット一覧
- ビデオフォーマットはどう使い分けるのか?
第16章 アプリケーション実装例1: 現実空間の長さを測る
- 16.1 ARKitにおける座標と現実のスケール
- 16.2 現実空間における二点間の距離
第17章 アプリケーション実装例2: 空中に絵や文字を描く
- 17.1 スクリーンの中心座標をワールド座標に変換する
- 17.2 頂点座標の配列から、線としてのカスタムジオメトリを構成する
- 17.3 その他の実装のポイント
第18章 アプリケーション実装例3: Core ML + Vision + ARKit
- 18.1 CoreML・Vision・ARKit連携のポイント
第19章 Metal + ARKit
- 19.1 マテリアルをMetalで描画する
- 19.2 他のSceneKitとMetalの連携機能
- 19.3 Metalによるカスタムレンダリング
- 19.4 Metalカスタムレンダリング時のオクルージョン