Rhino 8 の新機能紹介 〜ObjectCapture編〜
01 December, 2021 - 2 min read - Tags: Rhinoceros,Photogrammetry
はじめに
Rhino 7 が発売されてだいぶ立ちましたが、開発版の RhinoWIP(将来のRhino8)にじわじわと新しい機能が追加されだしました。
その中で Apple Silicon Mac 版の Rhino WIP にのみ 追加された機能である ObjectCaptureFromPhotos を紹介します。
どのような機能かというと物体の周囲を撮影した写真のデータをもとに立体を作成する機能になります。 以下のようなものが Rhino で作成されます。いわゆるフォトグラメトリと言われるものになります。
M1Pro を使った Rhino8 のオブジェクトキャプチャー機能の試し。
— hiron (@hiron_rgkr) November 28, 2021
これで簡単に Rhino でフォトグラメトリできるね!! pic.twitter.com/vli9tRPGvq
なお開発途中の機能の紹介ですので、今後実装が変わる可能性があるので注意してください。 2021/12/01時点での情報になります。
必要な環境
- Rhinoceros WIP
- Apple Silicon Mac (M1 以降のCPU)
サンプルの実行
上にも書いたように開発版の機能なので、最新情報は例えば以下の Rhinoceros Forum を参照してください。
サンプルを使った ObjectCapture の手順は以下になります。
- macOS Monterey を使用していて、Apple Silicon Mac で Rhinoceros WIP を起動
- 現在開発版なので RhinoWIP は最新版なのか確認
-
サンプル写真セットをダウンロードし解凍
- Rhino で
ObjectCaptureFromPhotos
コマンドを実行 - 3 で解凍した写真のあるフォルダに移動し OK をクリック
- コマンドオプションを指定(詳細は以下に記載)し Enter
-
処理が開始
- 上記サンプルとデフォルトのオプションを使用すると約90秒かかります。
- 処理が完了するとモデルウインドウに新しいメッシュが表示される
- 確認したいウインドウのビューのモードをレンダリングにするとモデルが表示される
これでサンプルの実行は終わりです。とても簡単に実行できますね。 自分で撮った写真を使いたい場合は、対象となっているものは jpeg, heic, png の3種類になります。
実行時オプション
実行時に UI で設定できるオプションは以下の3つがあります。
-
Detail Level
-
Preview
- 荒いメッシュでクオリティの低いマテリアルになるが最速で処理される
-
Reduce
- Preview よりクオリティが高いが処理が遅くなる
-
Medium
- 密なメッシュと詳細なマテリアルになるが処理が遅くなる
-
Full
- 最も良い品質のメッシュとマテリアルになるが、処理が最も遅くなる
-
-
Sample Ordering(撮った画像の順序)
-
Unordered
- 画像の並びが空間的に順序立っていない場合に選択する
- 処理は順序だっている場合に対して遅い
-
Sequential
- 画像の並びがターンテーブルを使って撮影した場合のように空間で順序だっている場合に選択する
- 処理の速度を早くすることができる
-
-
Feature Sensitivity
-
Normal
- 典型的な形状、エッジ、テクスチャの場合に選択
-
High
- 識別可能な構造、エッジ、テクスチャーがあまりないオブジェクトの場合に選択
-
なぜ Mac のみ対象の機能なのか
この機能は Mac 版のRhinoのみに実装される機能になります。 なぜかというと、macOS によって提供されている Object Capture 可能な API である RealityKit を使用しているからです。
オプションはこの API で提供されているオプションを Rhino の UI でラップしたものになっており、mcneel側の実装ではないです。
Apple が出している公式のサンプルは以下になります。 これはコマンドラインから Rhino でできることとほぼ同様のことを実行するアプリになります。 違いは出力が usdz 形式になっているところです。
Detail level は PhotogrammetrySession.Request
で設定可能な Detail の enum に相当します。
このドキュメントを見ると出力の戻り値には Bounds を選択することができ、これはモデルのバウンディングボックスを返すようです。 ですがこれは Rhino 側の機能でもカバーできるので、この API は使用していないようです。
また Detail の enum を見ると Rhino では選択できない raw という設定があることがわかります。 サイズが非常に大きくなるため Rhino 側では使用できないようにしているのかもしれません。
設定とサイズはドキュメントに記載があったので、以下に引用します。
Detail Level | Triangles | Estimated File Size | Texture Size | Texture Memory Required |
---|---|---|---|---|
.preview | <25k | <5MB | 1024x1024 | 10.7MB |
.reduce | <50k | <10MB | 2048x2048 | 42.7MB |
.medium | <100k | <30MB | 4096x4096 | 170.7MB |
.full | <250k | <100MB | 8192x8192 | 853.3MB |
.raw | <30M | Varies | 8192x8192(multiple) | Varies |
Sample Ordering と Feature Sensitivity は PhotogrammetrySession.Configuration
での設定可能な enum に相当します。
- PhotogrammetrySession.Configuration
- enum PhotogrammetrySession.Configuration.SampleOrdering
- enum PhotogrammetrySession.Configuration.FeatureSensitivity
この2つのオプションは Detail Level のような無効化されているオプションはありませんでした。
画像の作り方
こちらは様々なフォトグラメトリの TIPS をいろんな方が上げているので、参考を上げることにとどめます。
データの作成部分をコードで扱ってみる
この機能は macOS が提供している機能なため、Rhino からではなくコードから使用することができます。 上でも出しましたが、apple の公式が出しているコードのサンプルは以下になります。
動作に必要な部分だけ更に抽出したコードを以下に作成しましたので、興味のある方は公式のサンプルと合わせて見てください。