株式会社カシカ、代表の奥です。 今日はAppleの開発者向けカンファレンスWWDCで発表したObject Captureについての話をします。 Object Captureは時期macOS monterey(モントレー)の新APIです。
WWDCの紹介では、iPhoneで写真を撮って、macに入れると、物体の3Dデータが 数分で作成されるとのことでした。 内部のアルゴリズムはフォトグラメトリーといわれる、複数枚の写真データを使って 3Dデータを構築するアルゴリズムが使われているようです。
以下がWWDCの発表動画になります。 https://youtu.be/0TD96VTf0Xs?t=5714
iPhone/iPadとmacがあれば、誰でも簡単に3Dモデルをつくれてしまうというのは カタチスペースの方向性と合致しているので、これは見逃せない! ということで、早速試してみました!
目次
生成物
Object Captureで生成したモデルをカタチスペースでARで見えるようにしました。 iOS/Android(ARCore対応機種のみ)対応です。
動作環境
macOS montereyのインストールが必要です。 montereyはベータ版であり、ベータ版OSのインストールはApple Developer programに登録してる必要があります。 これには年会費99米ドルが必要です。
https://developer.apple.com/jp/support/compare-memberships/
登録している人は、サインインして、下記からダウンロードできます。
https://developer.apple.com/macos/
さらに、Object Captureを動作させる注意点として、
- M1 mac
- Intel CPU with AMD 4GB以上
のmacである必要があります。
つまり、AMD GPUを積んでいないIntel mac(Intel Graphicsのみ)のMacではインストール しても動作しないので、気をつけてください。(読んでなくてインストールしてしまったマン)
今回、私はMacBook16インチ(2019)のAMDの4GBのGPUで検証しました。 M1はGPUメモリとCPUメモリが共有しているアーキテクチャなので、8GB/16GBあるモデルではGPUメモリが4GB以上つかえるので どのモデルでもできるということでしょうか。この辺りM1で検証された方がいたら教えてください。
Object Captureのサンプルプログラム
公式が配布しているObject Captureのサンプルプログラムは以下からダウンロードできます。 https://developer.apple.com/documentation/realitykit/creating_a_photogrammetry_command-line_app
ダウンロードして実行してみましょう。 アプリの使い方は、
USAGE: hello-photogrammetry <input-folder> <output-filename> [--detail <detail>] [--sample-overlap <sample-overlap>] [--sample-ordering <sample-ordering>] [--feature-sensitivity <feature-sensitivity>]
ARGUMENTS:
<input-folder> The local input file folder of images.
<output-filename> Full path to the USDZ output file.
OPTIONS:
-d, --detail <detail> detail {preview, reduced, medium, full, raw} Detail
of output model in terms of mesh size and texture
size . (default: nil)
-l, --sample-overlap <sample-overlap>
sampleOverlap {normal, low} It should be set to
`low` if there is low overlap between images captured
nearby in space.
-o, --sample-ordering <sample-ordering>
sampleOrdering {unordered, sequential} Setting to
sequential may speed up computation if images are
captured in a spatially sequential pattern.
-f, --feature-sensitivity <feature-sensitivity>
featureSensitivity {normal, high} Set to high if the
scanned object does not contain a lot of discernible
structures, edges or textures.
-h, --help Show help information.
となっており、
./HelloPhotogrammetry inputdir/ out.usdz
で実行できます。 USDZ形式で出力されます。 公式情報ではUSDC/OBJ形式で出力できるそうですが、現時点では出力ファイルの拡張子を変えるだけではダメなようです。
iPhoneで撮った写真をinputdirにいれて実行してみましょう。
ちなみに、動作環境でない人が、動かそうとすると以下のエラーがでます。
Error creating session: cantCreateSession(“Native session create failed: CPGReturn(rawValue: -11)“)
実行結果
inputの写真枚数によって、3Dモデルの生成時間はモデルによって変化します。
--detail [MODE]
でクオリティを設定できるようでいくつか試したところ、
早い順から
- preview
- raw
- medium/reduced ほぼ同じ
- full(最後クラッシュした)
という結果でした。
previewが一番早く、rawはテクスチャが最低限で、ポリゴンデータが細かい状態でした。 medium/reduced/fullはrawの状態からテクスチャを生成しているものと思われます。 fullは100%までは行くのですが、なにが悪いのか、100%のあとクラッシュしてファイルが生成されませんでした。
previewで生成した結果をカタチスペースで表示してみたのが 生成物 になります。 是非置いてみるボタンを押して、ARでみてみてください。 たった数分でかなり品質が高い3Dモデルが出力されていることがわかります。
表示されているオブジェクトは、Object Captureプログラムの出力そのものであり、 オブジェクト以外のゴミ除去など一切していません。ただプログラムにいれて実行しただけで このクオリティが出てくることはかなり驚きでしょう。(撮影オブジェクトのマスキングの機能があるようです)
まとめ
フォトグラメトリー技術は従来からありましたが、RealityCaptureなどが有名ですが、それなりのライセンスフィーを必要としていましたが最新のmacOSだと、なんと無料で使えてしまうというのはすごいですね。
しかも、オブジェクトのセグメンテーションもされており、ゴミ除去なども必要ありませんでした。
有名フォトグラメトリーソフトにも負けないか、それ以上のクオリティだとおもいます。
より詳しいAPIの情報を知りたい方は後述の参考サイトを参照するとよいでしょう。 かなり便利なAPIであることが分かったので、今後カタチスペースではObject Captureの機能に対応していきたいと考えています。
カシカでは、スマートフォンだけでオブジェクトの3Dデータが作れるアプリ”カタチスペース”を配信しています。 (TrueDepthセンサーを持つiPhone/LiDAR対応のiPhone/iPadに対応しています。)
皆さん、是非活用してみてくださいね。
スマートフォンでの3Dデータ作成に興味のある企業様は以下からお問い合わせください。 https://kashika.co.jp/contact.html
参考サイト
Create 3D models with Object Capture - WWDC 2021 - Videos - Apple Developer
Capturing Photographs for RealityKit Object Capture
Creating 3D Objects from Photographs