最近のiPad ProやiPhone 12 Pro / Maxに搭載されているLiDARスキャナで取得した点群をHoudiniに取り込んでみるテストをしたのでメモ。
使用機材
iPad Pro 2020
Houdini 18.5.351
pronoPointsScan
PCにファイルを転送する
- pronoPointsScanで点群をスキャンし、ファイルとして保存します
- iOSのファイルアプリで、「このiPad内 → pronoPointScan」を開きます
- 先程保存した目的のファイルを「コピー」
- PCから参照しやすい場所に「ペースト」
- 今回は、OneDrive経由でPCにファイルを転送しました
Houdiniでファイルを開く
Table Import SOPを作り、先程PCに転送したtxtファイルを開きます。
pronoPointsScanから出力されるデータは非常にシンプルで、以下のようなフォーマットになっています。
各行が一つ一つのポイント情報に相当し、各行にはそれぞれ以下のように数字が羅列されています。
@P.x,@P.y,@P.z,@Cd.r,@Cd.g,@Cd.b
@Cdを修正
pronoPointsScanで生成した点群データのカラー値は0-255なので、Wrangleを書いて0-1に修正します。
v@Cd = fit(v@Cd, {0,0,0}, {255,255,255}, {0,0,0}, {1,1,1});
方向を修正
Bound SOPで点群のOBBと、OBBをまっすぐに戻すためのxformアトリビュートを作成
点群ジオメトリにxformアトリビュートをコピー
Attribute Copy SOPで、点群ジオメトリにOBBのxformアトリビュートをコピーする
点群の軸を修正する
Match Size SOPで、Bound SOPで生成されたxformアトリビュートを使い、点群の軸を修正する
今回は点群の撮影場所が室内だったこともあり、たまたまいい方向に向いてくれましたが、点群の形状によっては全く見当違いな方向に向く可能性があるので、その場合は適宜、いい感じに工夫する必要があります。
問題点
- Table Import SOPが非常に遅い
- Pythonでやるなら先にtxtを解釈し、行数分のポイントを作成した後、アトリビュート配列を組み立ててから、hou.Geometry.setPointFloatAttribValues(name, values)を使って、一括でセットするなどしてタイムロスを最小限に抑える必要がありそう。
- ポイントにはそもそも法線情報がないので、Poinit Cloud Iso SOPなどで面を貼るためには下準備が必要
以上、手軽にLiDARスキャナで遊べる小ネタでした。