
はじめに
iOS 11.0でARKitが使えるということで早速試してみました。
今回はSwiftプロジェクトを新規作成し、3Dオブジェクトを配置するところまでをやってみます。
動作環境
- macOS High Sierra Version 10.13
- Xcode: Version 9.0
- iOS 11.0
プロジェクト新規作成
まずはプロジェクトを新規作成します。
テンプレートに「Augmented Reality App」を選択して下さい。
テンプレートアプリの実行
ARアプリの実行は実機で行うので、ビルド前にiPhoneを接続しておいて下さい。
まずはテンプレートアプリを実行してみます。
初回起動時にカメラへのアクセス許可を聞かれるので、OKで進んで下さい。
デフォルトでは飛行船の3Dオブジェクトが表示されます。
ViewController.swiftでscn形式の3Dモデルを指定しています。
override func viewDidLoad() {
super.viewDidLoad()
// Set the view's delegate
sceneView.delegate = self
// Show statistics such as fps and timing information
sceneView.showsStatistics = true
// Create a new scene
let scene = SCNScene(named: "art.scnassets/ship.scn")!
// Set the scene to the view
sceneView.scene = scene
}
3Dモデルの変換
ARKitではscn形式の3Dモデルが必要なので、以下のフリーサイトからdaeファイルをダウンロードし、scn形式に変換します。
メニューの[EXPLORE]>[Downloadable]でダウンロード可能な3Dモデルを検索できます。
今回はみんな大好きマリオを出現させてみます。
この時dae形式のファイルをダウンロードするようにして下さい。
ダウンロードが完了したらファイルを解凍し、art.scnassetsにdaeファイルが存在するフォルダごと追加します。
マリオの3Dモデルをプロジェクトに追加出来ました。
次にscnファイルへ変換します。
daeファイルを選択した状態から、[Editor]>[Convert to SceneKit scene file format (.scn)]で変換できます。
scnファイルに変換できたら、右ペインのインスペクタのパラメータを調整します。
デフォルトだと大きすぎたので、かなり縮小して表示するように設定しています。
オブジェクトの指定を差し替え
ViewController.swiftのscnファイルのパスを修正します。
override func viewDidLoad() {
super.viewDidLoad()
// Set the view's delegate
sceneView.delegate = self
// Show statistics such as fps and timing information
sceneView.showsStatistics = true
// Create a new scene
let scene = SCNScene(named: "art.scnassets/Mario/mario.scn")!
// Set the scene to the view
sceneView.scene = scene
}
ARアプリをビルド実行
マリオが出現しました!
アングルを変えても固定されているので、実際に空間に存在しているように見えます。
アプリ起動直後は空間の認識中なのか、3Dモデルが固定されていないように見える場合があります。
しばらく待つと問題なく固定されて表示されるはずです。
まとめ
今回はARKitを使って3Dオブジェクトを置いてみました。
サンプルプロジェクトを少しいじっただけですが、3Dモデルがあれば簡単にARアプリが作成できることを実感しました。
個人的にはARKitはかなり画期的なものだと思っています。
AR技術自体は昔から存在していましたが、開発するにはまだまだハードルが高いものでした。
iOSという世界最大クラスのプラットフォームでAR開発のエコシステムが広がれば、一気に市場に浸透するかもしれせん。
面白いアイデアもどんどん出てくると思います!
次は平面検出やってみたいです。
それでは。