[iOS 11][ARKit] 新登場! Googleの3Dオブジェクトライブラリ Poly が便利すぎる

88件のシェア(ちょっぴり話題の記事)

1 はじめに

先週末(現地時間 2017年11月1日)、無料で使える3Dオブジェクトを集めたライブラリサイトPolyが、Googleによって公開されました。

001

Polyでは、既に多数の作品が公開されており、カテゴリからの選択や、キーワードによる検索ができるようになっています。

キーワードを入力して検索できる

002

左上のハンバーガーメニューからカテゴリを選択できる

004 003

ライセンスは、基本的にクリエイティブ・コモンズ・ライセンスとなっており、個々の作品をダウンロードする段階で、詳しく表示されます。

005

参考:クリエイティブ・コモンズ・ライセンスとは

ダウンロードできるファイルは、Googleの「ARCore」だけでなく、ARKitでも利用可能です。 今回は、早速、ダウンロードして使ってみました。

2 Blenderによる変換 

今回使用させて頂いた3Dモデルは、Naomi Chen氏の作成されたCube Room です。

008

ダウンロードを選択すると、.obj(Advanced Visualizer形式)のファイルがダウンロードできます。.objは、そのままでもXcodeに取り込めるのですが、一部の情報は欠落してしまうため、一度、Blenderにインポートして .dae (COLLADA形式)に変換してから使用しました。

006

変換すると、Macのプレビューでそのまま見ることができます。

007

Xcodeに取り込んだ .daeは、メニューから Editor > Convert to SceneKit secene file formatを選択して.scnファイルに変換できます。

また、Materialsには、改めてテクスチャーを適応し直します。

009

3 ARKit からの利用

ここまでくれば、ARKitからの利用は、簡単です。scnファイルからオブジェクトを抜き出して、これを、メインのシーンに入れるだけです。

// シーンファイルの読み込み
let scene = SCNScene(named: "art.scnassets/house.scn")!
// シーンファイルからオブジェクトを抽出する
let houseNode = scene.rootNode.childNode(withName: "obj", recursively: true)!
// スマフォ画面の中央を基準に配置する
if let positon = getCenterPosition() {
    houseNode.position = positon
    sceneView.scene.rootNode.addChildNode(houseNode)
}

なお、オブジェクトの配置に際しては、事前に平面を検出し、双方を物理演算の対象設定しています。平面検出や衝突検知については、下記をご参照ください。

[iOS 11] ARKitでソファー設置からあの子の身長測定まで色々やってみた

次の動画は、動作しているようすです。

4 最後に

「何かいいモデルはないかな?」と探している時には、マウスでグリグリ操作して確認できるビューアーが非常に嬉しいです。ダウンロードして展開することなく、自分の求めているものかどうか素早く確認できます。

Polyは、3Dオブジェクトを求める開発者には、非常に嬉しい存在となるのではないでしょうか。

今回のコードは、下記に置きました。参考になれば幸いです。
github [GitHub] https://github.com/furuya02/ARKitPolySample

5 参考リンク


Poly https://poly.google.com/
[OS X] 透過型のTwitterクライアントを作ってみた
[iOS 11] はじめてのARKit #WWDC2017
[iOS 11][ARKit] 距離の計測について #WWDC2017
[iOS 11][ARKit] 平面の検出について #WWDC2017
[iOS 11][ARKit] 物理衝突を実装して、キューブを落として見る #WWDC2017
[iOS 11][ARKit] 空間に3Dテキストを表示してみる #WWDC2017
[iOS 11] ARKitでソファー設置からあの子の身長測定まで色々やってみた
[iOS 11][ARKit] 近所の駐車場で、大型ディスプレイでビデオを見る!
[iOS11][ARKit] オブジェクトの位置と回転「常にこっちを向いている怪獣」
[iOS11][ARKit] SCNBoxとSCNTextでラベルみたいなノードを作成してみました
[iOS 11][ARKit] UIViewをテクスチャーにしてTwitterクライアントを作ってみる