ARKitのサンプルコード集「ARKit-Sampler」

**ARKitのサンプル集「ARKit-Sampler」をオープンソースで公開**しました。


[ARKit Sampler](https://github.com/shu223/ARKit-Sampler)


<img width="284" alt="icon.png" src="https://qiita-image-store.s3.amazonaws.com/0/3180/58279b49-694e-670d-5aac-1576a4d2367d.png">


ソースコードは GitHub に置いてあるので、ご自由にご活用ください。

https://github.com/shu223/ARKit-Sampler

使用言語はSwiftです。

ARKitのサンプルは公式のを含めいろいろ出てますが、ARKit-Samplerでは「<b>余計な実装を混ぜずに、できるだけシンプルな実装で伝える</b>」というところに気をつけています。もともとは[書籍執筆のため](http://d.hatena.ne.jp/shu223/20170627/1498545975)に用意したものなので、とくに序盤のサンプルはシンプルで意図が汲みやすいと思います。


## ビルド方法

1. [ここ](https://developer.apple.com/machine-learning/)から Inceptionv3.mlmodel をダウンロードして mlmodels フォルダ配下に置く
2. Xcode 9 でビルドしてiOS 11端末にインストール

基本的にビルドするだけですが、Core MLのモデルファイルをダウンロードしてくる必要</span>があります。



## サンプル一覧

今のところ12個のサンプルが入っています。随時追加していきます。


### 3-lines AR

「実質３行」のシンプルなAR。ARKitが簡単に扱えるということがわかります。

<img src="https://qiita-image-store.s3.amazonaws.com/0/3180/b6665bca-2c36-ecaa-b3ed-072b94306665.jpeg" width="200">


### Plane Detection

ARKitの基本機能、水平面の検出方法を示したシンプルなサンプル。

<img src="https://qiita-image-store.s3.amazonaws.com/0/3180/5a958ac4-b0c1-1284-a749-ac7ca0ab7c87.jpeg" width="200">


### Virtual Object

水平面に仮想オブジェクトを設置するサンプル。

<img src="https://qiita-image-store.s3.amazonaws.com/0/3180/f7f148aa-b0e3-7442-5f87-4c787a4f9664.jpeg" width="200">


### AR Interaction

仮想オブジェクトや、検出した水平面に対するインタラクションの実装方法を示したサンプル。

![interaction2.gif](https://qiita-image-store.s3.amazonaws.com/0/3180/b4b49965-3ab3-ad1d-8106-92af61e8273d.gif)


### AR Measure

もはやARKitの定番実装例となっている、<span class="deco" style="font-weight:bold;">ARKitをメジャー（巻尺）代わりに使う</span>サンプル。

<img src="https://qiita-image-store.s3.amazonaws.com/0/3180/33083284-8988-fd48-2aaf-20f54c551070.jpeg" width="200">


### AR Drawing

<span class="deco" style="color:#FF0000;font-weight:bold;">空中に絵や文字を書く</span>サンプル。

<img src="https://qiita-image-store.s3.amazonaws.com/0/3180/fdc2c8ae-7259-bea5-315d-3b3bb05470ca.jpeg" width="200">


### Core ML + ARKit",

<span class="deco" style="font-weight:bold;">Core ML + Visionで認識したオブジェクトに対してARKitで「ARタグ付け」</span>するサンプル。

<img src="https://qiita-image-store.s3.amazonaws.com/0/3180/636ca632-9138-ca76-dfe6-97bb389feb92.jpeg" width="200">


### Metal + ARKit

<span class="deco" style="color:#FF0000;font-weight:bold;">ARKitの描画にMetalを利用</span>するサンプル。

<img src="https://github.com/shu223/ARKit-Sampler/blob/master/README_resources/arkitmetal.gif?raw=true" width="200">



### Metal + ARKit (SCNProgram)

ARKitで追加した仮想オブジェクトのマテリアルを`SCNProgram`を用いてMetalで描画するサンプル。

<img src="https://github.com/shu223/ARKit-Sampler/blob/master/README_resources/arscnprogram.png?raw=true" width="200">


### Simple Face Tracking

Face-basedなARのサンプル。

<img src="https://github.com/shu223/ARKit-Sampler/blob/master/README_resources/face.gif?raw=true" width="200">

![](README_resources/face.gif)


### Vertical Plane Detection

**ARKit 1.5**から入った、垂直平面を検出するサンプル。


### Irregularly-Shaped Plane Detection

**ARKit 1.5**から入った、`ARSCNPlaneGeometry`と`ARPlaneGeometry`を使用して「非」矩形な形状の表面を検出するサンプル。


<img src="https://github.com/shu223/ARKit-Sampler/blob/master/README_resources/irregular.gif?raw=true" width="200">


## 「つくりながら学ぶ」ARKitの入門書

ARKitの本を書いて個人で出版しました。

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

全142ページ。サンプルコードはGitHubよりダウンロード可能です。BOOTHにて販売中。

[実践ARKit - shu223 - BOOTH](https://booth.pm/ja/items/1038241)


### 関連記事

- [iOS 10の新機能のサンプルコード集「iOS 10 Sampler」 - Qiita](https://qiita.com/shu223/items/f371655c2b101f1b0218)
- [iOS 9 の新機能のサンプルコード集 - Qiita](https://qiita.com/shu223/items/467dc48b9624d3195be2)
- [iOS 8 の新機能のサンプルコード集『iOS8-Sampler』 - Qiita](https://qiita.com/shu223/items/5c5df2ad9484c7abdb30)
- [iOSのカスタム画面遷移アニメーション全64種類を試せるサンプル - Qiita](https://qiita.com/shu223/items/b49e6939284eff6e8471)