2021年6月10日木曜日

Object capture でうさぎを3Dにする! その5 〜Object capture でうさぎを3Dにしたよ〜

けっきょく M1 の Macbook Air を緊急調達しまして(中古でね; メモリ16GB は中古じゃないと即手に入らない)、実際に Object capture を試してみましたよ。


どんなのができた?

こんなのができました🐰



 

私は 3D も フォトグラメトリ も完全素人なのに、ここまでできるのはすごいですね!

下面がおかしいのは、これはもうしょうがないのかな。ぬいぐるみを一時的に浮かして撮ればなんとかなるのかもしれない。

 

どうやって作った?

写真

このとき、写真を36枚使いました。

 

実は、これより前に白い模造紙で囲った場所に ターンテーブルを置いて ぬいぐるみを回転させながら撮っていったのですが、これがいけなかった。
ぬいぐるみがほぼ単色だから悪いのか、形をなしていないものしかできあがりませんでした。

そこで撮影の配慮を何もせず、ただぬいぐるみを部屋において、周囲を回りながら撮影したものがさきほどの 3Dのモデル画像になります。

※ちなみに、正統な撮影方法はこちらにあります。

 

実行コマンド

HelloPhotogrammetry をコマンドとして実行できるまでの準備については割愛しまして、
HelloPhotogrammetry のコマンドについてです。

OVERVIEW: Reconstructs 3D USDZ model from a folder of images.

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 ~/Desktop/rabbit6 rabbit6_full_normal_seq_normal.usdz -d full -l normal -o sequential -f normal

  • 第1引数
    • 写真が入ったディレクトリのパス
  • 第2引数
    •  生成されるファイル名(拡張子としてかならず .usdz をつけましょう)
  • -d 引数
    • すばやく確認したいときは preview
      そうでないときは full
      だと良さそうです
    • ただし full でも1-数分待てばできあがるので、full 固定でもよいのかも
  • -l 引数
    • 対象の写真をあまり撮影していない場合は low を
      そうでなければ normal のようです
    • この値は検証しがいがありそうな感じです
  •   -o 引数
    • 撮影した写真が比較的順番に並んでいるかをあらわし、順番に撮影したなら sequential
      そうでなければ unordered です
    • ただし処理速度に影響するだけらしいので、撮影した写真のファイル名と順番に一貫性がないなど自身がなければ unordered でよいでしょう
  • -f 引数
    • 対象物の背景等がはっきりしていなければ high にするようです
      背景等がはっきりしていれば normal
    • この値も検証しがいがありそうな感じです


このあたりの引数を変えながら出力される3D結果を見たんですが、まだまだ掴みきれていません。

3D にしたいものを手軽に 3D にするために、今後も検証してゆこうと思っています。


 

< 分身さんこんにちわー🐰



 

 

 

 

2021年6月9日水曜日

Object capture でうさぎを3Dにする! その4 〜Object capture の対応マシン〜

さきほどは対応マシンで悩んでいましたが、WWDC の Object capture のセッションがスマホから見られましたので疑問氷解です。

 

 

対応 Mac の条件は?

・・・と、いうわけで、

  • M1マシンすべて
    • つまり MacBookAir もいける!
    • つまり MacBookPro 13" もいける!
  • VRAM4GB かつ メモリ16GB マシンすべて

が Object capture の対応マシンとなりそうです。

つまりこれは動くっぽい。

 

 

ただしアプリ開発するから メモリ8GB じゃきつい・・・。

どうしようか考える。



続きはこちらです!
https://nextsphere-blog.blogspot.com/2021/06/object-capture-3d-5-object-capture-3d.html

 

Object capture でうさぎを3Dにする! その3 〜Error creating session: cantCreateSession("Native session create failed: CPGReturn(rawValue: -11)")〜

さてさて、WWDC の Object capture のセッションが気になったので早く起きてしまいました。

・・・いまだに見られないのはどういうことなんだろうか・・・?
現在 JST 6/9(水) 6:04。

しょうがないから Apple のフォーラムを当たろう。


 

自分の Mac が対象外だったという衝撃

このエラーの結論が・・・ 

