目次
はじめに
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モデルを指定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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ファイルのパスを修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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開発のエコシステムが広がれば、一気に市場に浸透するかもしれせん。
面白いアイデアもどんどん出てくると思います!
次は平面検出やってみたいです。
それでは。