見出し画像

作りながら学ぶARKitの実践入門書を書きました

ARKitの解説書「実践ARKit」を執筆し、個人で出版しました。ARKit 2.0 (iOS 12)・Xcode 10・Swift 4.2対応。全119ページ。サンプルコードはGitHubよりダウンロード可能です。

BOOTHにて販売しています。

書籍の紹介

本書は、作りながら学ぶネイティブARKitアプリケーション開発の実践入門書です。

はじめの一歩として3行で書ける最小実装のARから始めて、平面を検出する方法、その平面に仮想オブジェクトを設置する方法、そしてその仮想オブジェクトとインタラクションできるようにする方法・・・と、読み進めるにつれて「作りながら」引き出しが増えていき、最終的にはARKitを用いたメジャーや、空間に絵や文字を描くといった、ARKitならではのアプリケーションの実装ができるよう構成しています。

3行で書けるAR(第1章)

「非矩形」な平面の検出(第5章)

仮想オブジェクトとのインタラクション(第6章)

ARKit+デプス(第10章)

メジャー(第12章)

空中にお絵描き(第13章)

ARKit+Metal(第15章)

ARKit+Metal(第15章)

全92ページ。ARKit 2.0 (iOS 12), Xcode 10, Swift 4.2対応。サンプルコードはGitHubよりダウンロード可能です。


目次

第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

第13章 アプリケーション実装例2: 空中に絵や文字を描く

- 13.1 スクリーンの中心座標をワールド座標に変換する
- 13.2 頂点座標の配列から、線としてのカスタムジオメトリを構成する
- 13.3 その他の実装のポイント

第14章 アプリケーション実装例3: Core ML + Vision + ARKit
- 14.1 CoreML・Vision・ARKit連携のポイント

第15 章 Metal + ARKit
- 15.1 その1-マテリアルをMetalで描画する
- 15.2 その2-Metalによるカスタムレンダリング

第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 ARFrameからデプスデータを取得する
- 12.2 制約

第13章 ビデオフォーマット
- 13.1 ARConfiguration.VideoFormat
- 13.2 ビデオフォーマットを指定する
- 13.3 使用可能なビデオフォーマット
- 現行デバイスで使用可能なビデオフォーマット一覧
- ビデオフォーマットはどう使い分けるのか?

第14章 アプリケーション実装例1: 現実空間の長さを測る
- 14.1 ARKitにおける座標と現実のスケール
- 14.2 現実空間における二点間の距離

第15章 アプリケーション実装例2: 空中に絵や文字を描く
- 15.1 スクリーンの中心座標をワールド座標に変換する
- 15.2 頂点座標の配列から、線としてのカスタムジオメトリを構成する
- 15.3 その他の実装のポイント

第16章 アプリケーション実装例3: Core ML + Vision + ARKit
- 16.1 CoreML・Vision・ARKit連携のポイント

第17章 Metal + ARKit
- 17.1 マテリアルをMetalで描画する
- 17.2 他のSceneKitとMetalの連携機能
- 17.3 Metalによるカスタムレンダリング

対象読者

「実践入門書」を謳っている通り、実践を主眼に据えつつあくまでARKit入門者向けです。すでに現場でゴリゴリに触ってる人には物足りないかもしれません。また本書はネイティブiOSアプリ開発の話で、Unityを使ったARKitアプリの開発については書いてないです。

あと、全面的にリライトしてますが、「iOS 11 Progamming」「iOS 12 Progamming」で執筆を担当したARKitの章を土台としてますので、そちらを既にご購入の方には重複する部分が多くなってしまうかと思います。目次をよくご確認いただき、ご検討ください。

表紙の話

もともとあった表紙の構想は、ARKitにとって象徴的なシンボルである(と僕は思っている)「あの」飛行機の3Dモデル"ship.scn"を「ちょっと浮いた感じで真ん中あたりにプリントする」(+タイトル)というシンプルなものでした。

ship.scn。XcodeのARKitテンプレートに同梱されている

が、そういう特殊加工をするには部数が足りない(しかもかなり高い)ことがわかり断念。

で、次になんとなく思いついたのが、ship.scnを手書きスケッチ風にしてオライ◯ー的表紙として仕上げることでした。

何度かバージョンアップして、今に至ります。

左から、Beta 1、Beta 2、RC1

入稿版

「Metal入門」もあります

技術書典4では完売御礼だった「Metal入門」の第2刷が販売中です。マイナーアップデートでSwift 4.2, iOS 12, Xcode 10対応しております。興味あればぜひともこの機会に。

製本版はマットな表紙とほどほどな厚みが手に馴染む、最高な仕上がりとなっております

BOOTHで販売しております。

こちらの記事に評判をまとめています。

関連記事


最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/