Error creating session: cantCreateSession("Native session create failed: CPGReturn(rawValue: -11)")
Program ended with exit code: 1

・・・こちらにありました。

  • CPGReturn(rawValue: -11) はお使いのハードウェアがサポートされていないことを意味します。これは通常、GPU が必要な機能をサポートしていないことが原因
  •  4GB の VRAM が必要である

 

なんと・・・
余剰の MacBook (Retina, 12-inch, 2017) ではだめだと・・・・ orz

マシンを買えと・・・買えということかっ!!!

メモリを 16GB に増やした MacBook、気に入ってたんだけどな・・・。



・・・というわけで、いまの自分の Mac ではどうにもならないことが判明しました。悲しい。


対応 Mac の条件は?

なにぶんセッションが見られないので、セッションの 2:32 の部分も分からないのだが、これまでに調べた情報だと・・・

  • M1 じゃなくてもよい (Intel CPU でいい)
  • 4GB VRAM が必要らしい

くらいです。

 

VRAM が 4GB って・・・

・・・ということで、ほしかった M1 の MacBookAir は、対応状況がよくわからない。
MacBookPro は持ち歩きたくないから欲しくないが、手に入れるならばなるべく古い 2017年前後のモデルになりそう。

最新情報は次のエントリにて!

 

2021年6月8日火曜日

Object capture でうさぎを3Dにする! その2 〜CreatingAPhotogrammetryCommandLineApp で -11エラー〜

 さてさて、さきほどの続きであります。はたしてうさぎを 3D にできるのか!?

 Xcode13 beta は手に入りましたね?

 

Xcode13 のインストール

はい。Xcode を入れます。
これは言うまでもないのでばっさり手順割愛。

 


 

Apple のサンプルコードの入手

Creating a Photogrammetry Command-Line Appから、ファイルをダウンロードしてきてください。

解凍して、プロジェクトを開きましょう。

 

開いたら、signingまわりをなんとかして・・・

このプロジェクトはコマンドライン引数を取るので、ここから設定します。
第1引数が、3D化したい写真が大量に入ったディレクトリのパス。
第2引数が、3D化した結果のファイル名。

 

・・・ん?
写真が必要なんですね。撮りましょう。

※ちなみに、あとから気がつきましたが
 サンプル写真が、当該プロジェクトの Data/Rock36Images.zip というところにありました。これを使って試せるようです。まぁ、私はこれを使っても -11 エラーでしたけど。。。

 

3Dにしたい対象物の写真を撮る

私が使ったのは iOS14.6 の iPhone X。これで写真を撮ってゆきます。
別に LiDAR とかいらないらしい。

RealityKit オブジェクトの作成では、iPhone や iPad のカメラ、DSLR やミラーレス カメラ、さらにはカメラを搭載したドローンなど、あらゆるデジタル カメラでキャプチャした画像を受け入れます ・・・Google翻訳したこちらより引用

・・・だそうな。

 

具体的な撮り方ですが、
物体の上から、物体を舐め回すように眺めながら撮ってゆきます。

このあたりの正確な作法はこちらにありますが、いまは物体をテキトーに撮っていきます。

必要とするファイルの形式すらもよくわからず、はじめは .JPG で、二回目は .HEIC で撮ってます。これがいいのか悪いのかはよくわかっていない(なぜなら後述のエラーで進まないから)。

今回は、こんな感じで念入りに撮りました。

・・・

撮った写真は、mac にディレクトリを作って移します。
今回は /Users/junakita/Desktop/rabbit2 に置いたので、Xcode で指定した第1引数も /Users/junakita/Desktop/rabbit2 にしてあります。


プロジェクトを実行

さてさて、Xcode に戻って実行すると・・・

変なエラーが出ています。

 Using configuration: Configuration(isObjectMaskingEnabled: true, sampleOverlap: RealityFoundation.PhotogrammetrySession.Configuration.SampleOverlap.normal, sampleOrdering: RealityFoundation.PhotogrammetrySession.Configuration.SampleOrdering.unordered, featureSensitivity: RealityFoundation.PhotogrammetrySession.Configuration.FeatureSensitivity.normal)
