iOSでUSDZファイルのAR表示(AR Quick Look)
はじめに
WWDC2018で発表されたusdz形式のファイルでのAR表示(AR Quick Look)についてまとめます。
- USDZとは
- 対応機種
- Quick Look表示のイメージ
- Webコンテンツ内にUSDZファイルを配置する方法
- ネイティブアプリでAR表示する場合の方法
- WKWebViewでの表示は未対応
- SFSafariViewControllerで表示する場合
- QLPreviewControllerで表示する場合
- サンプルリポジトリ
usdzとは
- 3Dデータ用のファイル形式
- ピクサーが2013に発表したUSD形式の改良版
- iOS12以降の対応機種であればブラウザやネイティブアプリでQuick Look表示が可能
対応機種
iOSでの対応機種は以下のようになっています。
- iPhone 6s以降
- すべてのiPad Proモデル
- iPad(第5世代)
- iPad(第6世代)
※OSはiOS12以降
さらにWWDCの発表では以下のメモリ容量の大きいデバイスが推奨されていました。
- iPhone 7 Plus
- iPhone 8 Plus
- iPhone X
- iPad Pro 12.9
Quick Look表示のイメージ
iO12の対応機種であればSafariでAR Quick Lookギャラリーを見ることで、Quick Look表示を体験できます。
- ARコンテンツを含むWebページを表示した場合、上記のようにAR対応のアイコン(写真左)が画像の上に表示される
- オブジェクトタブでは白い何もない空間上に3Dモデルが表示(写真中央)
- ARタブでは背面カメラを利用して平面を検知した時に3Dモデルが配置される(写真右)
試してみた感想としては、なかなか平面が検知されないのでカメラでいろんな方向を撮る手間がある、3Dモデルのサイズが大きめに表示されてしまうなどのiOS側の課題がありそうだなと感じました。
Webコンテンツ内にUSDZファイルを配置する方法
WebコンテンツでUSDZファイルを配置するにはaタグのhref属性にusdzファイルのパスを、rel属性に"ar"を設定します。内部にimgタグを配置すると自動でAR対応のアイコンが表示されます。この設定をしない場合、ブラウザがusdzという拡張子を判定することができません。
<a href="item.usdz" rel="ar" >
<img src="item_thumbnail.png">
</a>
以下のようにWebサーバーのMIME設定も必要なようです。
AddType model/vnd.pixar.usd .usdz
AddType model/usd .usdz
ネイティブアプリでAR表示する場合の方法
WKWebViewでの表示は未対応
WKWebViewでの表示も試みましたが、表示できませんでした。
以下のWebKitのサイトにも書かれていますが、WKWebViewでの表示は未対応のようです。
Viewing Augmented Reality Assets in Safari for iOS
Other than Safari, the AR integration is available in SFSafariViewController clients. We’ve also received requests to add it to WKWebView.
標準ブラウザ(Safari)を利用せず、ネイティブアプリで表示する方法は以下の2つです。
- SFSafariViewController
- QLPreviewController
SFSafariViewControllerで表示する場合
以下のようにURLを指定してあげればOKです。ただし、SFSafariViewControllerはカスタマイズできることがかなり制限されているので、実際に利用する場合は次のQLPreviewControllerを使うことが多いかと思います。
import SafariServices
import UIKit
public final class SafariViewController: SFSafariViewController {
let url: URL
init(url: URL) {
self.url = url
super.init(url: url, configuration: Configuration())
}
}
QLPreviewControllerで表示する場合
以下のようにQLPreviewControllerDataSourceを実装すればOKです。
import UIKit
import QuickLook
public final class ARNativeViewController: QLPreviewController {
let url: URL
init(url: URL) {
self.url = url
super.init(nibName: nil, bundle: nil)
dataSource = self
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension ARNativeViewController: QLPreviewControllerDataSource {
public func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
return 1
}
public func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
// URL must be a file-type URL (local files only)
return url as QLPreviewItem
}
}
注意点として、指定するURLは端末内に保存されたusdzファイルのURLである必要があります。そのため、WebサーバーからUSDZファイルを取得する場合は一度ローカルディレクトリにファイルを保存する必要があります。以下はAlamofireを利用してusdzファイルをダウンロードするサンプルコードです。
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent("teapot.usdz")
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
let url = URL(string: "https://developer.apple.com/arkit/gallery/models/teapot/teapot.usdz")!
Alamofire.download(url.absoluteString, to: destination)
.responseData { [weak self] response in
DispatchQueue.main.async {
self?.openInNative(url: url)
}
}
サンプルリポジトリ
サンプルコードはこちらのリポジトリに置いてあります。
github.com/shtnkgm/ARQuickLook
まとめ
- USDZとQuickLookを利用することで非常に簡単に3DモデルのAR表示ができる
- USDZファイルをネイティブで表示するにはWKWebViewは未対応なので注意
- QLPreviewControllerを利用することが多いと想定される
- QLPreviewControllerを利用する場合にもWeb上のUSDZファイルは一度端末にダウンロードが必要
参考サイト
本記事を作成するにあたり参考にさせていただいたサイトです。
- Apple、ARKit 2を発表
- Apple Engine - ARKit で使用されている USDZ とは何か
- 速報:アップル、AR向け新3DフォーマットUSDZ発表。iOS 12のARKit 2で導入
- Qiita - 【iOS 12】 AR Quick Look機能で自作モデルをSafariから見る
- Qiita - SFSafariViewController はトラッキングの夢を見るか
- wwdc2018 - Integrating Apps and Content with AR Quick Look
- wwdc2018 - Quick Look Previews from the Ground Up
Author And Source
この問題について(iOSでUSDZファイルのAR表示(AR Quick Look)), 我々は、より多くの情報をここで見つけました https://qiita.com/shtnkgm/items/79da65f2f869942ac97d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .