Houdini20.5で追加されたPoint Cloud Meassure(SOP)ノードについて。
このノードはポイント群をもとに様々なデータを計測できるノード。
↓はこのノードの活用例で、SideFX公式ページにあるのを真似してみた。
馴染みのないパラメータもいくつかあったので調べてみた。
パラメータ”Measurements”で、計測できる項目が選べるようになっている。
以下は、各計測項目。
Curvature
曲率(0~1)。どれくらい曲がっているかの値。主にサーフェイスやカーブに対して用いる。
中身の詰まった点群に対しては、正確に曲率を計測できないが、ノードの2番目の入力に計測用のポイントを接続することで計測できる。
Linear Propotion
直線率(1D)。どれ程まっすぐかを表した値(0~1)
検証用に、Line, Line(ノイズ),Box, Sphereを用意し、Scatterでポイントを散らしたものにPoint Measure SOPを適用した。
図はLinear Propotionを可視化したもの。
ひだりのLineふたつは見事にまっ赤。
Line(ノイズ)は強く折れ曲がっている箇所に赤以外の色が見える。
Boxはエッジ部分に明るい色が集まっており、そこが直線っぽいことがなんとなく分かりそう。
ただしBox,Sphere両方とも全面にノイズがかった感じになっているので、やはりラインを検出するために用いるのが良さそう。
Planar Proportion
平面率(2D)。どれだけ平面かの値(0~1)。
検証用に左から、Line、Grid、Box、Sphereを用意し、Scatterでポイントを散らしたものにPoint Measure SOPを適用した。
図はPlanar Propotionを可視化したもの。
Line以外は暖色系が強く出ている。
Boxはエッジ部分が寒色系で、平面ではないことが分かる。
興味深いのはGrid。これはポイントの並びを縦横きれいに整列させたものですが内部が平面部分の暖色系、外側部分が少し寒色系が混じっている。
Sphericial Proportion
Spherical(3D)度合。どれだけ立体的かの値(0~1)
LineやGridは単色の青で、BoxやSphereは中身の点群があるので、色が反応している。
Boxのエッジが寒色系なのは、内部よりは3D度合がさがるためか。
もうひとつ検証用に、下図のようなものを作って確認してみた。
やはり平面に近づくにつれてSpherical度は下がり、中身が詰まっている(3D構造)なほど値は高くなる。
Linear Density
ライン(1D)の密度
Area Density
平面(2D)の密度
Volume Density
立体(3D)の密度
Principal Component
上記パラメータとは少し毛色の違うパラメータがこの中にある、Eigen ValuesとEigen Vectors。
Eigen Valuesは固有値、Eigen Vectorsは固有ベクトル。
マニュアル読んでも分かりにくかったので、私の理解で書いてみる。
Eigen Vectors
順番が前後するが、先にEigen Vecotorsから。
これはポイントの分布によって一意に決まる固有のベクトル。この固有ベクトルは3つの互いに直行するベクトルで構成されており3×3のマトリクス値で出力される。各ベクトルは点群分布を近似する楕円体の「長さ」「幅」「高さ」に対応し、それぞれの方向を表しているらしい。私はちょっとイメージできなかったが、そうらしい。
ともかく「Eigen Vecorは、ポイント分布で決まる固有ベクトル」という認識で必要十分だろう。
ちなみにEigen Vectorというと馴染みは薄いが、copyなどで使うアトリビュートtransformと同じようなものと思えば少し理解しやすい。
https://www.sidefx.com/ja/docs/houdini/copy/instanceattrs
3つのベクトルで構成されているので、Visualizeすると下図のように3つの直行するベクトルで表示される。
ポイントの分布によって決まるので、ジオメトリ表面にあるポイントはベクトルの向きが定まりやすい。
ともすれば法線Nのようにも扱えると感じた。
それを利用して、作ったのがサムネイルのヤツ。
特に刺さった矢。
カピバラの体表近くのポイントを選んで、Eigen Vecorで作ったアトリビュートを元に、矢のオブジェクトをCopy to Pointすると、刺さった感じに配置できる。
内部の歯車の向きもEigen Vecorで決めているが、向きに意図はなくポイントの分布からこうなったというだけ。あと歯車も互いにかみ合ってはない。それっぽく見えるように調整しただけ。
Eigen Value
Eigen Vectorの大きさを表す値。3ベクトル分出力される。
この作例のように点群から法線ベクトルっぽいものを作成するだけならPoint Cloud Normal SOPでも可能だが、Eigen Vecorの方が3x3Matrixの分、厳密性も強制力も高い。出力されるアトリビュートがvectorかMatrixかの違いがあるので、そのあたりで使い分けるのが良いのだろうか。
以上、Houdini20.5で追加されたPoint Cloud Measure SOPを調べてみた、でした。
コメント