2021-06-08 22:36:04.244052+0900 HelloPhotogrammetry[850:21464] Metal API Validation Enabled
Error creating session: cantCreateSession("Native session create failed: CPGReturn(rawValue: -11)")
Program ended with exit code: 1

 

・・・これがちっとも解決しません。

ドキュメントを見ても -11 の意味がわからず、
Twitter を見ても -11 の意味がわからず、
ビルドしてからターミナル経由で呼び出しても変わらず。

 

※ちなみに、このサンプルのコマンドライン引数はこうです

junakita@akitajunnoMacBook bin % ./HelloPhotogrammetry
Error: Missing expected argument '<input-folder>'

OVERVIEW: Reconstructs 3D USDZ model from a folder of images.

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.

 

 ・・・ということで、きょうはこれで袋小路のままで終わりになりそうな予感です。

 

 

 < はやく 3D にして〜🐰
 
 
 
 
 

 

Object capture でうさぎを3Dにする! その1 〜Cinema 4D ではだめだった〜

たぶん日本初の Object capture のブログ記事! のはず!

 

きのう WWDC 2021 で発表された "Object capture" で、
みんなが大好き! 愛してる!! ・・・はずの 🐰うさぎ✨ を 3D にしてみようと思います。

・・・まぁ、やる前から、勝手きままに動くペットを3Dにするのなんて無理だろうとは思ってますけどね・・・


まずはとにかく macOS Monterey を入れる

2021/06/08現在、ベータ版が配布されていますので Apple Developer の Download からプロファイルを取得して、ダウンロードを始めましょう。

画面キャプチャを取り忘れたんですが macOS 12 BigSur と書いてあったような気もしますが気にせずに入手します。

時間がかかるので、寝る前などにしかけておくとよいでしょう。
(ついでに Xcode13 beta もダウンロード始めておいたほうがよいと思います; 後述します)


ダウンロードしたらインストールします。

ここで再起動するんですが、ディスクを見つけられなかったようなエラーが出ました。
その後マシンを起動したら、またインストール画面からになり、またインストール作業をしました。
これでループし続けたらどうしよう・・・と思いましたが、今度は無事起動。

 

Cinema 4D の入手(これは結果として不要だった)

続いて、Apple の動画で言及されていた Cinema 4D を入手します。

月額1万円オーバーとのことですが、とりあえずはトライアル版がダウンロードできるのでそれを使いました。バージョンは S24.037。
ちなみに当方、Cinema 4D とかさっぱりわかりません。ていうか 3D も知らん。


入ったら、ライセンスの設定のような画面があって、設定して・・・起動!

ふむ。

ふむふむ。

・・・わかんねー・・・💦
 
 
Apple の動画を丁寧に見ると、どうやら Moves by Maxon というウィンドウに "Object Captures" というタブがあるようです。
 
なので、そこをみてみる。


・・・ "Object Captures" なんて、影も形もない💧

さんざんさまよった挙げ句、Twitter の公式さんに質問を投げつつ、Cinema 4D をあきらめました。きっとほかにもやりかたはあるはずだ!

神降臨、CreatingAPhotogrammetryCommandLineApp

調べていくと、実際に Object capture をやってみた方がいました。一般人最速使用はこの方だったのでは。
どうやら Creating a Photogrammetry Command-Line App のソースを使った様子です。
 
ということで、Apple Developer から Xcode 13 もダウンロードするはめになります。 
・・・が、これが時間がかかりますので・・・

今回はここまでで。


まとめ

必ずしも Cinema 4D はいらない。
なので


え。これタダ? 無料なの? と思ったら、デモではCinema 4Dを使ってた。高いんだよねCinema 4D。プロ向けだからしゃーないけど。Object CaptureのAPIを組み込んだ、ローコストな3Dモデリングソフトが出たらいいのだけど

悩みは、たぶん解決・・・される・・・と思う・・・。

 

その2はこちら:
https://nextsphere-blog.blogspot.com/2021/06/object-capture-3d-2-creatingaphotogramm.html


 🐰個人的にやりたいことメモ🐰

 こういううさぎのかわいい瞬間を、3D に残したい!!